文件上傳漏洞總結
漏洞位於:只要能上傳文件的地方皆有可能出現文件上傳漏洞
尋找漏洞:尋找能上傳文件的地方,文本編譯器
攻擊方法:任意文件上傳,后綴大小寫繞過,文件類型繞過,雙寫后綴名繞過,請求特殊后綴繞過,圖片木馬合並上傳,文件00截斷繞過,截斷攻擊%和&,web服務器環境配置尋找漏洞 例如:IIS6.0的解析漏洞
任意文件上傳:

直接上傳沒有任何防御措施

后綴大小寫繞過(成功概率很小,暫時沒有成功過)
例子:shell.php 改為:shell.Php, shell.pHp, shell.PHP
文件類型繞過:
現在大部分都進行了文件類型判斷,通過Content-type頭判斷
這里拿DVWA的中級防御來進行示范

Php代碼:

直接上傳百分百失敗,先把1.php改為1.jpg。上傳的時候用burpsuite截斷,將1.jpg改為1.php
即可繞過此防御。

符合條件,所以上傳成功。

雙寫后綴名繞過:
例子:shell.jpg 變為jsp則 shell.jspsp
Shell.jpg 變為 php 則 shell.jphphp
.........
雙寫后綴名繞過雖然可以上傳成功但是,無法連接到菜刀,所有
只能用於惡意上傳並不能獲取服務器權限。
特殊后綴名上傳:
將上傳的文件的后綴名改為一些不常見的,如
- 1.php 變為 1.vbs
- 1.php 變為 1.php0
此操作也不能獲取服務器權限
圖片馬合並上傳:
在特殊的一些服務器環境里或文件包含漏洞,可以使用
如:IIS6.0的解析漏洞
1)當建立*.asa,*.asp格式的文件夾時,其目錄下的任意文件都會被IIS當做asp文件解析。
2)當上傳的文件為*.asp;1.jpg時,IIS6.0同樣以ASP腳本來執行。
3)實例:http://blog.sina.com.cn/s/blog_7fe448c70101ab7u.html
在挖掘到一個文件包含漏洞的時候,上傳圖片馬。利用本地文件包含圖片馬
從而獲取服務器權限。
實例:https://www.jianshu.com/p/0cc01ee0d247
文件0x00截斷上傳:
有些文件系統讀到0x00的時候就不會在讀,導致了截斷。
例子:上傳 shell.jsp0x00jpg,會把jpg后綴給過濾掉
導致shell.jsp上傳(請求成功,但實際上無數據)
截斷文件將20改為00:
例子:將shell.php上傳用burosuite抓包,改為shell.php +空格+shell.jpg=shell.php shell.jpg
到Hex,找到文件名哪行的20改為00。
例子:https://blog.csdn.net/yiyefangzhou24/article/details/8986281
文件上傳漏洞測試手段:

一些常見的web配置環境所出現的漏洞:
IIs6.0:(這里的IIS環境有很多類似的漏洞記得百度)
4)IIS6.0:當建立*.asa,*.asp格式的文件夾時,其目錄下的任意文件都會被IIS當做asp文件解析。
5)當上傳的文件為*.asp;1.jpg時,IIS6.0同樣以ASP腳本來執行。
Apache 1x或2x:
當apache遇見不認識的后綴名會從后向前解析,例如:1.php.rar。他不認識rar就向前解析,直到他認識的后綴名。
PHPCGI(Nginx)(這個不是phpCGI獨有的漏洞有時候在IIS也會出現):
當上傳1.jpg之后。訪問1.jpg/1.php。此時的1.jpg會被當做php來解析。
文件上傳漏洞常見的防御手法:
1)前端JavaScript驗證 (發現有只前端驗證的話,手動寫一個文件上傳的html將action設置為判斷文件即可。)例如:
檢測上傳文件的是:upload.php 但是服務端沒做判斷,前端做了判斷。
<form action=’http://xx/upload.php’ method=’post’>
<input type=’file’ name=’file’ id=’file’><br>
<input type=’submit’ value=’提交’>
</form>
2)服務端檢測(黑白名單驗證,Content-Type判斷) 上面已經說過如何繞過服務端驗證。
黑名單檢測繞過方法:如上
白名單檢測方法:白名單並不能完全防御住,上傳漏洞。可以通過web環境配置的缺陷與
其他漏洞一起利用。
文件上傳防御方法:
服務端白名單防御。注意修復web環境帶來的漏洞與其他漏洞。
