文件上傳漏洞總結(全)

文件上傳漏洞

凡是存在上傳文件的地方,都有可能存在文件上傳漏洞,並不是說有文件上傳就一定有文件上傳漏洞。

原理

這主要看一些文件上傳的程式碼有沒有 嚴格限制用戶上傳的文件類型,比如,只可以上傳.jpg|.png|.gif文件,但是由於程式碼不嚴謹,或者只在前端驗證這個文件的格式等等,造成了攻擊者可以上傳任意PHP文件,自定義文件。

危害

可以通過這個漏洞上傳後門文件,webshell,可以直接獲取網站許可權,然後獲取伺服器的提權,獲取內網許可權,或去用戶資訊等等。屬於高危漏洞。

查找:

黑盒:對方的網站情況,源碼我們是不知道的。通過目錄掃描獲取到文件上傳地址,功能查找,看網站有沒有文件上傳功能,比如會員中心上傳頭像等等。
白盒:有了源碼,通過程式碼分析,本地測試。

利用思路:

常規類:掃描獲取上傳、會員中心上傳、後台系統上傳、各種途徑上傳。CMS類:已知CMS源碼。編譯器類:ckeditor、fckeditor、kindeditor、xxxxeditor。其他類/CVE:程式碼審計、平台/第三方應用。

文件上傳常見驗證

文件頭的驗證(文件內容的驗證):屬於間接驗證,內容頭資訊,不嚴謹可通過抓包修改進行欺騙。

文件類型的驗證:屬於間接驗證:MIME資訊 也就是數據包中的content-Type類型。可以修改進行一個欺騙。不嚴謹。

後綴名的驗證:屬於直接驗證,黑名單驗證和白名單驗證。黑名單就是明確不允許上傳……文件類型,如:.asp、.php、.jsp、.aspx、.cgi、war文件。當然也得看情況是否支援。白名單就是明確只允許上傳……文件,如:.jpg、.png、.gif、zip、rar文件,相對黑名單較安全。

思路

一.黑名單的繞過

1.有些黑名單定義的不可上傳文件的後綴名不完整,可以用.php5、.phtml、.phps、.pht文件進行上傳,從而實現繞過。

2.上傳配置文件.htaccess,在這個文件寫上程式碼
<FilesMatch “x.png”>
SetHandler application/x-httpd-php
如果有一個文件的名字是x.png,那麼這個png文件就會被當作php文件進行解析,這樣也可以實現繞過

3.大小寫繞過將.phP文件名後綴大寫

4.收尾去空繞過,在後綴名加空格(需要在抓到的數據包中加空格,直接在文件後綴名加空格會命名不成功,它會自動刪除空格)

5.不刪除末尾的點,在後綴名加點(需要在抓到的數據包中加點,直接在文件後綴名加點會命名不成功,它會自動刪除點)

6.沒有去除字元串::$DATA。如果文件名+”::$DATA”會把::$DATA之後的數據當成文件流處理,不會檢測後綴名。例如:x.php::$DATA,Windows會自動去掉末尾的::$DATA變成x.php,但是這剛好就可以繞過黑名單了。

7.有時沒有循環驗證,只驗證一次,可以使用x.php. .類似的方法進行繞過。(方法不止一種,視情況而定)

二.白名單的繞過

1.可以使用%00進行截斷。%00隻能用於php版本低於5.3的

2.圖片馬進行繞過

3.條件競爭進行繞過。
白名單要配合其他漏洞進行利用。

三.中間件之伺服器

如果我們嘗試上述的方法進行測試,發現網站確實沒有漏洞,這時我們就可以對他的中間件進行測試。

1.IIS6.0版本

(1) 當建立.asa、.asp格式的文件夾時,其目錄下的任意文件都將被IIS當作為asp文件解析。
(2) 當上傳文件.asp;*.jpg IIS6.0會將文件當做asp文件解析。

2.apache低版本(2.x)

如果對方中間件是apache屬於低版本,我們可以利用文件上傳,上傳一個不識別的文件後綴,利用解析漏洞規則成功解析文件,其中的後門程式碼被執行。例如:x.php.aaa.bbb.ccc.ddd,可以被當作php文件進行解析,從最後一個.ddd開始,apache不認識,就往前走,一直到.php,這樣即繞過了驗證,有可以進行解析。

3.apache換行解析漏洞(2.4.0–2.4.29)

在解析PHP時,1.php\x0A將被按照PHP後綴進行解析,導致繞過一些伺服器的安全策略。

4.Nginx低版本、II7

上傳可以上傳的文件,在文件地址後加上/x.php,可以讓文件以php程式碼去執行。

5.Nginx文件名邏輯(0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)

我們只需要上傳一個空格結尾的文件,即可使PHP解析

四.中間件之編譯器

可以參考://navisec.it/編輯器漏洞手冊/

五.WAF繞過

如果對方有安全狗一些防護軟體,我們應該如何進行繞過
1.要明確上傳參數名哪些東西可以更改,哪些不可以
Content-Disposition:一般不可以更改
name:表單參數值,不能更改
filename:文件名,可以更改
Content-Type:文件mime,視情況更改

2.繞過方法
數據溢出,防匹配,比如:filename=「x.php」可以在名字上寫入大量的立即數據,讓安全狗匹配不到,filename=「aaaaaaaaaasssssssssssfggghgjghtuyrfuy6tfgufujfffx.php」,大量寫入,我這裡這個量是不夠的,自行測試。
符號變異,防匹配,filename=「x.jpg;.php」
數據截斷防匹配,(%00;換行)
重複數據防匹配(參數多次寫入)

安全修復

1.後端驗證:採用服務端驗證模式
2.後綴驗證:基於白名單,黑名單過濾
3.MIME驗證:基於上傳自帶類型艱檢測
4.內容檢測:文件頭,完整性檢測
5.自帶函數過濾
6.WAF防護軟體:寶塔、雲盾等