滲透之路基礎 -- 檔案上傳
阿新 • • 發佈:2019-09-16
漏洞危害
可以直接上傳Shell,導致伺服器getshell
漏洞形成
Web應用程式沒有對上傳檔案的格式進行嚴格過濾 , 還有一部分是攻擊者通過 Web伺服器的解析漏洞來突破Web應用程式的防護;通常都會出現在,上傳功能上
檔案上傳格式及解析
沒有解析漏洞的情況下,格式程式碼必須要和檔案格式一直,否則無法正常解析執行,如果存在解析漏洞的情況下,格式程式碼可以和不同格式相互解析
之後也會發出關於解析漏洞的文章!
漏洞防禦
可以針對檔名、檔案大小、檔案內容、檔案型別等進行防禦
檢查檔案上傳路徑 ( 避免 0x00 截斷、 IIS6.0 資料夾解析漏洞、目錄遍歷 )
副檔名檢測 ( 避免伺服器以非圖片的檔案格式解析檔案 )
檔案 MIME驗證 ( 比如 GIF 圖片 MIME為 image/gif,CSS 檔案的 MIME為 text/css 等 ) 3. 檔案內容檢測 ( 避免圖片中插入 webshell)
圖片二次渲染 ( 最變態的上傳漏洞防禦方式 , 基本上完全避免了檔案上傳漏洞 )
檔案重新命名 ( 如隨機字串或時間戳等方式 , 防止攻擊者得到 webshell 的路徑 )
注意:若攻擊者上傳了shell之後,肯定會通過某刀劍進行連線,所以儘量不要暴露檔案路徑,並且設定訪問許可權,以進一步防禦
檔案上傳驗證及突破
檔案過濾,驗證字尾:
檔案頭驗證
檔案型別驗證
檔案字尾驗證
繞過:
- 修改檔案頭,偽造檔案屬性
- 修改檔案型別,偽造檔案型別 MIME繞過
- 增加多重字尾,偽造檔案字尾 命名繞過
js 本地驗證突破
複製js程式碼,建立本地檔案刪除相應驗證程式碼後直接上傳(無防盜鏈可用)
%00 截斷 shell.php%00.jpg => shell.php
上傳成功之後仍然是圖片格式
這時候需要抓包修改
- 注意:直接通過burp抓包修改,可能上傳的檔案還是shell.php%00.jpg
- 需要通過修改%00的URL編碼格式:
- 選中%00 右鍵選中 URL
- 點選 URL-decode
- %00 亂碼則可以上傳