文件上傳漏洞及其繞過

1.前端JS驗證

基於本地驗證文件是否符合要求:直接將JavaScript禁用。或者burp抓包後修改後綴,將php文件後綴現先改成jpg,burp抓包後後綴改回php。php

2.MIME 類型驗證

burp抓包將Content-type類型修改成image/jpeg,image/png等
html

3.黑名單驗證

①尋找沒有過濾的類型:

phtml php3 php4 php5 PHP phtm前端

例如phtml php3 php4 php5 PHP phtm這些後綴名首先得讓服務器支持這些解析爲php腳本運行,httpd.conf配置文件中能夠查看設置。瀏覽器

從圖中能夠看到,我安裝的Apache默認解析php和phtm的,若是黑名單並無過濾phtm,就能夠上傳phtm的木馬。服務器

②大小寫繞過

例如phP,黑名單上不存在的話就能夠繞過,過濾嚴格的話通常會用個strtolower()把後綴全變爲小寫,那個時候就不行了。app

4.檢查文件內容

①getimagesize() 函數用於獲取圖像信息:

構造圖片馬,或者用winhex在圖片後邊添加上木馬的內容,一個原理。ide

②檢驗關鍵字

例如<?php函數

<script language="php">eval($_POST['cmd']);</script>

③檢驗文件大小

沒啥用,通常上傳的木馬超不過那個大小。編碼

5。00截斷

計算機處理文件遇到0x00(表明NULL)則會自動截斷後邊的內容,而較低版本的php就會由於這個出現漏洞。
通常分爲兩種那個狀況:url

①能夠本身構造上傳路徑。

burp抓包在上傳路徑後邊加上muma.php%00,而後將%00進行url編碼(crtl+shift+u),(瀏覽器還要進行url解碼,因此先編碼後解碼,保證原來的字符不變)上傳。

②不知道上傳路徑:

文件名改成muma.php+.jpg,這個+ 其實就是個標識做用,改別的字符也行。burp抓包後,hex打開,將+的數值改成00,實際上表明就是0x00.
上傳。不過00截斷很舊了已經,如今基本找不到這種漏洞了。

6. .htaccess上傳

Apache纔有效的一個配置文件,直接配置Apache達到隨心所欲的目的,默認開啓。若是不開啓,找到httpd.conf配置文件:
Options FollowSymLinks

AllowOverride None
改成:
Options FollowSymLinks

AllowOverride All
即完成了開啓。

在有的時候黑名單過濾不嚴格,就會漏掉過濾.htaccess文件 。

這段代碼就是讓以ma.jpg的文件以php文件執行。上傳圖片後,無論圖片名字有沒有被自動重命名,訪問的圖片的地址看最後會有服務器上圖片的名字,而後用.htaccess進行配置便可。
也能夠直接Addtype application/x-httpd-php .jpg.全部的jpg都會以php腳本運行。

7.白名單檢測擴展名

最難繞過的方法。繞過方法請參考其餘方法。

8.雙寫繞過

若是對文件的內容例如<?php用str_replace()使其變爲空,就能夠構造特殊的內容例如<?p<?phphp,過濾後就變爲了<?php,達到了繞過的目的。

不過我以爲沒啥用,他要是循環過濾那不就完了,寫代碼的時候確定不會只給你過濾一次啊。

相關文章
相關標籤/搜索