文件上傳功能模塊
文件上傳功能是大部分web應用的必備功能,網站允許用戶自行上傳頭像、一些社交類網站允許用戶上傳照片、一些服務類網站需要用戶上傳證明材料的電子檔、電商類網站允許用戶上傳圖片展示商品情況等。若沒有進行充分的安全措施,那么即便是看似微不足道的文件上傳功能也會面臨極高的安全風險。
文件上傳漏洞原理
當用戶在在文件上傳的功能模塊處上傳文件時,如果WEB應用在文件上傳過程中沒有對文件的安全性進行有效的校驗,攻擊者可以通過上傳WEBshell等惡意文件對服務器進行攻擊,這種情況下認為系統存在文件上傳漏洞。
文件上傳漏洞—webshell
最常見的文件上傳漏洞的方法是上傳網站木馬(webshell)文件,WEBSHELL又稱網頁木馬文件,根據開發語言的不同又分為ASP木馬、PHP木馬、JSP木馬等,該類木馬利用了腳本語言中的系統命令執行、文件讀寫等函數的功能,一旦上傳到服務器被腳本引擎解析,攻擊者就可以實現對服務器的控制。
網站木馬(webshell)文件又分為大馬和小馬(一句話木馬)、圖片馬等
大馬:功能比較善,配合瀏覽器使用;代碼量通常較大;隱蔽性相對較弱,代碼量大,通常需要通過加密等方式來隱藏特征。
小馬:功能簡單,需要配合客戶端使用;代碼量通常較小;隱蔽性相對較強,容易通過變形隱藏特征,繞過過濾,通常與cknife工具一起使用。
圖片馬:當網站限制只能上傳圖片相關格式的時候,攻擊者無法繞過限制即可嘗試利用圖片馬來實現webshell操作。
文件上傳漏洞繞過限制
一句話木馬類似于,將該木馬文件通過文件上傳模塊上傳到服務器。$_POST[‘v’]里面的參數v就是我們的可以利用的參數,我們將我們要執行的指令通過參數v傳到服務器來執行;或者利用cknife工具來實現操作目標服務器。
(一)該網頁上傳形式收到限制,需要符合jpg、jpeg、JPG、JPEG這幾個類型格式,所以將原來的格式改為1.jpg格式(服務端校驗)
打開burp suite軟件攔截數據包,將文件名改為1.php,這樣才能運行php腳本,不然jpg后綴的文件雖然能夠上傳,但是沒用運行的功能。
在hackbar插件中定義v=phpinfo();可以查看php當前狀態的大量信息
(二)這個頁面限制了上傳的格式(MIME),需要將文件格式改為JPEG或者PNG(服務端校驗)
用burp suite攔截信息,將content-Type改為image/png
用hackbar工具定義參數v=phoinfo();查看php狀態信息
(三)該頁面對文件后綴進行了篩選,對php類型的文件不進行接受(服務端校驗)
打開burp suite軟件攔截信息,將文件名改為1.PHp,繞開web服務器的識別
用hackbar定義v=system(ipconfig);
(四)使用截斷的方式將jpg截斷。這句話有些混淆了。正確的寫法應該是: 1. 使用「%00」來截斷文件名的文件上傳漏洞。 2. 在使用「%00」時,可以使用「ctrl+shift+u」來將其編譯。
1.php%00.jpg,%00用ctrl+shift+u來編譯
用hackbar工具定義參數v=phoinfo();查看php狀態信息(五)該網頁只允許上傳圖片,修改后綴名無效
上傳b374k.jpg圖片馬,登入的密碼為b374k
利用瀏覽器即可使用圖片馬進行webshell操作
該頁面允許上傳的文件類型包括jpg、jpeg、png、gif和7z。可以利用apach識別不了后綴名時,從后往前識別擴展名的方式,將1.jpg通過burp改為1.php.7z,則變成壓縮形式的文件。
通過burp軟件抓包將1.jpg通過burp改為1.php.7z,則變成壓縮形式的文件。
用hackbar工具定義參數v=phoinfo();查看php狀態信息
文件上傳漏洞在web安全里面算是比較常見且危害較大的漏洞,建站廠商可以在此方面增加防范力度:如加強文件后綴名黑名單的范圍;對上傳文件的名字進行隨機修改;上傳文件的臨時目錄和保存目錄不允許執行權限等。