對文件上傳的簡單總結

不久前作完了大部分的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 不能再自動解碼)

​3 0x00截斷

同上shell

​4 0x0a截斷

同上服務器

檢查內容

​1 文件頭檢查

​2 突破getimagesize()

​​直接上傳圖片馬

​​3 突破exif_imagetype()

​​直接上傳圖片馬

​4 突破move_uploaded_file()

​00截斷

​5 二次渲染

這個比較難歸納,請參考app

​https://xz.aliyun.com/t/2657#toc-13spa

這位師傅的這篇文章

其餘

​條件競爭

​經過向服務器不斷髮送(一樣的)webshell(讓其不能短期內及時處理)
相關文章
相關標籤/搜索