檔案上傳 04 服務端檢測繞過(副檔名檢測)
本文記錄檔案上傳學習過程,教程為 《Upload Attack Framework V1.0》
檔案上傳檢測
- 客戶端javascript 檢測(通常為檢測副檔名)
- 服務端MIME 型別檢測(檢測Content-Type 內容)
- 服務端目錄路徑檢測(檢測跟path 引數相關的內容)、
- 服務端副檔名檢測(檢測跟檔案extension 相關的內容)
- 服務端檔案內容檢測(檢測內容是否合法或含有惡意程式碼)
服務端檢測繞過(副檔名檢測)
簡介
通常是針對檔案的副檔名字尾進行檢測
檢測內容:
對於副檔名檢測不強的,時常還可以結合目錄路徑攻擊
比如filename=”test.asp/evil.jpg” 之類
繞過黑名單檢測
例如 fckeditor 2.4.3 或之前版本的黑名單
檔名大小寫繞過
用像 AsP,pHp 之類的檔名繞過黑名單檢測
名單列表繞過
用黑名單裡沒有的名單進行攻擊,比如黑名單裡沒有 asa 或 cer 之類
特殊檔名繞過
比如傳送的 http 包裡把檔名改成 test.asp. 或 test.asp_(下劃線為空格),這種命名方式在 windows 系統裡是不被允許的,所以需要在burp 之類裡進行修改,然後繞過驗證後,會被 windows 系統自動去掉後面的點和空格,但要注意 Unix/Linux 系統沒有這個特性。
0x00 截斷繞過
在副檔名檢測這一塊目前我只遇到過 asp 的程式有這種漏洞,給個簡單的虛擬碼
name = getname(http request) //假如這時候獲取到的檔名是test.asp .jpg(asp 後面為0x00) type = gettype(name) //而在gettype()函式裡處理方式是從後往前掃描副檔名,所以判斷為jpg if (type == jpg) SaveFileToPath(UploadPath.name, name) //但在這裡卻是以0x00 作為檔名截斷 //最後以test.asp 存入路徑裡
.htaccess 檔案攻擊
配合名單列表繞過,上傳一個自定義的.htaccess,就可以輕鬆繞過各種檢測
解析呼叫/漏洞繞過
這類漏洞直接配合上傳一個程式碼注入過的非黑名單檔案即可,再利用解析呼叫/漏洞
繞過白名單檢測
- 0x00 截斷繞過
用像test.asp%00.jpg 的方式進行截斷,屬於白名單檔案,再利用服務端程式碼的檢測邏輯
漏洞進行攻擊,目前我只遇到過asp 的程式有這種漏洞- 解析呼叫/漏洞繞過
這類漏洞直接配合上傳一個程式碼注入過的白名單檔案即可,再利用解析呼叫/漏洞
詳解.htaccess檔案攻擊
簡介
無論是黑名單還是白名單
再直接點就是直接攻擊.htaccess 檔案
(其實目前我只見過結合黑名單攻擊的,在後面的攻擊分類裡,我會把它歸到黑名單繞過攻擊裡。但網上是把這個單獨分類出來的,可能別人有一些我不知道的方式和技巧吧,所以在這裡我也暫時保留這個單獨分類)
在PHP manual 中提到了下面一段話
move_uploaded_file section, there is a warning which states ‘If the destination file already exists, it will be overwritten.’ 如果PHP 安全沒配置好 就可以通過move_uploaded_file 函式把自己寫的.htaccess 檔案覆蓋掉伺服器上的 這樣就能任意定義解析名單了
測試:
通過一個.htaccess 檔案呼叫php 的解析器去解析一個檔名中只要包含”haha”這個字串的任意檔案,所以無論檔名是什麼樣子,只要包含”haha”這個字串,都可以被以php 的方式來解析,是不是相當邪惡,一個自定義的.htaccess 檔案就可以以各種各樣的方式去繞過很多上傳驗證機制
建一個 .htaccess 檔案,裡面的內容如下
<FilesMatch "haha"> SetHandler application/x-httpd-php </FilesMatch>
同目錄有個我們上傳一個只有檔名幷包含字串”haha”,但是卻無任何副檔名的檔案裡面的內容是php 一句話木馬
然後我們用中國菜刀去連線測試
結果如我們預期的一樣:)
所以一個可以由 hacker 掌控的 .htaccess 檔案是非常邪惡的
基本上可以秒殺各種市面上的上傳驗證檢測 (內容檢測除外)
從實際環境來說,我個人接觸過的,一般是配合黑名單攻擊
比如黑名單裡有漏網之魚,不夠完整,漏掉了 .htaccess 副檔名