1. 程式人生 > >檔案上傳的一些繞過方法

檔案上傳的一些繞過方法

檔案上傳漏洞所需的條件

一是檔案可上傳(感覺這一句是廢話)。

二是上傳檔案路徑可知,如果路徑不可知就沒法訪問,亦無法配合諸如檔案包含漏洞進行檔案執行。

三是上傳檔案可以被訪問。

四是上傳檔案可以被執行,當然這一步也不是必需的,比如配合檔案包含漏洞。

繞過姿勢

檔案上傳校驗姿勢

  • 客戶端javascript校驗(一般只校驗字尾名)
  • 服務端校驗
    • 檔案頭content-type欄位校驗(image/gif)
    • 檔案內容頭校驗(GIF89a)
    • 字尾名黑名單校驗
    • 字尾名白名單校驗
    • 自定義正則校驗
  • WAF裝置校驗(根據不同的WAF產品而定)

0X00:前端js檢查字尾名

(1)、禁用瀏覽器端的js功能

直接刪除程式碼中onsubmit事件中關於檔案上傳時驗證上傳檔案的相關程式碼。

(2)、Firebug修改原始碼                 

直接更改檔案上傳JS程式碼中允許上傳的副檔名你想要上傳的副檔名。

(3)、Burpsuite抓包修改後綴名

(4)、本地表單提交

0X01:服務端MIME型別檢測 contentType

Burpsuite抓包修改contentType的值

0X02:目錄路徑檢測

(1)、用0x00進行截斷(php5.3.4以下+magic_qoute_gpc為off時,魔術符號會將 ’、”、null(%00)加反斜槓轉義 )

(2)、在路徑中設定一個.asp的檔案,利用解析漏洞(IIS6.0+ASP解析漏洞)

將path變數的值改為x.asp

當資料夾名為XX.asp時,資料夾中的檔案都會以asp的格式來解析,這是利用了IIS的解析漏洞

0X03:服務端副檔名檢測

(1)、基於黑名單的檢測

A、檔名大小寫繞過

B、名單列表繞過 asp格式的,黑名單裡面沒有asa cer的

C、特殊檔名繞過

x.asp_ 下劃線為一個空格(需要在burp裡面改以繞過驗證),windows會自動去掉後面的點和空格

D、0x00截斷繞過

asp 程式有此漏洞 x.asp_.jpg(下劃線為00截斷符) 檢測時gettype()從後往前,判定為jpg,儲存時一00截斷符為界,將asp最為字尾名存入。

E、htaccess檔案重寫

重寫過濾規則,允許asp格式的

(2)、基於白名單的

A、0x00截斷繞過

B、解析呼叫/漏洞繞過                     

5、服務端檔案內容檢測

0X03:檔案內容檢測

(1)、檔案幻數檢測(檔案頭)

JPG :FF D8

GIF:47 49 46

PNG:89 50 4E

在幻數後面加上自己的一句話就可

(2)、檔案相關資訊檢測

影象檔案 getimagesize() 只需要偽造好檔案頭就可 在檔案首部加入GIF89a

(3)、檔案載入檢測

程式碼注入繞過:找一個空白區進行程式碼的填充

解決方案

1、檔案上傳的目錄設定為不可執行

2、判斷檔案型別:強烈推薦白名單方式。此外,對於圖片的處理,可以使用壓縮函式或者resize函式,在處理圖片的同時破壞圖片中可能包含的HTML程式碼。

3、使用隨機數改寫檔名和檔案路徑:一個是上傳後無法訪問;再來就是像shell.php.rar.rar和crossdomain.xml這種檔案,都將因為重新命名而無法攻擊。

4、單獨設定檔案伺服器的域名:由於瀏覽器同源策略的關係,一系列客戶端攻擊將失效,比如上傳crossdomain.xml、上傳包含Javascript的XSS利用等問題將得到解決。