防御文件上傳的一些思路
- 客戶端javascript校驗(通常校驗擴展名)
- 檢查文件擴展名
- 檢查MIME類型
- 隨機文件名
- 隱藏路徑
- 重寫內(nèi)容(影響效率)imagecreatefromjpeg…
- 檢查內(nèi)容是否合法
繞過技巧
- $_FILES[‘file’][‘type’]:burp抓包可修改
- 內(nèi)容檢查:
<script language=“php”></script>
- 文件名拓展檢查:黑名單繞過 ○ Php3 php5 phtml PPHP pHp phtm inc ○ Jsp jspx jspf ○ Asp asa cer aspx ○ Exe exee ○ 后綴名加空格 ○ 00截斷 ○ 雙重后綴名繞過
- 常配合文件包含漏洞達到特殊效果
- 通過比較gd函數(shù)處理前后的文件找到不產(chǎn)生變化的區(qū)塊寫入特殊的payloadhttp://www.freebuf.com/articles/web/54086.html
- phpinfo+lfi
- htaccess攻擊
- AddType application/x-httpd-php .jpg
<FilesMatch "lw.gif">
SetHandler application/x-httpd-php
</FilesMatch>
-
opcache文件getshell(利用phpinfo獲得緩存目錄后上傳shell)https://www.exehack.net/3272.html
- 如果內(nèi)存緩存的優(yōu)先級高于文件緩存历等,那么重寫opcache文件并不會執(zhí)行我們的webshell
- 開啟了validate_timestamp的繞過:
- Wordpress某些文件時間戳一樣
- opcache-override
文件頭檢測方法:將木馬后綴到文件末(常見的是通過getimagesize()函數(shù))
file_put_contents 數(shù)組繞過
-
當代碼中存在spl_autoload_register()函數(shù)時可以上傳.inc文件(laravel廓脆、composer中常用)(湖湘杯)
- spl_autoload_register()函數(shù)使用后將會自動調(diào)用inc文件
move_uploaded_file() 名稱可控時可上傳至任意位置,aaaa/../index.php/.繞過后綴名檢測
上傳模板文件
上傳繞過 parse_url函數(shù)可以通過多個斜杠來繞過