編碼的世界 / 優質文選 / 文明

文件上傳檢測的多種繞過姿勢


2021年10月19日
-   

0x01: 前台腳本檢測擴展名—繞過原理
當用戶在客戶端選擇文件點擊上傳的時候,客戶端還沒有向服務器發送任何消息,就對本地文件進行檢測來判斷是否是可以上傳的類型,這種方式稱為前台腳本檢測擴展名。

繞過方法
繞過前台腳本檢測擴展名,就是將所要上傳文件的擴展名更改為符合腳本檢測規則的擴展名,通過BurpSuite工具,截取數據包,並將數據包中文件擴展名更改回原來的,達到繞過的目的。
例如:文件名本來為evil.jpg,上傳時,用BurpSuite截包後,將數據包中的名字改為evil.php(或其它腳本類型)即可。

0x02: Content-Type檢測文件類型—繞過原理
當瀏覽器在上傳文件到服務器的時候,服務器對說上傳文件的Content-Type類型進行檢測,如果是白名單允許的,則可以正常上傳,否則上傳失敗。

繞過方法
繞過ContentType文件類型檢測,就是用BurpSuite截取並修改數據包中文件的Content-Type類型(如改為:image/gif),使其符合白名單的規則,達到上傳的目的。

0x03: 文件系統00截斷—繞過原理
在上傳的時候,當文件系統讀到0x00時,會認為文件已經結束。利用00截斷就是利用程序員在寫程序時對文件的上傳路徑過濾不嚴格,產生0x00上傳截斷漏洞。

繞過方法
通過抓包截斷將evil.php.jpg後面的一個.換成0x00。在上傳的時候,當文件系統讀到0x00時,會認為文件已經結束,從而將evil.php.jpg的內容寫入到evil.php中,從而達到攻擊的目的。

0x04: 服務器端擴展名檢測黑名單—繞過原理
當瀏覽器將文件提交到服務器端的時候,服務器端會根據設定的黑白名單對瀏覽器提交上來的文件擴展名進行檢測,如果上傳的文件擴展名不符合黑白名單的限制,則不予上傳,否則上傳成功。

繞過方法
將一句話木馬的文件名evil.php,改成evil.php.abc(奇怪的不被解析的後綴名都行)。首先,服務器驗證文件擴展名的時候,驗證的是.abc,只要該擴展名符合服務器端黑白名單規則,即可上傳。另外,當在瀏覽器端訪問該文件時,Apache如果解析不了.abc擴展名,會向前尋找可解析的擴展名,即.php

0x05: JS檢測上傳文件—繞過原理
上傳文件時,對方使用JavaScript語句語法檢測上傳文件的合法性問題。

繞過方法
在本地瀏覽器客戶端禁用JS即可。可使用火狐瀏覽器的NoScript插件、IE中禁用掉JS等方式實現。

0x06: 重寫解析規則—繞過原理
上傳覆蓋.htaccess文件,重寫解析規則,將上傳的帶有腳本馬的圖片以腳本方式解析。

繞過方法
在可以上傳.htaccess文件時,先上傳.htaccess文件,覆蓋掉原先的.htaccess文件;再上傳evil.gif文件。使用如下的.htaccess語句,即可將evil.gif文件以php腳本方式解析。
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php
</FilesMatch>

0x07: 其它方式—繞過原理
部分程序員的思維不嚴謹,並使用邏輯不完善的上傳文件合法性檢測手段,導致可以找到方式繞過其檢測方式。

繞過方法
1. 後綴名大小寫繞過
用於只將小寫的腳本後綴名(如php)過濾掉的場合;
例如:將Burpsuite截獲的數據包中的文件名evil.php改為evil.Php
2. 雙寫後綴名繞過
用於只將文件後綴名,例如"php"字符串過濾的場合;
例如:上傳時將Burpsuite截獲的數據包中文件名evil.php改為evil.pphphp,那麼過濾了第一個"php"字符串"後,開頭的'p'和結尾的'hp'就組合又形成了php。
3. 特殊後綴名繞過
用於檢測文件合法性的腳本有問題的場合;
例如:將Burpsuite截獲的數據包中evil.php名字改為evil.php6,或加個空格改為evil.php 等。

熱門文章