前言
當一個web
應用對上傳文件的后綴名等限制嚴格,難以上傳類似于PHP
這類可動態執行腳本的時候,可以考慮考慮比對一下中間件的版本號和嘗試一下是否存在解析漏洞這個問題。
常見中間件的解析漏洞
IIS5.x-6.x解析漏洞
目前使用IIS5.x-6.x版本的服務器都是比較古老的網站,而且此處的解析漏洞只能解析asp
而不能解析aspx
。
其原理在于,服務器默認不解析;
后面的內容,理所應當的可以想到利用方式。
上傳一個 shell.asp;.jpg
訪問路徑
www.zhhhy.com/xx.asp;.jpg
在6.x
版本中還可以使用目錄解析方式,原理是IIS
會將.asp目錄下的文件都解析成asp文件
www.zhhhy.com/a.asp/shell.jpg
其中,shell.jpg
包含著我們的一句話內容。
值得一提的是,還可以IIS
還可以解析.asa .cer ,cdx
這類文件類型。在測試時,不妨多試試,沒準有意外驚喜。
PHP-CGI解析漏洞
由于PHP-CGI
中的一個配置項cgi.fix_pathinfo=1
默認是開啟的,這導致當某個文件不存在時,會向前解析
www.zhhhy.com/shell.jpg/shell.php
當我們訪問shell.php
并不存在時,則會將shell.jpg
當成php
腳本執行。
而正因這個特性,在IIS7.0,IIS 7.5
和Nginx
都存在解析漏洞。這本身并不是中間件產生的問題,而屬于用戶配置不當產生的問題,因此對于版本號要求不是那么大,測試時依舊多試試。
Apache解析漏洞
Apache
解析漏洞有兩種方式。第一種未知后綴導致的,這是由于人為的配置不當,但凡是人為配置的問題,都和版本號無關。當
上傳shell.php.zhhhy文件
訪問 www.zhhhy.com/shell.php.zhhhy
由于Apache
并不認識.zhhhy
是什么文件,于是向左再取一個后綴,于是就當成了php
文件執行了。
第二種則是特殊符號(CVE-2017-15715)的助攻。影響版本在2.4.0
到2.4.29
即可。在上傳文件的時,在文件名以十六進制的方式加入一個換行符%0a(0x0a)
。P神對原理進行了簡單解釋P神對原理進行了簡單解釋
Nginx解析漏洞
上文提到在PHP-CGI
的默認產生會導致Nginx
存在一個解析漏洞,這本身并不是Nginx
的鍋。而在< 8.03
的版本中,如果上傳文件名如shell.jpg%00.php
,則會解析成PHP
文件。
防御
網上已有很多防御方法,此處不再摘抄。自己總結了一下,配置問題則當然檢查配置。而如何配置是正確,那則要有一定的積累,這就是所謂的安全基線。如果是系統本身的問題,則該升級則升級,該打補丁則打補丁。有時候會遇到說不能升級系統,希望靠waf
設備在流量層做攔截,那么就是要配置規則,因為沒有做過實際開發和運維,不知道直接攔截多后綴的請求是否得當,畢竟解析漏洞多數都有多后綴的特征。
閑話
解析漏洞對于使用的中間件和中間件的版本號都有一定要求,也就證明了滲透測試第一步信息收集的重要性。當然也由于人為配置問題的因素存在,并不意味著版本號是不存在漏洞的就不會出現問題。總之,多試試,不會有啥毛病的。