buuctf easyphp
我們用這個輸出
但我不明白為什么,不能直接把“POST[‘a’];”全都異或掉,這多省事兒了,但好像不行,而且好像還只能是GET型,我嘗試了POST類型行不通。目前我就只知道它可以代替"GET",然后配合_POST[‘a’];” 全都異或掉,這多省事兒了,但好像不行,而且好像還只能是GET型,我嘗試了POST類型行不通。目前我就只知道它可以代替"_GET",然后配合P?OST[‘a’];”全都異或掉,這多省事兒了,但好像不行,而且好像還只能是GET型,我嘗試了POST類型行不通。目前我就只知道它可以代替"G?ET",然后配合{%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&ff=phpinfo,可以執行一些函數。拋開這道題,我們還可以: **http://127.0.0.1/?_=KaTeX parse error: Expected '}', got 'EOF' at end of input: …就可以執行任何函數了。 前面的{%ff%ff%ff%ff^%a0%b8%ba%ab}是[GET]的意思,后面是system的意思連上就是[_GET]的意思,后面是{system}的意思連上就是[G?ET]的意思,后面是system的意思連上就是{_GET}{system}(“type index.php”)
eval(str="str="str="{${phpinfo()}}"😉 → 可以執行phpinfo()
KaTeX parse error: Expected '}', got 'EOF' at end of input: {phpinfo()} = {{phpindo()}}
PHP復雜變量 {}不能被轉義,其包裹的部分可當作變量 花括號{}只是用于區別變量邊界的標識符
所以其實傳入的數據的意思就是我們GET的參數,之后傳入eval執行system,執行變量
這里第一點我們就已經能夠破譯了,下面的第二點就到了,上面的方法就是我們使用文件上傳方法的引子,下面我們就應該使用文件上傳的方式來將文件上傳上目標服務器進而獲取權限
不能上傳含有.ph后綴的文件,我們開始考慮.htaccess和.user.ini兩個形式的文件,
但是這里的.user.ini不太行,上傳user.ini需要去訪問PHP文件之后目標服務器才回去檢測user.ini的設置,而且該目錄之下好像必須
所以我們這里使用htaccess這個配置文件,他可以將.jpg圖片文件當成目標php文件執行
還有一個文件頭 的檢測,我們使用GIF89a來繞過,當他將我們限制需要用base64的形式讀取文件的時候,我們可以考慮在后面加上兩位數12,16,86之類的,作用是補全base64解碼需要的8位數
頭幻數,為什么是GIF89a?
對內容進行了過濾,讓內容不能包含<? ,一般情況下我們會選擇用
這里會出現問題,.htaccess文件會無法生效
我們可以使用#define width 1337 #define height 1337進行繞過,#在.htaccess中表示注釋,我們需要備注上寬和高,為啥不太清楚
用py來寫腳本,思路
1,先將我們要寫的腳本寫上,后面準備將他們傳上去,我們這不就導入requests包準備了,然后一個.htaccess的腳本,后面再寫一個傳入的木馬shell
2,Files是內置函數,第一個參數是文件名稱,第二個是對當前區域內的關聯映射(就是說這事那個文件),第三個是內置文件類型,
3,Data是上傳的方式
4,先將.htaccess上傳,我們就能對下面上傳的文件進行包含運行了,之后再將木馬shell進行上傳。完成了操作,b是將數據變成什么b開頭的什么格式,估計是為了后臺服務端的
5.之后我們發現上傳之后用蟻劍連上了,發現不行,有open_basedir的限制,
6.這樣就沒辦法了,只能說就是這個函數能進行文件可讀取區域的定義,我們要對他進行繞過
都會進行一次open_basedir的比對,即php_check_open_basedir_ex。由于相對路徑的問題,每次open_basedir的補全都會上跳。
比如初試open_basedir為/a/b/c/d
第一次chdir后變為/a/b/c,
第二次chdir后變為/a/b,
第三次chdir后變為/a,
第四次chdir后變為/,
那么這時候再進行ini_set,調整open_basedir為/即可通過php_check_open_basedir_ex的校驗,成功覆蓋,導致我們可以bypass open_basedir。
7.所以我們這里就是有幾級目錄就進行幾次…的操作,這樣的操作實質上是內置函數每一次都仿佛進行了一次cd …/ ,這樣在五次之后,我們就成功跳到了根目錄之下,這時候我們再進行目錄條件的設置就符合了條件,能將當前目錄設置成作
8.差不多就是這樣了,上傳之后我們就能讀取到文件,
9.當然,先進行var_dump(scandir("/"))來讀取,之后再進行別的
總結
以上是生活随笔為你收集整理的buuctf easyphp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一键卸载,跟流氓软件说拜拜~
- 下一篇: 多 wan 口路由器配置