1.前端JS驗證
基於本地驗證文件是否符合要求:直接將JavaScript禁用。或者burp抓包后修改后綴,將php文件后綴現先改為jpg,burp抓包后后綴改回php。
2.MIME 類型驗證
burp抓包將Content-type類型修改為image/jpeg,image/png等

3.黑名單驗證
①尋找沒有過濾的類型:
phtml php3 php4 php5 PHP phtm
例如 phtml php3 php4 php5 PHP phtm這些后綴名首先得讓服務器支持這些解析為php腳本運行,httpd.conf配置文件中可以查看設置。

從圖中可以看到,我安裝的Apache默認解析php和phtm的,如果黑名單並沒有過濾phtm,就可以上傳phtm的木馬。
②大小寫繞過
例如phP,黑名單上不存在的話就可以繞過,過濾嚴格的話一般會用個strtolower()把后綴全變為小寫,那個時候就不行了。
4.檢查文件內容
①getimagesize() 函數用於獲取圖像信息:
構造圖片馬,或者用winhex在圖片后邊添加上木馬的內容,一個原理。
②檢驗關鍵字
例如<?php
<script language="php">eval($_POST['cmd']);</script>
③檢驗文件大小
沒啥用,一般上傳的木馬超不過那個大小。
5。00截斷
計算機處理文件遇到0x00(代表NULL)則會自動截斷后邊的內容,而較低版本的php就會因為這個出現漏洞。
一般分為兩種那個情況:
①可以自己構造上傳路徑。
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,達到了繞過的目的。
不過我覺得沒啥用,他要是循環過濾那不就完了,寫代碼的時候肯定不會只給你過濾一次啊。
