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