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