常見的上傳繞過以及解析漏洞

  1. 前端繞過
  2. 服務端驗證繞過
  3. 編輯器漏洞
  4. 配合解析漏洞突破上傳

通常一個文件以HTTP協議進行上傳時,將以POST請求發送WEB服務器,WEB服務器接收到請求並同意後,用戶與WEB服務器將建立連接,並傳輸data。

常見上傳檢測規則
A. 客戶端javascript檢測(通常爲檢測文件拓展名)
B. 服務端MIME類型檢測(檢測Content-Type內容)
C. 服務端目錄路徑檢測(檢測跟path參數相關的內容)
D. 服務端文件名拓展名檢測(檢測跟文件estension相關的內容)
E. 服務器文件內容檢測(檢測內容是否合法或含有惡意代碼)

客戶端檢測

客戶端檢測通常在上傳頁面裏含有專門檢測文件上傳的JavaScript代碼。最常見的就是檢測拓展名是否合法。
判斷方式:
在瀏覽加載文件,但還未點擊上傳按鈕時便彈出對話框,內容如:只允許上傳.jpg/.jpeg/.png後綴名的文件,而此時並沒有發送數據包。

  1. 利用burpswite之類的代理工具。
  2. 修改webshell後綴類型爲允許上傳類型。
  3. 抓包攔截將其後綴名改爲對應服務器可以解析的後綴名。

繞過辦法
服務端MIME檢測服務端MIME類型檢測也就是檢測Content-Type的內容。下面是一段測試模擬代碼:
在這裏插入圖片描述
我們將request包的Content-Type修改:
圖片類型:
在這裏插入圖片描述
在這裏插入圖片描述

服務端目錄路徑檢測

  • 一般是檢測保存路徑是否合法,但一般都沒有防禦。檢測跟path參數相關的內容。
  • 漏洞成因是因爲對目錄路徑的檢測不夠嚴謹而導致可以用0x00截斷的方式來進行攻擊。
  • 0x00截斷:上傳文件的時候,當系統文件讀到(0x00)時,會認爲文件已經結束。利用00截斷就是利用WEB應用對文件上傳的路徑過濾的不嚴格,產生0x00上傳截斷漏洞。

繞過辦法
通過抓包截斷將 eval.php.jpg 換成 eval.php_jpg(下劃線爲0x00)。在上傳文件時系統文件遇到0x00。會認爲文件已經結束。從而將eval.php.jpg的內容寫入到eval.php中。

