雙寫繞過正則
直接傳個 php 文件上去會被過濾掉。
將這個php文件修改后綴名為 jpg 上傳,能上傳說明前端有文件過濾功能。
抓包修改文件后綴為 php。
但是文件傳輸成功后,系統給出的路徑沒有“php”后綴,用蟻劍連接也連不上,說明此處后端有正則表達式替換非法文件后綴。
使用雙寫后綴繞過正則表達式,雙寫后的后綴名為“pphphp”,正則表達式匹配時會將中間的“php”刪除掉,閉合剩下的字符串構成“php”后綴。根據網頁回顯的文件路徑來看,雙寫成功繞過正則替換。
使用蟻劍連接成功。
抓包修改后綴繞過前端
先傳個正常的文件看看,可以看到文件上傳后原本的文件名被改成了一個 hash 值。
但感覺這沒啥卵用啊,上傳一句話木馬,直接改后綴名為 jpg,通過前端的過濾后抓包把文件后綴改為 php,上傳成功了。
使用蟻劍連接成功。
大小寫繞過黑名單
先傳個正常的文件看看,可以看到文件上傳后原本的文件名被改成了一個 hash 值。
但是這次上傳一句話木馬,直接改后綴名為 jpg,通過前端的過濾后抓包把文件后綴改為 php,上傳失敗了,說明后端也有驗證。
由於此處提示的是 php 文件是不合法的,並不是提示我們哪些文件是合法的,所以判斷這里是黑名單過濾。
嘗試其他文件后綴例如“php2”、“php3”、“php5”等都被過濾了,所以嘗試大小寫繞過,修改后綴名為“Php”,上傳成功。
說明后端沒有統一轉換成大寫或者小寫再做檢驗,使用蟻劍連接成功。
ASP 截斷繞過白名單
先傳個正常的文件看看,發現此處的后端是 asp。
asp 的話我們傳輸的就是 asp 的一句話木馬,文件后綴是“.asp”,但是網頁回顯傳的文件不合法。
<%eval request("flag")%>
使用 asp 截斷來繞過后端的過濾,在遇到 NULL(\x00) 字符時,處理函數會把該字符當做結束標記,這就可以在遍歷結尾處去除不想要的字符。
此處介紹如何使用 Burp 進行截斷,“%00”不能直接以字符的形式寫出來,我們可以在想要放置截斷的地方寫個“+”號。
然后切換到 Hex 以十六進制查看報文,將加號所在的地方由“2b”改為“00”。
當傳輸的文件名是“asp.asp%00.jpg ”,被 asp 解析保存之后就會變成 a.asp,后面的 .jpg 就會被 %00 截斷了。
上傳成功,使用蟻劍連接,記得要把連接類型改為“ASP”。
PHP 截斷繞過白名單
先傳個正常的文件,上傳成功。
上傳一句話木馬,直接改后綴名為 jpg,通過前端的過濾后抓包把文件后綴改為php,上傳失敗了,說明后端也有驗證。
提示的是 php 文件是不合法的,同時提示我們哪些文件是合法的,所以判斷這里是白名單過濾。
此處用到的是 PHP 截斷漏洞,在遇到 NULL(\x00) 字符時,處理函數會把該字符當做結束標記,這就可以在遍歷結尾處去除不想要的字符。
在目錄設置的截斷,目錄為:“/uploading/345.php%00”,傳輸的文件為345.jpg。上傳成功后顯示文件保存的目錄是“/uploading/345.php%00345.jpg”,由於有截斷漏洞所以實際上是“/uploading/345.php”,這樣就成功讓腳本以 PHP 文件被解析。
使用蟻劍連接成功,可以看到由於截斷漏洞后面的“345.jpg”沒有作為文件的命名。
不過 PHP 的截斷漏洞在較新的版本早已被修復了,所以目前的環境下很少能利用它。
IIS6.0 目錄路徑檢測解析繞過
直接傳個 php 文件,前端就提示我上傳的文件不合法。
抓包修改后綴名為 php,后端提示傳輸的文件不是圖片也不能成功,說明后端有過濾功能。
將一句話木馬文件的后綴名直接改為“jpg”,也上次失敗,后端提示傳的不是圖片,所以后端具有根據內容檢查文件類型的功能。
因此此處上傳正常的圖片,或者上傳圖片馬才能成功,“123.png”是圖片馬。
此處利用的是 IIS6.0 站上的目錄路徑檢測解析繞過上傳漏洞,當我們使用的服務器都是 Windows2003,並且使用的服務為 IIS6.0 時,就可能存在。
設置文件路徑名為“uploading/234.php;”,文件名為“234.png”,由於 IIS 服務器會從頭部查找查找"."號,獲得“uploading/234.php;234.png”。接着查找到";",有則內存截斷,所以這個請求會當做“uploading/234.php”進行解析。通過這個方法,我們就可以將圖片馬以“php”為后綴保存在服務器上。
使用菜刀連接成功。
Nginx CVE-2013-4547 漏洞
和上一個進行的測試差不多,其中 123.png 是圖片馬。
由於此處的服務器是,所以可以利用 Nginx 的 CVE-2013-4547(文件名邏輯漏洞),影響版本是 Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7。該漏洞利用了 Nginx 錯誤的解析了 URL 地址,導致可以繞過服務端限制,從而解析 PHP 文件,造成命令執行的危害。
根據 nginx.conf 文件中 location 中的定義,以 .php 結尾的文件都解析為php。若我們訪問的文件名為“123.png/123.php”,該文件名以 .php 結尾可以被 FastCGI 接收,FastCGI 在讀取文件名時被 00 截斷,導致讀取的圖片馬以 php 文件的形式被解析。
所以蟻劍連接時在圖片馬的目錄后面加個“/123.php”,即可連接成功。
Apache 服務器上傳 .htaccess 文件
按照常規進行簡單的測試,此處提示的是 php 文件是不合法的,同時提示我們哪些文件是合法的,所以判斷這里是白名單過濾。
“.htaccess”文件或者稱為分布式配置文件,它是 Apache 服務器中的配置文件,提供了針對每個目錄設置不同的配置的方法。有些服務器在上傳認證時沒有攔截.htaccess文件上傳,就會造成惡意用戶利用上傳 .htaccess 文件解析漏洞,來繞過驗證進行上傳WEBShell,從而達到控制網站服務器的目的。
首先我們編寫一個 .htaccess 文件,打開記事本編寫代碼,然以文件名“.htaccess”進行保存。
AddType application/x-httpd-php .png
將其進行上傳,因為 .htaccess 是 apache 服務器中的一個配置文件,不在上傳的文件的黑名單之內,所以 .htaccess 文件是可以上傳成功。
接着我們再上傳圖片馬。
由於 .htaccess 文件上傳之后就生效了,此時所有的 png 文件都會以 php 文件的形式被解析,使用蟻劍連接成功。
雙文件上傳
打開網頁 F12 查看源碼,發現有一個隱藏的 Input 標簽。
此處可以使用雙文件上傳,意思是通過上傳兩個或多個文件去突破。利用方式是在存在雙文件上傳漏洞的頁面中,構造另一個文件提交的 html 標簽,然后第一個上傳文件是符合條件的(.jpg、.png、.gif 等),第二個上傳文件是一句話木馬或者 webshell。
上傳點支持多文件上傳,但是卻只對第一個文件做了過濾,所以上傳只對第一個文件后綴名進行檢測,對第二個文件不進行檢測直接上傳到服務器。這樣就可以突破上傳限制,成功上傳木馬到服務器。
將這個標簽修改為文件上傳的標簽,然后上傳第二個文件。
提交文件,2個文件都上傳成功。
使用蟻劍連接成功。
這里也可以使用 ASP 截斷的方法可以上傳成功。