PHP上傳繞過
0x01: 前臺指令碼檢測副檔名—繞過
原理
當用戶在客戶端選擇檔案點選上傳的時候,客戶端還沒有向伺服器傳送任何訊息,就對本地檔案進行檢測來判斷是否是可以上傳的型別,這種方式稱為前臺指令碼檢測副檔名。
1
繞過方法
繞過前臺指令碼檢測副檔名,就是將所要上傳檔案的副檔名更改為符合指令碼檢測規則的副檔名,通過BurpSuite工具,擷取資料包,並將資料包中副檔名更改回原來的,達到繞過的目的。
例如:檔名本來為【evil.jpg】,上傳時,用BurpSuite截包後,將資料包中的名字改為【evil.php】(或其它指令碼型別)即可。
1
2
0x02: Content-Type檢測檔案型別—繞過
原理
當瀏覽器在上傳檔案到伺服器的時候,伺服器對說上傳檔案的Content-Type型別進行檢測,如果是白名單允許的,則可以正常上傳,否則上傳失敗。
1
繞過方法
繞過Content–Type檔案型別檢測,就是用BurpSuite擷取並修改資料包中檔案的Content-Type型別(如改為:image/gif),使其符合白名單的規則,達到上傳的目的。
1
0x03: 檔案系統00截斷—繞過
原理
在上傳的時候,當檔案系統讀到【0x00】時,會認為檔案已經結束。利用00截斷就是利用程式設計師在寫程式時對檔案的上傳路徑過濾不嚴格,產生0x00上傳截斷漏洞。
1
繞過方法
通過抓包截斷將【evil.php.jpg】後面的一個【.】換成【0x00】。在上傳的時候,當檔案系統讀到【0x00】時,會認為檔案已經結束,從而將【evil.php.jpg】的內容寫入到【evil.php】中,從而達到攻擊的目的。
1
0x04: 伺服器端副檔名檢測黑名單—繞過
原理
當瀏覽器將檔案提交到伺服器端的時候,伺服器端會根據設定的黑白名單對瀏覽器提交上來的副檔名進行檢測,如果上傳的副檔名不符合黑白名單的限制,則不予上傳,否則上傳成功。
1
繞過方法
將一句話木馬的檔名【evil.php】,改成【evil.php.abc】(奇怪的不被解析的字尾名都行)。首先,伺服器驗證副檔名的時候,驗證的是【.abc】,只要該副檔名符合伺服器端黑白名單規則,即可上傳。另外,當在瀏覽器端訪問該檔案時,Apache如果解析不了【.abc】副檔名,會向前尋找可解析的副檔名,即【.php】
1
0x05: JS檢測上傳檔案—繞過
原理
上傳檔案時,對方使用JavaScript語句語法檢測上傳檔案的合法性問題。
1
繞過方法
在本地瀏覽器客戶端禁用JS即可。可使用火狐瀏覽器的NoScript外掛、IE中禁用掉JS等方式實現。
1
0x06: 重寫解析規則—繞過
原理
上傳覆蓋.htaccess檔案,重寫解析規則,將上傳的帶有指令碼馬的圖片以指令碼方式解析。
1
繞過方法
在可以上傳.htaccess檔案時,先上傳.htaccess檔案,覆蓋掉原先的.htaccess檔案;再上傳【evil.gif】檔案。使用如下的.htaccess語句,即可將【evil.gif】檔案以php指令碼方式解析。