文件上傳造成因素:
文件路徑過濾不嚴格,可能通過遍歷目錄來獲得文件,也可能通過文件上傳對重要文件案進行覆蓋,還可能對文件拓展名和文件類型過濾不嚴格,可以上傳任意文件到web公開目錄上,進而遠程控制服務器
繞過
這篇文章判斷漏洞類型的圖片很言簡意賅一文解讀文件上傳漏洞 - 2xixi3 - 博客園
前端-js繞過
原理:
我理解的前端一般就是過濾文件拓展名,如果不符合過濾條件就會攔截在前端(上傳后F12網絡就看不到數據流),所以目的是先過去再解析
這是上傳png之類的有文件流
這是其他類型文件根本上傳不到后端
參考【文件上傳繞過】——前端檢測_前端js驗證漏洞_實驗四:文件上傳漏洞【實驗名稱】文件上傳漏洞【實驗目的】繞過javascript驗證檢-CSDN博客
方法:
(1)直接網頁禁用js
(2)bp抓包放包,把jpg圖片碼上傳抓包改為.php
常見的也就這兩種方法
后端
檢查后綴
黑名單
可能會限制.php/.asp,隨便上傳文后綴件名例如.stp,可以就是黑名單
(1)上傳可解析特殊后綴
(2)上傳.htaccess文件,其實就是改變目錄配置,在目標目錄上上傳一個命令文件作用于該目錄及其所有子目錄,【前提看web站點架構為:php+apache , 保證文件上傳到本地 , apache開對.htaccess支持;(bp抓包看請求頭來判斷)】
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php #在當前目錄下,如果匹配到evil.gif文件,則被解析成PHP代碼執行
AddHandler php5-script .gif #在當前目錄下,如果匹配到evil.gif文件,則被解析成PHP代碼執行
</FilesMatch>
(3) 后綴大小寫繞過
(4)點繞過:隨便輸后綴名不行就是白名單1.php.(Windows 系統下,文件后綴名最后一個點會被自動去除,Linux 系統下不會)
(5)空格繞過(Windows系統下,對于文件名中空格【demo.php(空格)
】會被作為空處理,程序中的檢測代碼卻不能自動刪除空格,從而繞過黑名單。)
(6)::$DATA:?? a.php::$DATA(在windows下,無法直接測試::$DATA,因為windows不允許后綴名中存在特殊字符;因為windows會將 a.php::$DATA認為NTFS文件的一個數據流而不是文件,因此會被當成非法文件名)
(7)配合解析漏洞
Apache:
一般解析:后綴名無法識別就像上解析(從右到左)eg:a.php.a.s會解析成a.php
換行解析:在2.4.0~2.4.29版本里有一個解析漏洞,如果在文件名后面加一個換行符x0A服務器依舊會把文件當成php解析,但是可以繞過黑名單(注意:不能是\x0D\x0A,只能是一個\x0A)
IIS:
上傳文件抓包在server Microsoft里的版本是IIS/6.0,三個方法,一個創建.asp目錄,在目錄上上傳1.php木馬文件,會當作asp解析;一個圖片第三個,直接改名;另一個是.asp;.jpg會被當作.asp解析(省略分號后面的部分)? 至于怎末創建.asp目錄,bp抓包上傳請求
POST /upload.php HTTP/1.1...Content-Disposition: form-data; name="file"; filename="shell.jpg"Content-Disposition: form-data; name="path"; filename="image.asp" // 嘗試創建目錄
至于怎末上傳文件到指定目錄
Content-Disposition: form-data; name="path"; filename="image.asp" // 指定目錄
也可以用穿越目錄(沒過濾../的情況下)
Content-Disposition: form-data; name="file"; filename="../image.asp/shell.jpg"
IIS/7.0
制作圖片碼,打開圖片,訪問圖片路徑并且在后加上 /.php
Nginx:
解析漏洞:Server是nginx/1.17.8上傳 圖片碼,在訪問路徑下加上.php
換行解析:nginx因為00截斷錯誤地解析了請求的 URI ,將獲取到用戶請求的文件名解析為對應的腳本程序,導致出現權限繞過、代碼執行等連帶影響(版本Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)上傳圖片碼抓包,服務器通常有以下配置
location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;include fastcgi_params;
}
參考資料:“文件上傳”配合中間件“解析漏洞”_中間件解析漏洞配合文件上傳-CSDN博客
?白名單
反之白名單
(1)MIME繞過(HTTP請求頭中的Content-Type屬性繞過,eg:Content-Type: text/html
)
(1)(2)(3)補充知識看:文件上傳漏洞總結(含原因+防御措施)+白名單+黑名單+內容、頭+解析漏洞/修補方案_00截斷修復方案-CSDN博客
(2)%00截斷:%00被服務器解碼為0x00發揮了截斷作用
(3)0x00截斷:利用ASCII碼為0這個特殊字符,讓系統認為字符串已經結束