文件上傳漏洞 upload-labs

文件上傳漏洞是指由于程序員在對(duì)用戶文件上傳部分的控制不足或者處理缺陷专甩,而導(dǎo)致的用戶可以越過其本身權(quán)限向服務(wù)器上上傳可執(zhí)行的動(dòng)態(tài)腳本文件遵堵。這里上傳的文件可以是木馬窍箍,病毒值桩,惡意腳本或者WebShell等,文件上傳漏洞本身就是一個(gè)危害巨大的漏洞染服,WebShell更是將這種漏洞的利用無限擴(kuò)大裂垦。

一、upload-labs

upload-labs是一個(gè)使用php語言編寫的肌索,專門收集滲透測試和CTF中遇到的各種上傳突破的靶場。逐步幫助大家對(duì)上傳入侵有一個(gè)全面的了解特碳。目前一共20關(guān)诚亚,每個(gè)關(guān)都包含著不同上傳方式。 GitHub地址:https://github.com/c0ny1/upload-labs

?靶機(jī)包含防御類型分類

二午乓、開始通關(guān)

Pass-01? JS檢查

1.先新建一個(gè)PHP文件寫入一句話木馬站宗,命名為test.php,直接上傳

2.提示無法上傳該文件類型益愈,查看一下前端源碼梢灭,可以看到是JS限制


我們可以通過修改前端源碼、禁用瀏覽器JS蒸其、使用burpsuite改包這三種方式來繞過攔截敏释,這里以burpsuite抓包為例

3.先將test.php改成test.php.jpg,通過burpsuite抓包之后放到重放模塊摸袁,然后改包test.php.jpg改成test.php钥顽,然后放行,通過右邊看到頁面顯示正常

4.文件上傳成功靠汁,使用菜刀連接一句話木馬蜂大,連接成功

Pass-02???只驗(yàn)證Content-typ

1.嘗試使用第一關(guān)方法,直接上傳test.php.jpg進(jìn)行抓包改包蝶怔,嘿...一樣可以

2.題目說是文件類型攔截奶浦,直接上傳php文件可以得到提示,那么我們刪除test02.php重新操作一下

3.通過burpsuite抓包踢星,修改Content-Type為image/jpeg(簡單來說就是修改為它可放行的文件類型)澳叉,然后放行數(shù)據(jù)包,同樣上傳成功

Pass-03? ?黑名單繞過

1.直接上傳test03.php斩狱,黑名單不允許上傳.asp,.aspx,.php,.jsp后綴的文件
但可以上傳.phtml .phps .php5 .pht

前提是apache的httpd.conf中有如下配置代碼

AddType application/x-httpd-php .php .phtml .phps .php5 .pht

2.通過burpsuite抓包耳高,將test03.php改為test03.php5,放行數(shù)據(jù)包所踊,返回包中可以看到文件上傳解析的路徑

菜刀連接成功

Pass-04?? .htaccess繞過

1.直接上傳test04.php5泌枪,發(fā)現(xiàn)有黑名單限制,并且根據(jù)提示黑名單列表龐大

拒絕了幾乎所有有問題的后綴名秕岛,除了.htaccess碌燕,所以我們可以編寫.htaccess文件误证,作用:將待會(huì)上傳的04.jpg解析為04.php(這次寫一個(gè)phpinfo文件命名為04.jpg)

上傳成功

2.訪問http://127.0.0.1/upload-labs/upload/test04.jpg,解析成功

Pass-05? ?后綴大小寫繞過

1.這一關(guān)主要是沒有對(duì)后綴名的大小寫進(jìn)行過濾修壕,所以我們嘗試抓包命名為test05.phP進(jìn)行繞過

2.訪問http://127.0.0.1/upload-labs/upload/202104011727386865.phP

訪問正常

Pass-06? ?空格繞過

嘗試上傳愈捅,發(fā)現(xiàn)大小寫繞過失敗,說明程序?qū)缶Y進(jìn)行了大小寫處理慈鸠,改包將test06.php改成test06.php空格

