解析漏洞主要是一些特殊文件被Apache、IIS、Nginx等Web容器在某種狀況下解釋成腳本文件格式並得以執行而產生的漏洞。php
一個文件名爲 test.x1.x2.x3 的文件,Apache會從x3的位置往x1的位置開始嘗試解析,若是x3不屬於 Apache解析的擴展名,那麼Apache會嘗試去解析x2, 這樣一直往前嘗試,直到遇到一個能解析的擴展名爲止。html
例如:Web應用限制了php等敏感後綴,咱們經過能夠上傳一個文件名爲 test.php.jpg
的文件,訪問時,Apache會由於沒法解析jpg,而向前尋找能夠解析的後綴,這時便找到php,那麼按照php文件進行正常解析,從而使木馬被執行。正則表達式
<FilesMatch ".+\.ph(p[345]?|t|tml)$"> SetHandler application/x-httpd-php </FilesMatch>
".+\.ph(p[345]?|t|tml)$"
該正則表達式匹配的不只僅有php,還有php三、php四、php五、pht和phtml,這些都是Apache和php承認的php程序的文件後綴。若是網站僅對php進行了防禦,那麼咱們能夠改成這些不大常見的後綴,一樣完成解析。服務器
例如:test.php3 、 test.pt 、 test.ptml
app
htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置。經過htaccess文件,能夠幫咱們實現:網頁301重定向、自定義404錯誤頁面、改變文件擴展名、容許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。
啓用.htaccess,須要修改httpd.conf,啓用AllowOverride,並能夠用AllowOverride限制特定命令的使用。
若是在Apache中.htaccess可被執行.且可被上傳.那能夠嘗試在.htaccess中寫入:AddType application/x-httpd-php xxx
,這時上傳.xxx
後綴的文件,就會當成php解析。ide
或者網站
<FilesMatch "test.jpg"> SetHandler application/x-httpd-php </FilesMatch>
當Web應用匹配到名爲 test.jpg 文件時,一樣會當成php解析。ui
目錄名包含.asp .asa .cer
這種字樣,該目錄下全部文件都被當作asp來進行解析
例如:在網站下建立文件夾名字爲.asp、.asa的文件夾,其目錄內的任何擴展名的文件都被IIS當作asp文件來解析並執行。test.asp/test.jpg
spa
服務器默認不解析;後面的內容,所以test.asp;.jpg便被解析成asp文件
例如:test.asp;.jpg
code
IIS6.0 默認的可執行文件除了.asp,還包含這三種:.asa .cdx .cer
例如:test.asa 、 test.cdx 、 test.cer
因爲PHP配置文件中,開啓了 cgi.fix_pathinfo ,與下面Nginx相同。
Nginx默認是以CGI的方式支持PHP解析的,廣泛的作法是在Nginx配置文件中經過正則匹配設置SCRIPT_FILENAME。當訪問www.xxx.com/phpinfo.jpg/1.php這個URL時,$fastcgi_script_name會被設置爲「phpinfo.jpg/1.php」,而後構形成SCRIPT_FILENAME傳遞給PHP CGI,可是PHP爲何會接受這樣的參數,並將phpinfo.jpg做爲PHP文件解析呢?
這就要說到fix_pathinfo這個選項了。若是開啓了這個選項,那麼就會觸發在PHP中的以下邏輯:
PHP會認爲SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,因此就會將phpinfo.jpg做爲PHP文件來解析了。
Nginx的解析漏洞實質上是其實是PHP CGI解析漏洞。
這不是Nginx特有的漏洞,在IIS7.0、IIS7.五、Lighttpd等Web容器中也常常會出現這樣的解析漏洞。
例如:
能夠在後面添加/任意文件名.php 的解析漏洞,好比本來文件名是 test.jpg,能夠添加爲test.jpg/x.php 進行解析攻擊。
還有一種是對低版本的 Nginx 能夠在任意文件名後面添加 %00.php 進行截斷解析攻擊。
例如:test.php%00.jpg
00截斷的兩種具體操做方式:
一、更改文件名爲xxx.php .jpg
,在Burpsuit的Hex選項中將空格對應的20改成00。
二、更改文件名爲xxx.php%00.jpg
,在Burpsuit中將%00
進行右鍵轉換->URL->URL-decode。
用copy命令製做圖片木馬:copy 1.jpg/b+1.php/a 2.php
(/b表示二進制文件,/a表示ASCII碼文件)