### 01,、漏洞原理與危害
文件上傳漏洞原理:
網(wǎng)站web應(yīng)用都有一些文件上傳功能,,比如文檔、圖片,、頭像,、視頻上傳,當(dāng)上傳功能的實(shí)現(xiàn)代碼沒有嚴(yán)格校驗(yàn)上傳文件的后綴和文件類型,,此時(shí)攻擊者就可以上傳一個(gè)webshell到一個(gè)web可訪問的目錄上,,并將惡意文件傳遞給PHP解釋器去執(zhí)行,之后就可以在服務(wù)器上執(zhí)行惡意代碼,,進(jìn)行數(shù)據(jù)庫執(zhí)行,、服務(wù)器文件管理,服務(wù)器命令執(zhí)行等惡意操作,。
根據(jù)網(wǎng)站使用及可解析的程序腳本不同,,此處可以上傳的惡意腳本可以是PHP,、ASP、JSP文件,也可以是篡改后綴后的這幾類腳本,。
WebShell 就是以 asp,、php、jsp 或者 cgi 等網(wǎng)頁文件形式存在的一種命令執(zhí)行環(huán)境,,也可以將其稱之為 一種網(wǎng)頁后門。攻擊者在入侵了一個(gè)網(wǎng)站后,,通常會將這些 asp 或 php 后門文件與網(wǎng)站服務(wù)器 web 目錄 下正常的網(wǎng)頁文件混在一起,,然后使用瀏覽器來訪問這些后門,,得到一個(gè)命令執(zhí)行環(huán)境,,以達(dá)到控制網(wǎng)站服務(wù)器的目的(可以上傳下載或者修改文件,操作數(shù)據(jù)庫,,執(zhí)行任意命令等),。
### 02、上傳漏洞繞過
一個(gè)正常的上傳流程通常會經(jīng)過客戶端與服務(wù)端的安全檢查,,而服務(wù)端檢測又主要分為4類:
(以下具體操作均可使用burpsuite進(jìn)行,,由于都是一些操作步驟,網(wǎng)上已經(jīng)有很多使用教程,,后文會給出一些參考資料,,這里只對上傳漏洞做一個(gè)總結(jié)。)
1,、客戶端JavaScript檢查
客戶端檢測一般只是在JavaScript代碼中加入了對擴(kuò)展名的黑白名單檢查,,這種方式只能防止一些普通用戶上傳錯(cuò)誤,,只要用burpsuite在文件上傳時(shí)進(jìn)行截?cái)喔奈募缶Y名就可繞過,。
[海洋石油HES.HOME APP后臺弱口令任意文件上傳導(dǎo)致getshell](http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0182087.html)
[海洋石油工程股份有限公司官網(wǎng)任意文件上傳導(dǎo)致任意代碼執(zhí)行Getshell](http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0181502.html)
[國元投資某系統(tǒng)多處漏洞導(dǎo)致getshell內(nèi)網(wǎng)多臺機(jī)器(繞過上傳限制)](http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0143782.html)
2、服務(wù)端檢測:
A,、MIME類型的檢查
(就是檢查Content-Type的值,,MIME類型決定了某種擴(kuò)展名用什么應(yīng)用程序打開,GIF的MIME值為image/gif.)
[中國移動四川分公司某報(bào)表系統(tǒng)存在弱口令,、上傳文件繞過漏洞(已拿webshell,,管理員權(quán)限)](http://wooyun.jozxing.cc/static/bugs/wooyun-2014-080842.html)
B、文件擴(kuò)展名檢查
(與前端js后綴名檢測類似,,只不過是在后端進(jìn)行檢查,,有時(shí)候還可以配合解析漏洞結(jié)合目錄路徑攻擊,,例如test.asp/test.jpg,解析漏洞后面會講到)
后端后綴名檢查也分兩種,,黑名單與白名單,。
黑名單檢查繞過:
1、文件名大小寫繞過,,比如代碼中有php規(guī)則,,那么可以使用PHP或者pHP繞過
2、黑名單列表繞過,,對黑名單列表中沒有的擴(kuò)展名進(jìn)行攻擊,,比如asa
3、利用windows和Linux系統(tǒng)的特性進(jìn)行特殊文件名繞過,,a.asp. a.asp_等
4,、htaccess 文件攻擊
5、配合解析漏洞(IIS,、apache等,,后面會單獨(dú)提到)
白名單繞過:
1、截?cái)喙?,比如a.asp%00.gif等
2,、配合解析漏洞
具體可以參見 Syclover的文章 《Upload Attack Framework》,這篇文章對上傳繞過做了非常詳細(xì)的總結(jié)和演示
[中國聯(lián)通沃音樂某站任意文件上傳getshell](http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0195299.html)
[中國南方航空公司某站存在任意文件上傳漏洞(Windows技巧繞過限制)](http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0190447.html)
[上海市通訊管理局某系統(tǒng)文件上傳漏洞獲得webshell并可以內(nèi)網(wǎng)漫游](http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0175346.html)
C,、目錄路徑的檢查
(對目錄路徑可進(jìn)行0x00截?cái)嗬@過,;以及可以控制目錄地址,,上傳文件夾的參數(shù)可控)
[國元信托oa系統(tǒng)任意文件上傳導(dǎo)致getshell](http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0205876.html)
[萬戶OA多個(gè)漏洞打包(任意文件上傳.XXE.SQL注射)](http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0173342.html)
[開源證券主站存在任意文件上傳目錄遍歷文件刪除漏洞](http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0158259.html)
[國海證券某系統(tǒng)存在任意文件上傳漏洞已Shell](http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0146898.html)
D,、檢測文件內(nèi)容是否包含惡意代碼
這種方式主要檢查圖片文件的幻數(shù),比如GIF的值為GIF89a,,后端代碼會檢測改值判斷是否為GIF圖片文件,,想要繞過只要在幻數(shù)后面加上一句話木馬就行。
其余還有文件相關(guān)信息的檢查,,文件加載檢查
[五礦某系統(tǒng)弱口令導(dǎo)致任意文件上傳可入內(nèi)網(wǎng)](http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0163482.html)
### 03,、上傳文件的分類與總結(jié)
1、上傳文件是PHP,、JSP、ASP等腳本代碼,服務(wù)器的Web容器解釋并執(zhí)行了用戶上傳的腳本,,導(dǎo)致代碼執(zhí)行,;
2、上傳文件是crossdomain.xml,,導(dǎo)致可以控制Flash在該域下的行為(其他通過類似方式控制策略文件的情況類似);
3,、上傳文件是病毒、木馬文件,,黑客用以誘騙用戶或者管理員下載執(zhí)行植入到pc中,。
4、上傳文件是釣魚圖片或?yàn)榘四_本的圖片,,在某些版本的瀏覽器中會被作為腳本執(zhí)行,,被用于釣魚和欺詐,。
在大多數(shù)情況下,,文件上傳漏洞一般都是指“上傳的Web腳本被服務(wù)器解析從而獲取網(wǎng)站shell權(quán)限”,也就是webshell,,要完成上傳漏洞攻擊需要滿足以下幾個(gè)條件:
1,、上傳的文件能夠被Web容器解釋執(zhí)行,所以文件上傳后所在的目錄需要解析器可以執(zhí)行目錄下的文件,,也就是說文件目錄必須在web容器覆蓋路徑內(nèi)才行,。
2、用戶可以直接通過瀏覽器進(jìn)行訪問這個(gè)shell文件,,如果web容器不能解析這個(gè)文件,,那么也不能算是漏洞。
3,、最后,,上傳的shell文件如果被安全檢查、格式化,、圖片壓縮等功能改變了內(nèi)容,,則也可能導(dǎo)致攻擊不成功。
### 04,、修復(fù)與防御
如何杜絕此類漏洞,,其實(shí)需要根據(jù)攻擊手段來分部進(jìn)行,以上總結(jié)了如何繞過文件上傳,,實(shí)際上可以根據(jù)每種繞過手段針對的進(jìn)行防御,。
1、設(shè)置文件上傳的目錄設(shè)置為不可執(zhí)行
2,、使用白名單方式檢查文件類型,。處理圖片可以使用壓縮函數(shù)或者resize函數(shù),在處理圖片的同時(shí)破壞圖片中可能包含的惡意代碼。
3,、對文件進(jìn)行隨機(jī)性且不可猜解的重命名,。
4、不能有本地文件包含漏洞及解析漏洞,。(解析漏洞后面會講到)