檔案上傳的一些繞過方法
檔案上傳漏洞所需的條件
一是檔案可上傳(感覺這一句是廢話)。
二是上傳檔案路徑可知,如果路徑不可知就沒法訪問,亦無法配合諸如檔案包含漏洞進行檔案執行。
三是上傳檔案可以被訪問。
四是上傳檔案可以被執行,當然這一步也不是必需的,比如配合檔案包含漏洞。
繞過姿勢
檔案上傳校驗姿勢
- 客戶端javascript校驗(一般只校驗字尾名)
- 服務端校驗
- 檔案頭content-type欄位校驗(image/gif)
- 檔案內容頭校驗(GIF89a)
- 字尾名黑名單校驗
- 字尾名白名單校驗
- 自定義正則校驗
- WAF裝置校驗(根據不同的WAF產品而定)
0X00:前端js檢查字尾名
(1)、禁用瀏覽器端的js功能
直接刪除程式碼中onsubmit事件中關於檔案上傳時驗證上傳檔案的相關程式碼。
(2)、Firebug修改原始碼
直接更改檔案上傳JS程式碼中允許上傳的副檔名你想要上傳的副檔名。
(3)、Burpsuite抓包修改後綴名
(4)、本地表單提交
0X01:服務端MIME型別檢測 contentType
Burpsuite抓包修改contentType的值
0X02:目錄路徑檢測
(1)、用0x00進行截斷(php5.3.4以下+magic_qoute_gpc為off時,魔術符號會將 ’、”、null(%00)加反斜槓轉義 )
(2)、在路徑中設定一個.asp的檔案,利用解析漏洞(IIS6.0+ASP解析漏洞)
將path變數的值改為x.asp
當資料夾名為XX.asp時,資料夾中的檔案都會以asp的格式來解析,這是利用了IIS的解析漏洞
0X03:服務端副檔名檢測
(1)、基於黑名單的檢測
A、檔名大小寫繞過
B、名單列表繞過 asp格式的,黑名單裡面沒有asa cer的
C、特殊檔名繞過
x.asp_ 下劃線為一個空格(需要在burp裡面改以繞過驗證),windows會自動去掉後面的點和空格
D、0x00截斷繞過
asp 程式有此漏洞 x.asp_.jpg(下劃線為00截斷符) 檢測時gettype()從後往前,判定為jpg,儲存時一00截斷符為界,將asp最為字尾名存入。
E、htaccess檔案重寫
重寫過濾規則,允許asp格式的
(2)、基於白名單的
A、0x00截斷繞過
B、解析呼叫/漏洞繞過
5、服務端檔案內容檢測
0X03:檔案內容檢測
(1)、檔案幻數檢測(檔案頭)
JPG :FF D8
GIF:47 49 46
PNG:89 50 4E
在幻數後面加上自己的一句話就可
(2)、檔案相關資訊檢測
影象檔案 getimagesize() 只需要偽造好檔案頭就可 在檔案首部加入GIF89a
(3)、檔案載入檢測
程式碼注入繞過:找一個空白區進行程式碼的填充
解決方案
1、檔案上傳的目錄設定為不可執行
2、判斷檔案型別:強烈推薦白名單方式。此外,對於圖片的處理,可以使用壓縮函式或者resize函式,在處理圖片的同時破壞圖片中可能包含的HTML程式碼。
3、使用隨機數改寫檔名和檔案路徑:一個是上傳後無法訪問;再來就是像shell.php.rar.rar和crossdomain.xml這種檔案,都將因為重新命名而無法攻擊。
4、單獨設定檔案伺服器的域名:由於瀏覽器同源策略的關係,一系列客戶端攻擊將失效,比如上傳crossdomain.xml、上傳包含Javascript的XSS利用等問題將得到解決。