上傳成功

Pass-07? ?點(diǎn)繞過

原理與Pass-06相同蓝谨,在文件名后面加一個(gè)點(diǎn)

上傳成功

Pass-08? ?::$DATA文件流特性繞

1.這關(guān)將所有可解析的后綴名進(jìn)行了過濾

2.Windows文件流特性繞過,文件名改成test08.php::$DATA青团,上傳成功后保存的文件名其實(shí)是test08.php

上傳成功

Pass-09? ?點(diǎn)+空格+點(diǎn)繞過

原理同Pass-06譬巫,上傳文件名后加上點(diǎn)+空格+點(diǎn),改為test09.php. .

上傳成功

Pass-10??雙寫繞過

黑名單過濾督笆,將黑名單里的后綴名替換為空且只替換一次芦昔,因此可以用雙寫繞過

Pass-11??文件路徑%00截?cái)?/strong>

1.$img_path是直接拼接,因此可以利用%00截?cái)嗬@過娃肿,截?cái)鄺l件:php版本小于5.3.4咕缎,php的magic_quotes_gpc為OFF狀態(tài)

2.先上傳test11.jpg,然后修改路徑進(jìn)行截?cái)嗔先牛⒁庖欢ㄒ仙厦鏃l件

?php的magic_quotes_gpc為OFF狀態(tài)

上傳成功

Pass-12 ?00截?cái)?/strong>

1.本關(guān)卡與Pass-11原理相同凭豪,但不同的是ave_path參數(shù)通過POST方式傳遞,還是利用00截?cái)嗉欠#驗(yàn)镻OST不會(huì)像GET對(duì)%00進(jìn)行自動(dòng)解碼墅诡,所以需要在二進(jìn)制中進(jìn)行修改

在test12.php后面改成00進(jìn)行截?cái)?/span>

上傳成功

Pass-13? ?上傳圖片馬

1.我們需要一張圖片13.jpg和一句話木馬(這里我的是info文件)寫好的php文件test13.php,在電腦本地將13.jpg和test13.php放到同一目錄下

然后在該目錄下用cmd執(zhí)行命令:copy 13.jpg/b + test13.php/a test13.jpg

新生成的test13.jpg就是我們制作好的圖片馬

直接上傳圖片馬

2.直接訪問圖片并不能把圖片當(dāng)做PHP解析桐智,因此還需要利用文件包含漏洞末早,根據(jù)頁面提示include.php腳本在127.0.0.1/upload-labs/目錄下,構(gòu)造鏈接

127.0.0.1/upload-labs/include.php?file=upload/5020210402141517.jpg

訪問成功

3.png格式圖片上傳方法與jpg相同

4.GIF格式可以通過添加GIF圖片的文件頭GIF89a说庭,繞過GIF圖片檢查

Pass-14 ??上傳圖片馬? getimagesize()檢查

本關(guān)操作與上一關(guān)Pass-13完全相同

Pass-15? ?上傳圖片馬? exif_imagetype()檢查

本關(guān)操作與上一關(guān)Pass-13完全相同

Pass-16? ?二次渲染繞過

原理:將一個(gè)正常顯示的圖片然磷,上傳到服務(wù)器。尋找圖片被渲染后與原始圖片部分對(duì)比仍然相同的數(shù)據(jù)塊部分刊驴,將Webshell代碼插在該部分姿搜,然后上傳。

制作方法參考鏈接:

https://blog.csdn.net/weixin_45519736/article/details/105775721

Pass-17? ?條件競爭

通過源碼可以看到文件先經(jīng)過保存捆憎,然后判斷后綴名是否在白名單中舅柜,如果不在則刪除,此時(shí)可以利用條件競爭在保存文件后刪除文件前來執(zhí)行php文件躲惰,可以利用burpsuite的intruder模塊不斷上傳致份,然后我們不斷的訪問刷新該地址即可

