天氣逐漸變涼,但滲透測試的熱情溫度感覺不到?jīng)?因?yàn)橛形覀兊拇嬖诠_分享滲透實(shí)戰(zhàn)經(jīng)驗(yàn)過程,才會(huì)讓這個(gè)秋冬變得不再冷,近期有反映在各個(gè)環(huán)境下的目錄解析漏洞的檢測方法,那么本節(jié)由我們Sine安全的高級(jí)滲透架構(gòu)師來詳細(xì)的講解平常用到的web環(huán)境檢測點(diǎn)和網(wǎng)站漏洞防護(hù)辦法。
3.14.1. IIS
3.14.1.1. IIS 6.0
后綴解析 /xx.asp;.jpg
目錄解析 /xx.asp/xx.jpg (xx.asp目錄下任意解析)
默認(rèn)解析 xx.asa xx.cer xx.cdx
PROPFIND 棧溢出漏洞
PUT漏洞 WebDAV任意文件上傳
3.14.1.2. IIS 7.0-7.5 / Nginx <= 0.8.37
在Fast-CGI開啟狀態(tài)下,在文件路徑后加上 /xx.php ,則 xx.jpg/xx.php 會(huì)被解析為php文件
3.14.1.3. 其他
在支持NTFS 8.3文件格式時(shí),可利用短文件名猜解目錄文件
3.14.2. Nginx
3.14.2.1. Fast-CGI關(guān)閉
在Fast-CGI關(guān)閉的情況下, Nginx 仍然存在解析漏洞:在文件路徑(xx.jpg)后面加上 %00.php , 即 xx.jpg%00.php 會(huì)被當(dāng)做 php 文件來解析
3.14.2.2. Fast-CGI開啟
在Fast-CGI開啟狀態(tài)下,在文件路徑后加上 /xx.php ,則 xx.jpg/xx.php 會(huì)被解析為php文件
3.14.2.3. CVE-2013-4547
"a.jpg\x20\x00.php"
3.14.3. Apache
3.14.3.1. 后綴解析
test.php.x1.x2.x3 ( x1,x2,x3 為沒有在 mime.types 文件中定義的文件類型)。Apache 將從右往左開始判斷后綴, 若x3為非可識(shí)別后綴,則判斷x2,直到找到可識(shí)別后綴為止,然后對(duì)可識(shí)別后綴進(jìn)行解析
3.14.3.2. .htaccess
當(dāng)AllowOverride被啟用時(shí),上傳啟用解析規(guī)則的.htaccess
3.14.3.3. CVE-2017-15715
%0A繞過上傳黑名單
3.14.4. lighttpd
xx.jpg/xx.php
3.14.5. Windows
Windows不允許空格和點(diǎn)以及一些特殊字符作為結(jié)尾,創(chuàng)建這樣的文件會(huì)自動(dòng)取出,所以可以使用 xx.php[空格] , xx.php., xx.php/, xx.php::$DATA 可以上傳腳本文件
3.15. Web Cache欺騙攻擊
3.15.1. 簡介
網(wǎng)站通常都會(huì)通過如CDN、負(fù)載均衡器、或者反向代理來實(shí)現(xiàn)Web緩存功能。通過緩存頻繁訪問的文件,降低服務(wù)器響應(yīng)延遲。
例如,網(wǎng)站 htttp://域名 配置了反向代理。對(duì)于那些包含用戶個(gè)人信息的頁面,如 http://域名/home.php ,由于每個(gè)用戶返回的內(nèi)容有所不同,因此這類頁面通常是動(dòng)態(tài)生成,并不會(huì)在緩存服務(wù)器中進(jìn)行緩存。通常緩存的主要是可公開訪問的靜態(tài)文件,如css文件、js文件、txt文件、圖片等等。此外,很多最佳實(shí)踐類的文章也建議,對(duì)于那些能公開訪問的靜態(tài)文件進(jìn)行緩存,并且忽略HTTP緩存頭。
Web cache攻擊類似于RPO相對(duì)路徑重寫攻擊,都依賴于瀏覽器與服務(wù)器對(duì)URL的解析方式。當(dāng)訪問不存在的URL時(shí),如 http://域名/home.php/non-existent.css ,瀏覽器發(fā)送get請求,依賴于使用的技術(shù)與配置,服務(wù)器返回了頁面 http://域名/home.php 的內(nèi)容,同時(shí)URL地址仍然是 http://域名/home.php/non-existent.css,http頭的內(nèi)容也與直接訪問 http://域名/home.php 相同,cacheing header、content-type(此處為text/html)也相同。
3.15.2. 漏洞成因
當(dāng)代理服務(wù)器設(shè)置為緩存靜態(tài)文件并忽略這類文件的caching header時(shí),訪問
http://域名/home.php/no-existent.css 時(shí),會(huì)發(fā)生什么呢?整個(gè)響應(yīng)流程如下:
瀏覽器請求 http://域名/home.php/no-existent.css ;
服務(wù)器返回 http://域名/home.php 的內(nèi)容(通常來說不會(huì)緩存該頁面);
響應(yīng)經(jīng)過代理服務(wù)器;
代理識(shí)別該文件有css后綴;
在緩存目錄下,代理服務(wù)器創(chuàng)建目錄 home.php ,將返回的內(nèi)容作為 non-existent.css 保存。
3.15.3. 漏洞利用
攻擊者欺騙用戶訪問 logo.png?www.myhack58.com ,導(dǎo)致含有用戶個(gè)人信息的頁面被緩存,從而能被公開訪問到。更嚴(yán)重的情況下,如果返回的內(nèi)容包含session標(biāo)識(shí)、安全問題的答案,或者csrf token。這樣攻擊者能接著獲得這些信息,因?yàn)橥ǔ6源蟛糠志W(wǎng)站靜態(tài)資源都是公開可訪問的。
3.15.4. 漏洞存在的條件
漏洞要存在,至少需要滿足下面兩個(gè)條件:
web cache功能根據(jù)擴(kuò)展進(jìn)行保存,并忽略caching header;
當(dāng)訪問如 http://域名/home.php/non-existent.css 不存在的頁面,會(huì)返回 home.php 的內(nèi)容。
3.15.5. 漏洞防御
防御措施主要包括3點(diǎn):
設(shè)置緩存機(jī)制,僅僅緩存http caching header允許的文件,這能從根本上杜絕該問題;
如果緩存組件提供選項(xiàng),設(shè)置為根據(jù)content-type進(jìn)行緩存;
訪問 http://域名/home.php/non-existent.css 這類不存在頁面,不返回 home.php 的內(nèi)容,而返回404或者302。
對(duì)圖片上傳目錄進(jìn)行腳本權(quán)限限制,對(duì)上傳擴(kuò)展這里做過濾判斷。
如果緩存組件提供選項(xiàng),設(shè)置為根據(jù)content-type進(jìn)行緩存;
對(duì)get url的地址進(jìn)行waf的安全過濾,如果對(duì)這些安全防護(hù)部署以及滲透測試不熟悉的話,建議可以像專業(yè)的網(wǎng)站安全公司來處理解決,國內(nèi)做的比較好的推薦Sinesafe,啟明星辰,綠盟,等等專業(yè)的。
我們專注高端建站,小程序開發(fā)、軟件系統(tǒng)定制開發(fā)、BUG修復(fù)、物聯(lián)網(wǎng)開發(fā)、各類API接口對(duì)接開發(fā)等。十余年開發(fā)經(jīng)驗(yàn),每一個(gè)項(xiàng)目承諾做到滿意為止,多一次對(duì)比,一定讓您多一份收獲!