(一)漏洞原理
文件上傳漏洞是指由于程序員在對用戶文件上傳部分的控制不足或者處理缺陷,而導致的用戶可以越過其本身權限向服務器上上傳可執行的動態腳本文件。這里上傳的文件可以是木馬,病毒,惡意腳本或者WebShell等。
“文件上傳”本身沒有問題,有問題的是文件上傳后,服務器怎么處理、解釋文件。如果服務器的處理邏輯做的不夠安全,則會導致嚴重的后果。
(二)基礎測試方法
一般來講,開發者一般都會對文件上傳部分,進行檢測和過濾,用于檢測文件類型的方法有很多種,按照下面方法,一步一步測試
1、總的測試思路
- 第一步查看前端js,如果是在前端js實現文件上傳,可以刪掉綁定方法,直接上傳文件
- 第二步查看是否是黑白名單檢測:黑名單是禁止上傳文件,白名單是只允許上傳文件
????????如果是白名單:尋找可控參數
? ? ? ? 如果是黑名單,可以嘗試找非黑名單以外的有害文件,可以是大小寫不同的可執行文件,比如PhP,也可以是系統配置文件,比如.htaccess文件
??
2、基于白名單的測試
1、針對后綴名測試,可能在邏輯上發生錯誤,從而引發文件上傳漏洞,比如
? ? ? ? 加雙后綴:變成file.php.jpg?或 file.jpg.php,繞過檢測
? ? ? ? 后綴名加空格:變成file.php ,系統無法正確識別實際擴展名“.php”,從而繞過白名單檢測
????????后綴名加點:變成file.php. 這個方法真針對window系統,win系統中對文件名后綴有點的,會省略掉,.php.就變成.php
? ? ? ? 后綴名加入%00,進行截斷比如file.php,變成file.php%00,(這個方法跟版本有關,老版本可能有)
??
2、上傳圖片碼,比如只允許圖片上傳的,把圖片和木馬集合在一起
3、修改檢測值
????????文件頭,比如JPEG (jpg)的文件頭: FFD8FF,在圖片制作的時候,修改文件
????????contnet-type值,修改MIME類型為符合上傳格式類型,比如png是image/png
4、數組新式上傳,如果系統采用數組方式上傳,就自己加上一個值,進行上傳
3、基于黑名單的測試
如果是黑名單檢測文件上傳,可以采用以下測試方法:
1、也是對文件后綴名進行測試,在邏輯上文件上傳漏洞:
? ? ? ? 更改后綴大小寫:比如php變成Php,有可能沒有禁止Php
????????修改后綴名:比如php,換成php3,這是有可能php3沒有被禁止
? ? ? ? 后綴名后加入::$DATA,比如file.php變成file.php::$DATA,這是NTFS交換數據流繞過,# 其中一個冒號表示創建文件,兩個冒號表示寫入文件內容
????????雙寫文件后綴名,比如.php 變成.pphphp,如果存在檢測php文件后替換成空,可以采用這個方法
2、 修改contnet-type值,修改MIME類型為符合上傳格式類型,比如png是image/png
3,上傳系統文件,有時候開發者忽略網站配置文件,
????????php網站.htaccess,讓其上傳圖片也可以當作文件執行
? ? ? ? ..user.ini文件,讓包含一個文件
(三)進階測試方法
有寫開發者只關注禁止上傳腳本文件這一點,只運行上傳符合業務需求的文件,從而針對性的開發,這雖然提升了黑客上傳腳本文件,直接getshell,但是忽略其他漏洞,其實由于文件上傳這一個功能點,可以導致其他漏洞,如下
1)webshell,上傳腳本文件可以webshell
2)xss:
????????文件名插入payload造成xss、
????????上傳html文件造成xss文件(html文件里注入payload)
????????上傳svg文件(一種圖像類型),在屬性中插入payload造成xss漏洞
????????上傳gif文件(一種圖片),在圖片頭注入payload造成xss漏洞
????????上傳pdf文件,在文件中屬性-添加編輯動作內容插入payload,造成xss
????????上傳word文檔,在xml文件部分中,選擇任意文件的文件名中插入大量A,在 hexeditor中找到大量存在41(A的十六進制),把payload轉為十六進制插入,上傳word文檔造成xss
3)xxe(docx、xlsx、svg等本質是xml文件)
????????上傳直接上傳xml文件,造成xxe
????????上傳xlsx文件,在xlsx中找到下xml文件處插入payload,造成xxe
????????上傳docx文件,在xml文件處插入paylaod,造成xxe
????????上傳svg文件,造成xxe
4)命令注入
????????上傳csv文件,在csv插入payload,在導出csv文件中,打開執行命令導致命令執行
????????上傳圖片,對圖片進行二次渲染,插入命令,導致rce
5)目錄遍歷
?????? 上傳壓縮包,服務器對其加壓,可能存在Zip Slip目錄走訪漏洞
6)ssrf
?????? 上傳 ?.URL 文件,打開可能會Windows 上的 SSRF SMB連接,導致ssrf
?????? 導出pdf文件導致ssrf,在發票打印、行程打印、車票打印、保單下載會有導出pdf文件功能,對響應參數進行注入url導致ssrf漏洞
7)DOS攻擊
?????? 上傳圖片,修改文件像素大小,改為無限大,導致DOS
?????? zip遞歸炸彈和非遞歸炸彈
?????? 上傳png文件,解壓造成dos
8)目錄遍歷
?????? 將文件名注入../../../../etc/passwd等paylaod,造成目錄遍歷
9)注入漏洞,
?????? 對文件名注入各種payload,比如sleep(10).png,造成sql注入,注入<h1>test<h1>.png,造成html注入
具體請看:https://mp.weixin.qq.com/s/nMLoTN28WzocRLy8nkq3qw
(四)利用方法
1、上傳腳本文件,直接getshell,獲取目標服務器的控制權
2、造成其他攻擊,參考上面的進階測試方法
(五)防御方法
- 文件類型驗證:限制允許上傳的文件類型,只允許上傳通過驗證的文件類型,而排除可執行文件、腳本文件或其他危險類型的文件。
- 文件大小限制:限制上傳文件的大小,以防止攻擊者上傳大文件并消耗服務器資源。
- 文件名驗證與隨機重命名:對上傳的文件名進行驗證和過濾,防止惡意文件名的使用。同時文件重命名,在保存文件時,使用隨機生成的文件名替換用戶上傳的文件名,避免可預測的文件路徑或文件名暴露
- 文件內容檢查:在接收到文件后,進行文件內容的檢查和分析,如通過安全掃描工具檢測文件中是否包含惡意代碼。
- 存儲安全:將上傳的文件存儲在安全的位置,并確保文件無法直接執行,只有只讀的權限
?