1. 程式人生 > >[web安全] 上傳漏洞之繞過上傳漏洞

[web安全] 上傳漏洞之繞過上傳漏洞

程式設計師在防止檔案上傳漏洞時可以分為以下兩種:
$客戶端檢測:客戶端使用JavaScript檢測,在檔案未上傳時,就對檔案進行驗證;
$伺服器端檢測:服務端指令碼一般會檢測檔案的MIME型別,檢測副檔名是否合法,甚至有些程式設計師檢測檔案中是否嵌入惡意程式碼

一句話木馬的常見程式碼:
PHP: <?php @eval($_POST['chopper']);?>
ASP: <%eval request("chopper")%>
ASP.NET: <%@ Page Language="Jscript"%><%eval (Request.Item["chopper"],"unsafe");%>

圖片一句話:
是將一句話木馬插入在圖片檔案中,而且並不損壞圖片檔案,這一方法可以躲過少許的防火牆檢測。
專業的製作軟體LEdjpgcom

一、客戶端檢測

程式設計師使用JavaScript來拒絕非法檔案上傳。
繞過方法:
FireBug外掛:將用於檢驗副檔名的onsubmit事件刪除。
中間人攻擊:使用Burp Suite。首先把木馬副檔名改為一張正常圖片的副檔名,比如JPG副檔名,在上傳時使用Burp Suite攔截上傳資料,再將其中的副檔名JPG修改為PHP,就可以繞過客戶端驗證。(可能還需要相應地修改Content-Length)
任何客戶端驗證都是不安全的。客戶端驗證是防止使用者輸入錯誤,減少伺服器開銷,而伺服器端驗證才可以真正防禦攻擊者。

二、伺服器端檢測
2.1 白名單與黑名單驗證

黑名單過濾方法:定義不允許上傳的副檔名
黑名單的繞過方法:1.攻擊者可以從黑名單中找到Web開發人員忽略的副檔名,如:cer
2.對檔案的字尾名進行大小寫轉換,比如黑名單中有php,可以將檔案的字尾改為pHp,僅限windows平臺
3.在windows系統下,如果檔名以“.”或者空格作為結尾,系統會自動刪除“.”與空格,利用此特性也可以繞過黑名單驗證。(asp.或asp_)
白名單過濾方法:定義允許上傳的副檔名
白名單的繞過方法:結合Web容器的解析漏洞

2.2 MIME驗證

php中通過$_FILE['file']['type']來檢驗
繞過方法:可以在Burp Suite中更改Content-Type的內容為image/jpeg

2.3 目錄驗證
在檔案上傳時,程式通常允許使用者將檔案放到指定的目錄中,如果指定的目錄存在,就將檔案寫入目錄中,不存在的話則先建立目錄,然後寫入。
比如:在前端的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,那麼網頁木馬會被解析。

2.4 截斷上傳攻擊

在ASP程式中最常見,也就是%00將後面的字元都截斷了,比如上傳檔名為1.asp%00xxser.jpg。
實際操作過程中,利用Burp Suite的Repeater中的HEX選項卡可以進行這樣的操作。

截斷上傳漏洞不僅出現在ASP程式上,在PHP、JSP程式中也存在這樣的問題。

0x00不是針對所有基於白名單的字尾名檢查都能繞過,程式碼的實現過程中必須存在截斷上傳漏洞。