1.先準(zhǔn)備后門文件test17.php,用Python寫一個(gè)腳本來請(qǐng)求文件test17.php础拨,打開burpsuite用來重放文件test17.php

2.運(yùn)行py腳本氮块,同時(shí)開始burpsuite上傳

上傳成功

可以訪問

Pass-18? ?條件競爭

本關(guān)也存在條件競爭的問題绍载,不過這題對(duì)文件后綴名做了白名單判斷,利用上傳重命名競爭+Apache解析漏洞進(jìn)行繞過滔蝉,test18.php.7z的文件內(nèi)容與上一關(guān)相同(生成一個(gè)新的文件shell2.php)

2.運(yùn)行py腳本同時(shí)開始上傳test18.php.7z

可能是作者大佬忘了給上傳的路徑加"/"击儡,所以導(dǎo)致上傳的文件改名后都是uploadxxxxx.7z,只需在myupload.php文件中對(duì)應(yīng)地方添加斜杠就行

3.等到python出現(xiàn)OK蝠引,停止上傳阳谍,并訪問shell2.php文件

訪問成功

Pass-19? ?文件名0x00截?cái)?/strong>

move_uploaded_file()函數(shù)中的img_path是由post參數(shù)save_name控制的,因此可以在save_name利用00截?cái)嗬@過螃概,方法同pass-12

Pass-20??數(shù)組 + /.繞過

通過查看源碼可以發(fā)現(xiàn): $file_name經(jīng)過reset($file) . '.' . $file[count($file) - 1];處理 如果上傳的是數(shù)組的話边坤,會(huì)跳過$file = explode('.', strtolower($file)); 并且后綴有白名單過濾:
$ext = end($file);$allow_suffix = array('jpg','png','gif');
而最終的文件名后綴取的是$file[count($file) - 1],因此我們可以讓$file為數(shù)組 $file[0]為smi1e.php/谅年,也就是reset($file),然后再令$file[2]為白名單中的jpg 此時(shí)end($file)等于jpg肮韧,$file[count($file) - 1]為空 而?$file_name = reset($file) . '.' . $file[count($file) - 1];融蹂,也就是smi1e.php/.,最終move_uploaded_file會(huì)忽略掉/.弄企,最終上傳smi1e.php

【END】

到此為止超燃,文件上傳漏洞通關(guān)就算完成了,試想一下:如果沒有源碼拘领?又能通幾關(guān)意乓?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市约素,隨后出現(xiàn)的幾起案子届良,更是在濱河造成了極大的恐慌,老刑警劉巖圣猎,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件士葫,死亡現(xiàn)場離奇詭異,居然都是意外死亡送悔,警方通過查閱死者的電腦和手機(jī)慢显,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欠啤,“玉大人荚藻,你說我怎么就攤上這事〗喽危” “怎么了应狱?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長眉撵。 經(jīng)常有香客問我侦香,道長落塑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任罐韩,我火速辦了婚禮憾赁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘散吵。我一直安慰自己龙考,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布矾睦。 她就那樣靜靜地躺著晦款,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枚冗。 梳的紋絲不亂的頭發(fā)上缓溅,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音赁温,去河邊找鬼坛怪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛股囊,可吹牛的內(nèi)容都是我干的袜匿。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼稚疹,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼居灯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起内狗,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤怪嫌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后柳沙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喇勋,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年偎行,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了川背。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛤袒,死狀恐怖熄云,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妙真,我是刑警寧澤缴允,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響练般,放射性物質(zhì)發(fā)生泄漏矗漾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一薄料、第九天 我趴在偏房一處隱蔽的房頂上張望敞贡。 院中可真熱鬧,春花似錦摄职、人聲如沸誊役。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛔垢。三九已至,卻和暖如春迫悠,著一層夾襖步出監(jiān)牢的瞬間鹏漆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工创泄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甫男,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓验烧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親又跛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碍拆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容