FilePath=C:/wamp/www/uploadfile/eval.php.jpgmoveuploadedfile(FilePath = C:/wamp/www/uploadfile/eval.php_.jpgmove_uploaded_file(_FILES[“upload_file”][“tmp_name”], $FilePath)

在執行move_uploaded_file的這個函數時底層操作調用類似於C語言。遇到0x00會自動截斷,真實寫入的地址應該是C:/wamp/www/uploadfile/eval.php

服務端文件名拓展檢測

基於黑名單檢測:
黑名單的安全性比白名單的安全性低很多,攻擊手法自然也比白名單多。一般有個專門的blacklist,裏面包含常見的危險腳本文件。

繞過辦法

  1. 文件名大小寫繞過(AsP, pHp等等)
  2. 黑白名單繞過(php、php2、php3、php5、phtml、asp、aspx、ascx、ashx、cer、asa、jsp、jspx)cdx,
  3. 特殊文件名繞過修改數據包裏的文件名改爲 test.php. 或者 test.asp_ (下劃線是空格)由於這種命名格式在windows系統裏是不允許的。所以在繞過上傳之後windows系統會自動去掉 點和空格。Unix/Linux系統沒有這個特性。
  4. 0x00截斷繞過
  5. htaccess文件攻擊(結合黑名單攻擊)
  6. 解析繞過

0x00截斷繞過

文件名後綴就一個%00字節,可以截斷某些函數對文件名的判斷。在許多語言函數中,處理字符串的函數中0x00被認爲是終止符。

例如:
網站上傳函數處理xxx.php%00.jpg時,首先後綴名是合法的jpg格式,可以上傳,在保存文件時,遇到%00字符丟棄後面的jpg,文件後綴最終保存的後綴名爲xxx.php

.htaccess文件攻擊

.htaccess文件攻擊即結合黑名單攻擊服務器的 .htaccess文件 。

通過move_uploaded_file函數把自己寫的 .htaccess文件覆蓋掉服務器上的這樣就可以解析定義名單了。

.htaccess文件用處:
通過.htaccess文件調用php解釋器去解析一個文件名中只要包含“haha”這個字符串的任意文件,無論你文件名是什麼樣子,只要包含”haha”這個字符串,都可以被以php的方式來解析。

.htaccess文件內容:

<FilesMatch “haha”>
SetHandler application/x-httpd-php
</FilesMatch>

服務端文件內容拓展檢測

如果文件內容檢測設置得比較嚴格,那麼上傳攻擊將變得非常困難。也可以說它是在代碼層檢測的最後一道關卡。如果它被突破了,就算代碼層的漏洞,也可以結合解析漏洞進行攻擊。

  1. 文件幻數檢測 jpg(JFIF) gif(GIF89a) png(%PNG)
  2. 文件相關信息檢測(文件頭加一些圖片信息中間夾雜攻擊代碼)
  3. 文件加載檢測(調用API或者函數進行文件加載測試 php的 gd庫)

文件幻數檢測繞過
主要是檢測文件內容開始處的文件幻數,比如圖片類型的文件幻數如下:要繞過jpg文件幻數檢測就要在文件開頭寫上下圖的值:
在這裏插入圖片描述
gif文件:GIF89a
png文件:%PNG

製作圖片馬
cmd下執行:

copy /b 1.jpg+2.php=3.jpg

Apache解析漏洞
test.php.aaa.bbb.ccc任意不屬於黑名單且不屬於Apache解析白名單之內的後綴名。

說明
一個文件名爲test.php.aaa.bbb.ccc的文件,Apache會從ccc的位置往php的位置開始嘗試解析 ,如果ccc不屬於Apache能解析的後綴名,那麼Apache就會嘗試去解析bbb,這樣一直往前嘗試,直到遇到一個能解析的拓展名爲止。

WampServer2.0All Version (WampServer2.0i / Apache 2.2.11) [Success]
WampServer2.1All Version (WampServer2.1e-x32 / Apache 2.2.17) [Success]
Wamp5 All Version (Wamp5_1.7.4 /Apache 2.2.6) [Success]
AppServ 2.4All Version (AppServ - 2.4.9 /Apache 2.0.59) [Success]
AppServ 2.5All Version (AppServ - 2.5.10 /Apache 2.2.8) [Success]
AppServ 2.6All Version (AppServ - 2.6.0 /Apache 2.2.8) [Success]

IIS 解析漏洞

  • test.asp/任意文件名 | test.asp;任意文件名 | 任意文件名/任意文件名.php

IIS6.0 在解析 asp 格式的時候有兩個解析漏洞.

  1. 一個是如果目錄名包含".asp 、.asa、.cer"字符串,那麼這個目錄下所有的文件都會按照 asp 去解析。eg: “test.asp/1.jpg”
  2. 另一個是隻要文件名中含有".asp;、.asa;、.cer;會優先按 asp 來解析
    eg:
    “1.asp;.jpg”

IIS7.0/7.5是對php解析時有一個類似於Nginx的解析漏洞, 對任意文件名只要在URL後面追加上字符串"/任意文件名.php"就會按照 php 的方式去解析
eg:http://www.target.com/upload/1.jpg/1.php”

  • IIS6.0 (Win2003 SP2 + IIS6.0) [Success]
  • IIS7.0 (Win2008 R1 + IIS7.0) [Success]
  • IIS7.5 (Win2008 R2 + IIS7.5) [Success]

Nginx 解析漏洞
任意文件名/任意文件名.php | 任意文件名%00.php

目前 Nginx 主要有這兩種漏洞:

  • 一個是對任意文件名,在後面添加/任意文件名.php的解析漏洞,比如原本文件名是 test.jpg,可以添加爲 test.jpg/x.php 進行解析攻擊。
    eg:http://www.target.com/upload/1.jpg/1.php”

  • 一種是對低版本的 Nginx 可以在任意文件名後面添加%00.php進行解析攻擊。
    • Nginx 0.5.*
    • Nginx 0.6.*
    • Nginx 0.7 <= 0.7.65
    • Nginx 0.8 <= 0.8.37
    • 以上Nginx容器器的版本下,上傳⼀一個在waf白名單之內擴展名的⽂文件1.jpg,然後以1.jpg%00.php進行請求。
    • Nginx 0.8.41 – 1.5.6:
    • 以上Nginx容器器的版本下,上傳⼀一個在waf白名單之內擴展名的⽂文1.jpg,然後以1.jpg%20%00.php進行請求

總結

輕量級的檢測繞過攻擊

  • 繞過javascript對後綴名的檢測
  • 繞過服務端對http requst包MIME類型的檢測
  • 繞過文件內容幻術頭的檢測

路徑/拓展名檢繞過

1. 黑名單繞過

  • 文件名大小寫繞過
  • 名單列表繞過
  • 特殊文件名繞過
  • 0x00截斷繞過
  • .htaccess文件攻擊
  • Apache解析漏洞
  • IIS解析漏洞
  • Nginx解析漏洞

2. 白名單繞過

  • 文件名後綴0x00截斷繞過
  • PHP文件包含漏洞
  • IIS解析漏洞
  • Nginx解析漏洞
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章