upload-labs
一個(gè)幫你總結(jié)所有類型的上傳漏洞的靶場
文件上傳靶機(jī)下載地址:https://github.com/c0ny1/upload-labs?
服務(wù)端檢查內(nèi)容 2、? ? 3芦瘾、 4 洋只、需要結(jié)合文件包含漏洞项棠。
黑名單基本都可繞過钢猛。最不安全线定。
pass-01? 客戶端繞過
pass-02? ?把以.php結(jié)尾的小馬改為以.jpg|.png|.gif結(jié)尾崭庸,用burpsuite抓包谍珊,在把.jpg|.png|.gif改回.php即可上傳成功
pass-03 :
設(shè)置了黑名單和刪除兩邊空格。
$deny_ext=array('.asp','.aspx','.php','.jsp');? 這里是黑名單驗(yàn)證 可以試下php3 php5后綴名? 但是Apache默認(rèn)是不允許解析 如果運(yùn)維人員修改配置文件是可以解析的
如果中間件是IIS6.0 2003服務(wù)器的話 可以利用IIS的解析漏洞繞過
直接上傳名為xx.asp:.jpg的文件
pass 04:
先看源碼右犹,集合可以繞過的都設(shè)置了黑名單提澎,刪除文末的點(diǎn)和收尾去空
利用Windows的命名特性 ,先把馬的名字改成xx.jpg抓包 改擴(kuò)展名 改成xx.php:.jpg 上傳念链。? ?Windows系統(tǒng)會(huì)自動(dòng)去掉:.jpg? ? 上傳之后變?yōu)閤x.php盼忌。
但是文件是空的然后再上傳一遍? ?然后將文件名改為x.<或x.<<<或x.>>>或x.>><后再次上傳,重寫x.php文件內(nèi)容掂墓,Webshell代碼就會(huì)寫入原來的x.php空文件中谦纱。
pass-05:
先看源碼。
分析代碼梆暮,發(fā)現(xiàn)以.htaccess為后綴的文件已經(jīng)不允許上傳服协,但是??$file_ext =?strtolower($file_ext);?//轉(zhuǎn)換為小寫??這一句沒有了,我們就可以使用文件名后綴大小寫混合繞過啦粹,把1.php改為1.phP...來上傳
黑名單后綴名:$deny_ext=array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
先將要上傳的木馬改為jpg格式? 偿荷,在抓包 改為 x.phP? ?(windows操作系統(tǒng)不區(qū)分大小寫所以可以執(zhí)行)
pass-06:
先看源碼:沒有收尾去空窘游。
利用Windows系統(tǒng)的文件名特性。文件名最后增加空格和點(diǎn)跳纳,寫成1.php .忍饰,這個(gè)需要用burpsuite抓包修改,上傳后保存在Windows系統(tǒng)上的文件名最后的一個(gè).會(huì)被去掉寺庄,實(shí)際上保存的文件名就是1.php
濾代碼會(huì)刪除文件名后面的點(diǎn)但是過濾時(shí)只過濾.php? 沒過濾.php點(diǎn)
利用Windows字體文件命名特性? 在xx.php后面加空格點(diǎn)? . 直接切掉 .? 只留xx.php
pass-07:
看源碼:
原理同Pass-06艾蓝,文件名后加點(diǎn)和空格
pass-08:
分析代碼,少了????$file_ext =?str_ireplace(‘::$DATA‘, ‘‘,?$file_ext);//去除字符串::$DATA ???這一句斗塘,我們可以采用Windows文件流特性繞過赢织,文件名改成
1.php::$DATA , 上傳成功后保存的文件名其實(shí)是1.php
pass-09:
原理同Pass-06,上傳文件名后加上點(diǎn)+空格+點(diǎn)馍盟,改為1.php. .? ? ?(點(diǎn) 空格? 去了 還有一個(gè)點(diǎn))
pass-10:
pass-11:
白名單繞過于置,跟PHP版本有關(guān)。
重點(diǎn):白名單繞過PHP版本要小于5.3.4? 魔術(shù)符號(hào)要關(guān)閉贞岭。
(修復(fù)建設(shè):?php版本要小于5.3.4八毯,5.3.4及以上已經(jīng)修復(fù)該問題;magic_quotes_gpc需要為OFF狀態(tài))(有可能會(huì)上傳失敗瞄桨,將版本改為5.3.4以下版本后话速,開啟魔術(shù)符號(hào),在關(guān)閉芯侥,在重啟就好啦)
分析代碼泊交,這是以時(shí)間戳的方式對(duì)上傳文件進(jìn)行命名,使用上傳路徑名%00截?cái)嗬@過柱查,不過這需要對(duì)文件有足夠的權(quán)限活合,比如說創(chuàng)建文件夾,上傳的文件名寫成1.jpg, save_path改成../upload/1.php%00(1.php%00.jpg經(jīng)過url轉(zhuǎn)碼后會(huì)變?yōu)?.php\000.jpg)物赶,最后保存下來的文件就是1.php
pass-12:
原理同Pass-11,上傳路徑0x00繞過留晚。利用Burpsuite的Hex功能將save_path改成../upload/1.php【二進(jìn)制00】形式??
pass-13:? (需要在看一遍)
先上傳jpg酵紫,抓包改為PHP,空格? 繞過文件頭檢查错维,添加GIF圖片的文件頭GIF89a奖地,繞過GIF圖片檢查。
或者我們使用命令copy 1.jpg /b + shell.php /awebshell.jpg赋焕,將php一句話追加到j(luò)pg圖片末尾参歹,代碼不全的話,人工補(bǔ)充完整隆判。形成一個(gè)包含Webshell代碼的新jpg圖片犬庇,然后直接上傳即可僧界。但是我們沒有辦法拿到shell,應(yīng)為我們上傳的圖片馬無法被解析成php形式臭挽,通常圖片馬配合%00或者0x00截?cái)嗌蟼魑娼螅蛘吲浜辖馕雎┒?/p>
pass-14:
源碼:
getimagesize()?函數(shù)用于獲取圖像尺寸?,索引 2 給出的是圖像的類型欢峰,返回的是數(shù)字葬荷,其中1 = GIF,2 = JPG纽帖,3 = PNG宠漩,4 = SWF,5 = PSD懊直,6 = BMP扒吁,7 = TIFF(intel byte order),8 = TIFF(motorola byte order)吹截,9 = JPC瘦陈,10 = JP2,11 = JPX波俄,12 = JB2晨逝,13 = SWC,14 = IFF懦铺,15 = WBMP捉貌,16 = XBM
這里有詳解:https://blog.csdn.net/sanbingyutuoniao123/article/details/52166617
image_type_to_extension()?函數(shù)用于獲取圖片后綴
做法同上。? (很多函數(shù)都可用圖片頭繞過)
pass-15:
源碼:
exif_imagetype()? 此函數(shù)是php內(nèi)置函數(shù)冬念,用來獲取圖片類型趁窃。
做法同上。用圖片頭繞過急前。
pass-16:
1醒陆、生成新的圖片(相當(dāng)于直接干掉圖片里的木馬)2、給圖片重命名裆针,這是最安全的一種方式刨摩。
? ? ? ? 原理:將一個(gè)正常顯示的圖片,上傳到服務(wù)器世吨。尋找圖片被渲染后與原始圖片部分對(duì)比仍然相同的數(shù)據(jù)塊部分澡刹,將Webshell代碼插在該部分,然后上傳耘婚。具體實(shí)現(xiàn)需要自己編寫Python程序罢浇,人工嘗試基本是不可能構(gòu)造出能繞過渲染函數(shù)的圖片webshell的。
這里提供一個(gè)包含一句話webshell代碼并可以繞過PHP的imagecreatefromgif函數(shù)的GIF圖片示例。
php圖像二次渲染:
https://blog.csdn.net/hitwangpeng/article/details/48661433
https://blog.csdn.net/hitwangpeng/article/details/46548849????
這兩個(gè)講的還可以
(試哪個(gè)木馬經(jīng)過二次渲染之后還在嚷闭,留下那個(gè)木馬攒岛。在 上傳文件夾里有可留下來的webshell木馬)
pass-17:
原理(自己理解):其實(shí)圖片是有到過對(duì)方服務(wù)器的,只是以處理速度極快的方式被處理掉了凌受,我么需要在被處理之前讓他不被處理阵子,這就是時(shí)間競爭。
官方解釋:這關(guān)利用的是競爭條件胜蛉,服務(wù)器先允許你上傳文件挠进,然后檢測是否合法,不合法再刪除誊册,我們要利用的就是在服務(wù)器刪除前领突,訪問到我們上傳的php。
舉個(gè)例子:
第一步:
選擇準(zhǔn)備好的tj.php案怯。
tj.php作用君旦,創(chuàng)建一個(gè)文件,再往這個(gè)文件里寫入一句話木馬(代碼) 嘲碱。
只針對(duì)上傳的文件進(jìn)行檢測金砍,重新寫入的文件是不會(huì)被刪的。
抓包:
開始上傳麦锯,抓包恕稠,發(fā)到測試器里,做如下設(shè)置:
有效載荷數(shù)設(shè)為扶欣,沒有負(fù)載鹅巍,生成3000有效負(fù)載
線程數(shù)設(shè)為100。
最后開始攻擊料祠。
我們可以在upload里看到骆捧,文件可以上傳只是在很短的時(shí)間內(nèi)被刪除。
第二步:
在創(chuàng)建一個(gè)包髓绽,訪問tj.php敛苇,在被刪除之前訪問到,就會(huì)重新寫入一句話木馬(代碼)顺呕,時(shí)間競爭接谨。訪問tj.php,再開一個(gè)brup suite,抓包
進(jìn)行同上設(shè)置塘匣,兩個(gè)測試器同時(shí)開始攻擊,
巷帝,在被刪除之前訪問到忌卤,就會(huì)重新寫入一句話木馬(代碼)擂送,時(shí)間競爭。
pass-18:
看源碼:7z沒有加入黑名單贫奠,所以講下面文件命名為7z惦银。
剛開始沒有找到繞過方法,最后下載作者Github提供的打包環(huán)境棍厂,利用上傳重命名競爭+Apache解析漏洞颗味,成功繞過。
上傳名字為1.php.7Z的文件牺弹,快速重復(fù)提交該數(shù)據(jù)包浦马,會(huì)提示文件已經(jīng)被上傳,但沒有被重命名张漂。
(阿帕奇從右往左解析晶默,當(dāng)遇到不認(rèn)識(shí)的擴(kuò)展名就會(huì)往前解析,所以會(huì)當(dāng)成php解析航攒。)
快速提交上面的數(shù)據(jù)包磺陡,可以讓文件名字不被重命名上傳成功。
然后利用Apache的解析漏洞漠畜,即可獲得shell
pass-19 :同上币他。
pass-20:
上傳1.jpg
抓包做如下更改。發(fā)送憔狞。
雙文件上傳蝴悉,后者jpg起到一個(gè)欺騙的作用,實(shí)際上傳的是前面的111.php躯喇。