文件上傳檢驗的基本思路(轉)

1: 前臺腳本檢測擴展名—繞過

  原理:當用戶在客戶端選擇文件點擊上傳的時候,客戶端尚未向服務器發送任何消息,就對本地文件進行檢測來判斷是不是能夠上傳的類型,這種方式稱爲前臺腳本檢測擴展名。php

  繞過方法:css

    1. 繞過前臺腳本檢測擴展名,就是將所要上傳文件的擴展名更改成符合腳本檢測規則的擴展名,經過 BurpSuite工具,截取數據包,並將數據包中文件擴展名更改回原來的,達到繞過的目的。
    2. 例如:文件名原本爲【 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: 服務器端擴展名檢測黑名單—繞過

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

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

5: JS檢測上傳文件—繞過

  原理:上傳文件時,對方使用JavaScript語句語法檢測上傳文件的合法性問題。插件

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

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 】等。

相關文章
相關標籤/搜索