1: 前台腳本檢測擴展名—繞過
原理:當用戶在客戶端選擇文件點擊上傳的時候,客戶端還沒有向服務器發送任何消息,就對本地文件進行檢測來判斷是否是可以上傳的類型,這種方式稱為前台腳本檢測擴展名。
繞過方法:
-
-
繞過前台腳本檢測擴展名,就是將所要上傳文件的擴展名更改為符合腳本檢測規則的擴展名,通過 BurpSuite工具,截取數據包,並將數據包中文件擴展名更改回原來的,達到繞過的目的。
-
例如:文件名本來為【 evil.jpg】,上傳時,用BurpSuite截包后,將數據包中的名字改為【evil.php】(或其它腳本類型)即可
-
2: Content-Type檢測文件類型—繞過
原理:當瀏覽器在上傳文件到服務器的時候,服務器對說上傳文件的Content-Type類型進行檢測,如果是白名單允許的,則可以正常上傳,否則上傳失敗。
繞過方法:繞過Content--Type文件類型檢測,就是用BurpSuite截取並修改數據包中文件的Content-Type類型(如改為:image/gif),使其符合白名單的規則,達到上傳的目的。
3: 文件系統00截斷—繞過
原理:在上傳的時候,當文件系統讀到【0x00】時,會認為文件已經結束。利用00截斷就是利用程序員在寫程序時對文件的上傳路徑過濾不嚴格,產生0x00上傳截斷漏洞。
繞過方法:通過抓包截斷將【evil.php.jpg】后面的一個【.】換成【0x00】。在上傳的時候,當文件系統讀到【0x00】時,會認為文件已經結束,從而將【evil.php.jpg】的內容寫入到 【evil.php】中,從而達到攻擊的目的。
4: 服務器端擴展名檢測黑名單—繞過
原理:當瀏覽器將文件提交到服務器端的時候,服務器端會根據設定的黑白名單對瀏覽器提交上來的文件擴展名進行檢測,如果上傳的文件擴展名不符合黑白名單的限制,則不予上傳,否則上傳成功。
繞過方法:將一句話木馬的文件名【evil.php】,改成【evil.php.abc】(奇怪的不被解析的后綴名都行)。首先,服務器驗證文件擴展名的時候,驗證的是【.abc】,只要該擴展名符合服務器端黑白名單規則,即可上傳。另外,當在瀏覽器端訪問該文件時,Apache如果解析不了【.abc】擴展名,會向前尋找可解析的擴展名,即【.php】
5: JS檢測上傳文件—繞過
原理:上傳文件時,對方使用JavaScript語句語法檢測上傳文件的合法性問題。
繞過方法:在本地瀏覽器客戶端禁用JS即可。可使用火狐瀏覽器的NoScript插件、IE中禁用掉JS等方式實現。
6: 重寫解析規則—繞過
原理:上傳覆蓋.htaccess文件,重寫解析規則,將上傳的帶有腳本馬的圖片以腳本方式解析。
繞過方法:在可以上傳.htaccess文件時,先上傳.htaccess文件,覆蓋掉原先的.htaccess文件;再上傳【evil.gif】文件。使用如下的.htaccess語句,即可將【evil.gif】文件以php腳本方式解析。
7: 其它方式—繞過
原理:部分程序員的思維不嚴謹,並使用邏輯不完善的上傳文件合法性檢測手段,導致可以找到方式繞過其檢測方式。
繞過方法:
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 】等。