一、文件上傳漏洞定義
文件上傳漏洞是指用戶上傳了一個(gè)可執(zhí)行的腳本文件,并通過(guò)此腳本文件獲得了執(zhí)行服務(wù)器端命令的能力。這種攻擊方式是最為直接和有效的,“文件上傳”本身沒(méi)有問(wèn)題,有問(wèn)題的是文件上傳后,服務(wù)器怎么處理、解釋文件。如果服務(wù)器的處理邏輯做的不夠安全,則會(huì)導(dǎo)致嚴(yán)重的后果。
二、上傳漏洞危害
1.上傳文件是Web腳本語(yǔ)言,服務(wù)器的Web容器解釋并執(zhí)行了用戶上傳的腳本,導(dǎo)致代碼執(zhí)行。
2.上傳文件是病毒或者木馬時(shí),主要用于誘騙用戶或者管理員下載執(zhí)行或者直接自動(dòng)運(yùn)行;
3.上傳文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在該域下的行為(其他通過(guò)類似方式控制策略文件的情況類似);
4.上傳文件是病毒、木馬文件,黑客用以誘騙用戶或者管理員下載執(zhí)行。
5.上傳文件是釣魚(yú)圖片或?yàn)榘四_本的圖片,在某些版本的瀏覽器中會(huì)被作為腳本執(zhí)行,被用于釣魚(yú)和欺詐。
??? 除此之外,還有一些不常見(jiàn)的利用方法,比如將上傳文件作為一個(gè)入口,溢出服務(wù)器的后臺(tái)處理程序,如圖片解析模塊;或者上傳一個(gè)合法的文本文件,其內(nèi)容包含了PHP腳本,再通過(guò)"本地文件包含漏洞(Local File Include)"執(zhí)行此腳本;等等。
三、上傳漏洞滿足條件
首先,上傳的文件能夠被Web容器解釋執(zhí)行。所以文件上傳后所在的目錄要是Web容器所覆蓋到的路徑。
其次,用戶能夠從Web上訪問(wèn)這個(gè)文件。如果文件上傳了,但用戶無(wú)法通過(guò)Web訪問(wèn),或者無(wú)法得到Web容器解釋這個(gè)腳本,那么也不能稱之為漏洞。
最后,用戶上傳的文件若被安全檢查、格式化、圖片壓縮等功能改變了內(nèi)容,則也可能導(dǎo)致攻擊不成功。
四、上傳漏洞產(chǎn)生的原因
一些web應(yīng)用程序中允許上傳圖片,文本或者其他資源到指定的位置,文件上傳漏洞就是利用這些可以上傳的地方將惡意代碼植入到服務(wù)器中,再通過(guò)url去訪問(wèn)以執(zhí)行代碼.
造成文件上傳漏洞的原因是:
1.服務(wù)器配置不當(dāng)
2.開(kāi)源編輯器上傳漏洞
3.本地文件上傳限制被繞過(guò)
4.過(guò)濾不嚴(yán)或被繞過(guò)
5.文件解析漏洞導(dǎo)致文件執(zhí)行
6.文件路徑截?cái)?/p>
五、上傳漏洞的原理
大部分的網(wǎng)站和應(yīng)用系統(tǒng)都有上傳功能,一些文件上傳功能實(shí)現(xiàn)代碼沒(méi)有嚴(yán)格限制用戶上傳的文件后綴以及文件類型,導(dǎo)致允許攻擊者向某個(gè)可通過(guò)Web訪問(wèn)的目錄上傳任意PHP文件,并能夠?qū)⑦@些文件傳遞給PHP解釋器,就可以在遠(yuǎn)程服務(wù)器上執(zhí)行任意PHP腳本。
當(dāng)系統(tǒng)存在文件上傳漏洞時(shí)攻擊者可以將病毒,木馬,WebShell,其他惡意腳本或者是包含了腳本的圖片上傳到服務(wù)器,這些文件將對(duì)攻擊者后續(xù)攻擊提供便利。根據(jù)具體漏洞的差異,此處上傳的腳本可以是正常后綴的PHP,ASP以及JSP腳本,也可以是篡改后綴后的這幾類腳本。
六、上傳文件檢測(cè)流程
通常一個(gè)文件以HTTP協(xié)議進(jìn)行上傳時(shí),將以POST請(qǐng)求發(fā)送至Web服務(wù)器,Web服務(wù)器接收到請(qǐng)求并同意后,用戶與Web服務(wù)器將建立連接,并傳輸數(shù)據(jù)。一般文件上傳過(guò)程中將會(huì)經(jīng)過(guò)如下幾個(gè)檢測(cè)步驟:
一般一個(gè)文件上傳過(guò)程中的檢測(cè)如下圖紅色標(biāo)記部分:
- 客戶端javascript校驗(yàn)(一般只校驗(yàn)文件的擴(kuò)展名)
- 服務(wù)端校驗(yàn)
- 文件頭content-type字段校驗(yàn)(image/gif)
- 文件內(nèi)容頭校驗(yàn)(GIF89a)
- 目錄路經(jīng)檢測(cè)(檢測(cè)跟Path參數(shù)相關(guān)的內(nèi)容)
- 文件擴(kuò)展名檢測(cè) (檢測(cè)跟文件 extension 相關(guān)的內(nèi)容)
- 后綴名黑名單校驗(yàn)
- 后綴名白名單校驗(yàn)
- 自定義正則校驗(yàn)
- WAF設(shè)備校驗(yàn)(根據(jù)不同的WAF產(chǎn)品而定)
七、上傳漏洞繞過(guò)
1.客服端繞過(guò)
??(1)客戶端校驗(yàn):
一般都是在網(wǎng)頁(yè)上寫(xiě)一段javascript腳本,校驗(yàn)上傳文件的后綴名,有白名單形式也有黑名單形式。判斷方式:在瀏覽加載文件,但還未點(diǎn)擊上傳按鈕時(shí)便彈出對(duì)話框,內(nèi)容如:只允許上傳.jpg/.jpeg/.png后綴名的文件,而此時(shí)并沒(méi)有發(fā)送數(shù)據(jù)包
(2)繞過(guò)方法:
?1.通過(guò)火狐插件NOscript插件或者禁用IE中JS腳本
?2.通過(guò)firbug插件元素審核修改代碼(如刪除onsubm:t=”return checkFile()”事件)
?3.通過(guò)firbug元素審核javascirpt腳本中添加上傳文件類型。
?4.通過(guò)利用burp抓包改包,先上傳一個(gè)gif類型的木馬,然后通過(guò)burp將其改為asp/php/jsp后綴名即可
注意:這里修改文件名字后,請(qǐng)求頭中的Content-Length的值也要改
演示如下:
fidder進(jìn)行抓包攔截,先上傳一句話圖片木馬如bd2.jpg,然后抓包攔截改成bd2.php
2.服務(wù)端繞過(guò)
(1)黑名單擴(kuò)展名繞過(guò)
?黑名單檢測(cè):一般有個(gè)專門的 blacklist 文件,里面會(huì)包含常見(jiàn)的危險(xiǎn)腳本文件。繞過(guò)方法:
(1)找黑名單擴(kuò)展名的漏網(wǎng)之魚(yú) - 比如 iis6.0中的asa 和 cer
(2)可能存在大小寫(xiě)繞過(guò)漏洞 - 比如 aSp(iis6.0中可以) 和 pHp(只能在小于php5.3.39中的linux中) 之中
(3)能被WEB容器解析的文件其他擴(kuò)展名列表:
? jsp, jspx ,jspf
? asp asa cer cdx,htr,xml,html
? aspx,ashx,asmx,asax,ascx
演示:php中的大小寫(xiě)解析只能在linux 環(huán)境才能執(zhí)行:
這里不允許上傳php那么可以上傳大小寫(xiě)Php
(2)黑名單特殊后綴名繞過(guò)(利用難度高)
?? 將Burpsuite截獲的數(shù)據(jù)包中backlion.php名字改為baclion.php4(php1,php2,php3,php4,php5),前提條件是http.conf中設(shè)置 AddType application/x-httpd-php .php1(php的版本小于等于5.3.29以下)
(3)配合操作系統(tǒng)文件命名規(guī)則繞過(guò)
?? ?在windows系統(tǒng)下,如果文件名以“.”或者空格作為結(jié)尾,系統(tǒng)會(huì)自動(dòng)刪除“.”與空格,利用此特性也可以繞過(guò)黑名單驗(yàn)證。apache中可以利用點(diǎn)結(jié)尾和空格繞過(guò),asp和aspx中可以用空格繞過(guò)
(a).上傳不符合windows文件命名規(guī)則的文件名, 會(huì)被windows系統(tǒng)自動(dòng)去掉不符合規(guī)則符號(hào)后面的內(nèi)容:
test.asp.
test.asp(空格)
test.php:1.jpg
test.php::$DATA
(b). linux下后綴名大小寫(xiě)
在linux下,如果上傳php不被解析,可以試試上傳pHp后綴的文件名(前提條件是php版本小于等于5.3.29版本)
(4)單雙重后綴名繞過(guò)
??? 上傳時(shí)將Burpsuite截的數(shù)據(jù)包中文件名backlion.php(backlion.asa)改為backlion.pphphph(backlion.asasaa),那么過(guò)濾了第一個(gè)"php"字符串"后,開(kāi)頭的'p'和結(jié)尾的'hp'就組合又形成了php
(5)服務(wù)端MIME文件類型(Content-Type)繞過(guò)
MIME的作用:
??? 使客戶端軟件,區(qū)分不同種類的數(shù)據(jù),例如web瀏覽器就是通過(guò)MIME類型來(lái)判斷文件是GIF圖片,還是可打印的PostScript文件。web服務(wù)器使用MIME來(lái)說(shuō)明發(fā)送數(shù)據(jù)的種類, web客戶端使用MIME來(lái)說(shuō)明希望接收到的數(shù)據(jù)種類,它是服務(wù)器用來(lái)判斷瀏覽器傳遞文件格式的重要標(biāo)記項(xiàng)。
常用的文件上傳類型的MIME表:
text/plain(純文本)
text/html(HTML文檔)
text/javascript(js代碼)
application/xhtml+xml(XHTML文檔)
image/gif(GIF圖像)
image/jpeg(JPEG圖像)
image/png(PNG圖像)
video/mpeg(MPEG動(dòng)畫(huà))
application/octet-stream(二進(jìn)制數(shù)據(jù))
application/pdf(PDF文檔)
application/(編程語(yǔ)言) 該種語(yǔ)言的代碼
application/msword(Microsoft Word文件)
message/rfc822(RFC 822形式)
multipart/alternative(HTML郵件的HTML形式和純文本形式,相同內(nèi)容使用不同形式表示)
application/x-www-form-urlencoded(POST方法提交的表單)
multipart/form-data(POST提交時(shí)伴隨文件上傳的表單)
繞過(guò)方法:
?上傳對(duì)文件類型做了限制,可通過(guò)burpsuit將其他類文件類型修改為如:Content-Type:image/gif和image/jpeg等運(yùn)行的文件類型
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-636875.html
(6)配合文件包含文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-636875.html
到了這里,關(guān)于Web安全之文件上傳漏洞詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!