實(shí)驗(yàn)環(huán)境:upload-labs靶場
靶場環(huán)境使用phpstudy和xampp搭建轩拨,因?yàn)閮蛇叾几饔幸徊糠稚蟼鳈C(jī)制無法正常運(yùn)作拇派。
這種機(jī)制的繞過需要大量的經(jīng)驗(yàn)與時(shí)間牺陶,在不知道后臺(tái)代碼的情況下只能根據(jù)情況進(jìn)行合理嘗試。
Pass-01
一般的題目最開始的都是最簡單的凡蜻,考慮前端限制文件類型。
查看頁面源碼垢箕,果然在前端進(jìn)行了限制划栓。
那么我們把準(zhǔn)備好的php文件后綴改為.jpg,這樣就能繞過前端的檢測条获。
然后上傳的時(shí)候使用burp suite攔截忠荞,并把文件后綴改回.php,成功上傳php文件帅掘。
上傳成功的結(jié)果基本都一樣委煤,后面不再贅述。
Pass-02
猜測服務(wù)器校驗(yàn)content-type修档,因?yàn)橐笊蟼鞯奈募菆D片碧绞,所以校驗(yàn)會(huì)要求這個(gè)參數(shù)的值是image/jpeg,image/png吱窝,image/gif等
嘗試修改content-type讥邻,將其修改為gif,這樣如果服務(wù)器校驗(yàn)了content-type院峡,就會(huì)認(rèn)為它是合法的兴使。
成功上傳php文件!
Pass-03
服務(wù)器采用黑名單判斷(當(dāng)然如果是黑盒測試我們是不知道的)
我們嘗試使用如.php3,.php5照激,.phtml這樣的文件后綴來繞過发魄。
因?yàn)檫@樣的后綴名依然可以被php解析,而且可以繞過一些簡單的黑名單過濾俩垃。
上傳成功励幼!但是可能因?yàn)榉?wù)器配置原因,沒有成功解析php文件吆寨。
所以為了說明問題赏淌,這里引入另一個(gè)實(shí)驗(yàn)環(huán)境:墨者學(xué)院平臺(tái)題目
鏈接:https://www.mozhe.cn/bug/detail/UjV1cnhrbUxVdmw5VitBdmRyemNDZz09bW96aGUmozhe
在此題中上傳一句話木馬,并將后綴修改為.php3啄清。成功上傳!
然后我們打開中國菜刀俺孙,去連接我們上傳的木馬文件辣卒。
連接成功!說明后綴為.php3的文件確實(shí)被正確解析了睛榄。
Pass-04
此題需要使用xampp環(huán)境荣茫。
此題幾乎過濾了所有有問題的后綴名,修改后綴變得不可用了场靴。
但是還有一個(gè)后綴名可以用啡莉,就是.htaccess港准。
這屬于Apache的一種配置文件,我們創(chuàng)建一個(gè)名為.htaccess的文件咧欣,在里面寫入如下內(nèi)容浅缸。
意思是令所有的文件后綴都以php進(jìn)行解析。
比如我們上傳一個(gè)圖片文件魄咕,服務(wù)器也會(huì)把圖片文件當(dāng)成php文件進(jìn)行解析衩椒。
所以我們先把寫好的.htaccess上傳。
沒有問題哮兰,成功上傳毛萌。
然后我們把php文件后綴修改成.jpg,然后上傳喝滞。
上傳成功阁将,此時(shí)兩個(gè)文件在同一目錄下。
我們嘗試解析jpg文件右遭。
可以看到成功被解析為php文件做盅!
Pass-05
此題使用xampp環(huán)境。
后臺(tái)過濾了幾乎所有有問題的后綴狸演,包括.htaccess言蛇。
我們嘗試用大小寫繞過。
在上傳文件的時(shí)候修改文件后綴名的大小寫宵距。
成功上傳腊尚,我們嘗試解析這個(gè)文件。
解析成功满哪,沒有問題婿斥!
Pass-06
依舊是黑名單機(jī)制,但是過濾更全面哨鸭。
這里利用windows的機(jī)制:文件名中不能出現(xiàn)點(diǎn)民宿,冒號,空格等符號的特性像鸡,否則會(huì)直接消除活鹰。
這樣我們在上傳文件過程中,在文件后綴名后面加上一個(gè)空格只估。
成功上傳志群!而且可以看到上傳后的文件名,后綴中自然是沒有空格的蛔钙,可以正常解析锌云。
Pass-07
還是黑名單,但是這次變成了點(diǎn)吁脱。
與第六題相似桑涎,在文件后綴名后面加上一個(gè).即可成功繞過限制上傳彬向。
Pass-08
依然是利用windows特性,在文件名后綴后面加上::$DATA攻冷。
感覺挺生僻的娃胆,先作為一種知識(shí)儲(chǔ)備吧。
Pass-09
在這題里面刪除了文件名末尾的點(diǎn)讲衫,而且去掉了空格缕棵。
那么我們可以構(gòu)造一下,在文件名后綴末尾加上. .(點(diǎn)空格點(diǎn))
這樣去掉點(diǎn)涉兽,再去掉空格招驴,剩下的部分就是filename.
又因?yàn)閣indows特性,最后剩下的就是filename了枷畏。
OK别厘,成功上傳!
Pass-10
本題會(huì)去除所有腳本后綴拥诡。
所以很容易想到雙寫繞過触趴。
我們把文件名寫成test.pphphp。
這樣去除了中間的php之后渴肉,剩下的部分組合起來依然是php冗懦。
成功上傳!
Pass-11
有php版本要求仇祭,所以使用phpstudy的環(huán)境(php5.2.17)披蕉,高版本的php已經(jīng)修復(fù)此問題。
還要注意有一個(gè)參數(shù)需要修改乌奇,否則無法上傳成功没讲。打開php目錄下的php.ini文件。
將其中的magic_quotes_gpc修改為OFF狀態(tài)即可礁苗。
我們在上傳時(shí)發(fā)現(xiàn)文件的保存路徑是可控的爬凑。
考慮使用%00截?cái)辔募缶Y。
%00在處理時(shí)會(huì)被當(dāng)成一種結(jié)束符试伙,也就是說處理到這里碰到%00嘁信,后面的就不繼續(xù)處理了。
我們可以利用這個(gè)原理來截?cái)喽嘤嗟暮缶Y疏叨。
如圖吱抚,我們修改一下保存路徑,把上傳文件名后綴修改為.jpg考廉,這樣可以繞過擴(kuò)展名檢測。
這樣在保存文件的時(shí)候携御,%00后面的多余內(nèi)容全部被截?cái)嗖粒皇O聇est.php既绕。
這樣就成功上傳了php文件。
Pass-12
依然是00截?cái)噤套俏覀冇^察數(shù)據(jù)包發(fā)現(xiàn)路徑變成了post方式提交凄贩。
Get方式提交的路徑會(huì)自動(dòng)解碼%00,但是post方式不會(huì)自動(dòng)解碼袱讹,所以不能直接修改路徑疲扎。
因此我們要通過二進(jìn)制的方式來修改路徑。
如圖捷雕,我們先將文件后綴修改為.jpg來繞過后綴檢測椒丧。
然后在路徑后面加上test.php+。
為什么加上一個(gè)+呢救巷,因?yàn)槲覀円?的二進(jìn)制編碼修改成00的編碼壶熏,而+的編碼(2b)比較方便查找。
我們點(diǎn)開Hex浦译,在里面查找+的編碼并將其修改為00棒假。
然后將數(shù)據(jù)包放出,php文件成功上傳精盅!
Pass-13
要求上傳一個(gè)圖片馬帽哑,并執(zhí)行文件包含漏洞。
首先我們制作圖片馬:copy 2.jpg+2.php 3.jpg
制作完成之后將圖片馬上傳叹俏。
注意站點(diǎn)本身必須要有文件包含漏洞妻枕,才能利用圖片馬。
我們找到站點(diǎn)下的include.php文件她肯。使用這個(gè)文件包含漏洞打開圖片馬佳头。
看文件底部,這里我們拼接了php語句晴氨,但是沒有顯示出來康嘉,說明已經(jīng)被執(zhí)行了。
但是用中國菜刀連接圖片馬的時(shí)候出了問題籽前。
基本能確定木馬是被執(zhí)行了的亭珍,可能是服務(wù)器的一些配置或者權(quán)限原因,讓菜刀連接失敗枝哄。
我用了另一種方法證明php腳本確實(shí)被執(zhí)行了肄梨。
重新制作一個(gè)圖片馬,這次將php腳本里的內(nèi)容替換成一個(gè)js腳本挠锥。
如果這個(gè)腳本被執(zhí)行众羡,瀏覽器會(huì)彈窗顯示一串1。
重新上傳這個(gè)圖片馬蓖租,并且用文件包含漏洞打開粱侣。
可以看到腳本確實(shí)被執(zhí)行了羊壹,圖片馬上傳+文件包含漏洞利用成功。
之后的題目基本都是圖片馬或者00截?cái)嗥胗ぃ辉儋樖觥?/p>