導致文件上傳漏洞的原因較多,主要包括以下幾類:
未過濾或Web前端過濾被繞過
*文件內容檢測被繞過
*中間件解析
不完善的黑名單擴展名
*文件路徑截斷
HTTP不安全方法(PUT協議)
加星號是比較重要的
文件名后綴就一個%00字節,可以截斷某些函數對文件名的判斷。在許多語言函數中,處理字符串的函數中0x00被認為是終止符。
例如:
網站上傳函數處理xxx.php%00.jpg時,首先后綴名是合法的jpg格式,可以上傳,在保存文件時,遇到%00字符丟棄后面的jpg,文件后綴最終保存的后綴名為xxx.php
*在你寫的小馬前面加一個GIF89a ? ?假裝是圖片-.-
條件:
尋找一個上傳點,查看上傳點是否可用。
利用:
首先判斷是程序員自己寫的上傳點,還是編輯器的上傳功能
如果是編輯器上傳功能,goole當前編輯器的漏洞
如果是程序員寫的上傳點
上傳一個正常的jpg圖片 查看上傳點是否可用
上傳一個正常的jpg圖片,burp攔截,修改后綴為php (可以檢測前端驗證 MIME檢測 文件內容檢測 后綴檢測)
上傳一個正常的jpg圖片,burp攔截, 00截斷 1.php%00.jpg
判斷服務器是什么類型,web服務器程序,是什么類型,版本號多少
利用解析漏洞
防御:::
上傳文件的存儲目錄禁用執行權限
文件后綴白名單,注意0x00截斷攻擊(PHP更新到最新版本)
不能有本地文件包含漏洞
及時修復Web上傳代碼(重要)
升級Web Server