【滲透課程】第七篇-上傳漏洞之繞過上傳漏洞
前一篇我們已經講過了上傳漏洞的解析漏洞,在某些時候,知道網站存在哪個解析漏洞,那麽我們就可以更好的利用上傳漏洞
這個知識點在我們前面就有粗略說過了(http://www.yuntest.org/index.php/archives/765.html), http攔截也是上傳漏洞的其中之一, 下面我們來對繞過上傳漏洞進行更深的了解。
正文
管理員防止文件上傳漏洞時可以分為兩種,一種是客戶端檢測,一種是服務端檢測:
客戶端檢測:使用JavaScript檢測,在文件上傳之前,就對文件進行驗證
服務器端檢測:服務端腳本一般會檢測文件的MIME類型(這裏大家先點過去了解一下mime類型)檢測文件擴展名是否合法,甚至有些程序檢測文件中是否嵌入惡意代碼。
圖片一句話:
把一句話木馬插入在圖片文件中,而且並不損壞圖片文件,這一方法可以躲過少許的防火墻檢測。再利用解析漏洞得到webshell
推薦一款專業的制作軟件:LEdjpgcom
一、客戶端檢測繞過方法:
FireBug插件:將用於檢驗文件擴展名的onsubmit事件刪除。
中間人攻擊:使用Burp Suite,首先把木馬擴展名改為一張正常圖片(圖片木馬的簡介上一篇說過了,大家可以百度加以了解)的擴展名,比如JPG擴展名,,在上傳時使用Burp Suite攔截上傳數據,再將其中的擴展名JPG修改為PHP,就可以繞過客戶端驗證。也有可能還需要相應地修改Content-Length(Http知識點,看不明白跑回去看:http://www.yuntest.org/index.php/archives/686.html)
任何客戶端驗證都是不安全的,客戶端驗證是防止用戶輸入錯誤,減少服務器開銷,而服務器端驗證才可以真正防禦攻擊者。
註:從第一篇一直看到這裏的,不理解的去面壁
二、服務器端檢測
白名單與黑名單驗證
黑名單過濾方法:定義不允許上傳的文件擴展名
黑名單的繞過方法:
1.攻擊者可以從黑名單中找到Web開發人員忽略的擴展名,如:cer
2.對文件的後綴名進行大小寫轉換,比如黑名單中有php,可以將文件的後綴改為pHp,僅限windows平臺
3.在windows系統下,如果文件名以“.”或者空格作為結尾,系統會自動刪除“.”與空格,利用此特性也可以繞過黑名單驗證。(asp.或asp_)
白名單過濾方法:定義允許上傳的文件擴展名
白名單的繞過方法:結合Web容器的解析漏洞
MIME驗證
php中通過$_FILE[‘file‘][‘type‘]來檢驗
繞過方法:可以在Burp Suite中更改Content-Type的內容為image/jpeg
目錄驗證
在文件上傳時,程序通常允許用戶將文件放到指定的目錄中,如果指定的目錄存在,就將文件寫入目錄中,不存在的話則先建立目錄,然後寫入。
比如:在前端的HTML代碼中,有一個隱藏標簽<input type="hidden" name="Extension" value="up"/>
在服務器端有如下代碼
if(!is_dir($Extension)){ //如果文件夾不存在,就建立文件夾
mkdir($Extension);
}
攻擊者可以利用工具將表單中value的值由“up”改為“pentest.asp”,並上傳一句話圖片木馬文件。
程序在接收到文件後,對目錄判斷,如果服務器不存在pentest.asp目錄,將會建立此目錄,然後再將圖片一句話密碼文件寫入pentest.asp目錄,如果Web容器為IIS 6.0,那麽網頁木馬會被解析。
截斷上傳攻擊
在ASP程序中最常見,也就是%00將後面的字符都截斷了,比如上傳文件名為1.asp%00xxser.jpg。
實際操作過程中,利用Burp Suite的Repeater中的HEX選項卡可以進行這樣的操作。
截斷上傳漏洞不僅出現在ASP程序上,在PHP、JSP程序中也存在這樣的問題。
0x00不是針對所有基於白名單的後綴名檢查都能繞過,代碼的實現過程中必須存在截斷上傳漏洞。
【滲透課程】第七篇-上傳漏洞之繞過上傳漏洞