淺談“目錄瀏覽漏洞與目錄遍歷漏洞”

一:漏洞名稱:

目錄瀏覽漏洞

描述:

目錄瀏覽漏洞屬於目錄遍歷漏洞的一種,目錄瀏覽漏洞是由於網站存在配置缺陷,存在目錄可瀏覽漏洞,這會導致網站很多隱私文件與目錄泄露,比如數據庫備份文件、配置文件等,攻擊者利用該信息可以更容易得到網站權限,導致網站被黑。 風險:攻擊者通過訪問網站某一目錄時,該目錄沒有默認首頁文件或沒有正確設置默認首頁文件,將會把整個目錄結構列出來,將網站結構完全暴露給攻擊者; 攻擊者可能通過瀏覽目錄結構,訪問到某些隱祕文件(如PHPINFO文件、服務器探針文件、網站管理員後臺訪問地址、數據庫連接文件等)。

檢測條件:

Web業務運行正常

已知目標網站的域名或IP地址

檢測方法:

可以利用web漏洞掃描器掃描web應用進行檢測,也可通過搜索,網站標題包含“index of”關鍵詞的網站進行訪問。

直接訪問Web應用存在的一些目錄,如果返回文件列表信息,證明存在此漏洞。

漏洞修復:

目前存在該漏洞的常見中間件爲apache和IIS,一下列出其相關的修復方式:

1.IIS中關閉目錄瀏覽功能:在IIS的網站屬性中,勾去“目錄瀏覽”選項,重啓IIS。

2.Apache中關閉目錄瀏覽功能:打開Apache配置文件httpd.conf,查找“Options Indexes FollowSymLinks”,修改爲“ Options -Indexes”(減號表示取消,保存退出,重啓Apache。

3.Nginx中默認不會開啓目錄瀏覽功能,若您發現當前已開啓該功能,可以編輯nginx.conf文件,刪除如下兩行:autoindex on;autoindex_exact_size on;重啓Nginx。

 

二:漏洞名稱

目錄遍歷漏洞

描述:

目錄遍歷漏洞在國內外有許多不同的叫法,也可以叫做信息泄露漏洞、非授權文件包含漏洞等。目錄遍歷是針對Windows IIS和Apache的一種常見攻擊方法,它可能讓攻擊者訪問受限制的目錄,通過執行cmd.exe /c命令來提取目錄信息,或者在Web服務器的根目錄以外執行命令。

目錄遍歷漏洞可能存在於Web服務器軟件本身,也可能存在於Web應用程序之中。目錄遍歷攻擊比較容易掌握,要執行一個目錄遍歷攻擊,攻擊者所需要的只是一個web瀏覽器,並且掌握一些關於系統的缺省文件和目錄所存在的位置的知識即可。

原理:http://www.h3c.com/cn/d_201407/833181_30008_0.htm

目錄遍歷漏洞原理比較簡單,就是程序在實現上沒有充分過濾用戶輸入的../之類的目錄跳轉符,導致惡意用戶可以通過提交目錄跳轉來遍歷服務器上的任意文件。這裏的目錄跳轉符可以是../,也可是../的ASCII編碼或者是unicode編碼等。

在包含動態頁面的Web應用中,輸入往往是通過GET或是POST的請求方法從瀏覽器獲得,例如:http://www.test.com/my. jsp?file=abc.html

通過這個URL,瀏覽器向服務器發送了對動態頁面my.jsp的請求,並且伴有值爲abc.html的file參數,當請求在Web服務器端執行時,my.jsp會從服務器的文件系統中取得abc.html文件,並將其返回給客戶端的瀏覽器,那麼攻擊者就可以假定my.jsp能夠從文件系統中獲取文件並構造如下的惡意URL:

http://www.test.com/my.jsp?file=../../Windows/system.ini

當服務器處理該請求時,將從文件系統中獲取system.ini文件並返回給用戶。在這裏,攻擊者需要去猜測需要往上回溯多少層才能找到Windows目錄,但顯而易見,這其實並不困難,經過幾次的嘗試後總會找到的。此時攻擊者通過改變目錄跳轉符的數量和請求的文件名稱即可讀取其他文件。

如果上面惡意請求被檢測到並被阻斷,我們可以嘗試給URL中的目錄跳轉符裏的點或者斜槓進行ASCII編碼,這樣可能能夠繞過檢測成功執行,如示:

http://www.test.com/my.jsp?file=%2e./..%2fWindows/system.ini

也可以利用web服務器本身的漏洞進行攻擊,如利用Apache Tomcat UTF-8目錄遍歷漏洞。漏洞CVE編號爲CVE-2008-2938,Tomcat處理請求中的編碼時存在漏洞,如果在context.xml或server.xml中將allowLinking設置爲true且連接器配置爲URIEncoding=UTF-8的話,則向Tomcat提交惡意請求就可以通過目錄遍歷攻擊讀取服務器上的任意文件。

將目錄跳轉符裏的點編碼爲%c0%ae,如果服務器使用的受該漏洞影響的Tomcat版本,則可能攻擊成功:

http://www.target.com/%c0%ae%c0%ae/%c0%ae%c0%ae/foo/bar

攻擊實例:

目錄遍歷攻擊比較容易實施,下面以WeBid目錄遍歷漏洞(漏洞exploit-db編號爲22829)爲例,介紹目錄遍歷漏洞攻擊的具體實現。

WeBid是國外一款方便使用和可定製的開源拍賣平臺。WeBid 1.0.4和1.0.5版本在實現上存在一個目錄遍歷漏洞,WeBid不正確的過濾用戶提交的請求,遠程攻擊者可以利用該漏洞進行目錄遍歷攻擊,成功利用可以WEB權限查看包含敏感信息的任意文件。問題代碼如圖1所示。

æ¼æ´ä»£ç _conew1

                                                                            圖1 WeBid目錄遍歷漏洞問題代碼

分析圖1代碼可以發現,/WeBid/loader.php頁面沒有對用戶提交的js參數的文件路徑進行過濾,攻擊者可通過目錄跳轉字符“../”進行目錄遍歷攻擊。雖然程序將讀取的文件類型限制爲“js”和“css”(此處程序雖然支持php文件類型,但是結合上下文可以發現程序通過check_file函數對php文件類型的文件路徑和名稱都做了嚴格的限制),但是由於PHP 5.3.4之前的版本中存在空字符截斷漏洞,同時程序也未對截斷符“%00”進行過濾,攻擊者可藉助截斷符讀取任意類型文件。我們分三步來展示非法讀取文件。

1、訪問敏感文件

WeBid系統loader.php頁面正常請求是形如http://example.com/WeBid/loader.php?js=abc.js,此時系統會輸出目標js文件的內容。攻擊者可藉助目錄跳轉字符非法訪問文件,如給js參數賦下面的值嘗試訪問SchedLgU.txt文件:js=../../../../../WINDOWS/SchedLgU.Txt,即發送HTTP請求:GET /WeBid/loader.php?js=../../../../../WINDOWS/SchedLgU.Txt HTTP/1.1。該請求是請求訪問Windows操作系統的“計劃任務”的“日誌”SchedLgU.Txt文件,該文件位於WINDOWS目錄下,記錄了以往計劃任務的執行情況,以及用戶每次開機啓動Windows系統的信息。我們在測試環境中可以發現該js參數的請求執行結果如圖2所示。由於請求的文件類型爲txt,並不在系統允許允許訪問的文件類型的白名單中,所以目標文件內容並沒有被輸出,訪問失敗。

ç´æ¥è¯·æ±txt_conew1

                                                                             圖2 直接請求敏感文件失敗

2、繞過系統過濾

爲繞過文件類型白名單過濾,可以藉助“%00”截斷符再進行嘗試,這裏使用web調試工具Fiddler進行截斷。空字符截斷是一個比較經典的攻擊手法,文件上傳、下載、讀取等操作都可能利用。運行Fiddler對所有HTTP請求進行監視,同時開啓Fiddler的斷點功能,再次發送前面的http請求,這時由於斷點功能該請求雖然已經生成,但是尚未發送給服務器,在Fiddler裏將本次請求的URL裏的文件名修改爲:SchedLgU.Txt%00.js,如圖3右上角紅框處所示。

ä¸æ­ç¹_conew1

                                                                            圖3 藉助斷點構造惡意請求

3、執行惡意請求

點擊圖3中的“Run to Completion”綠色按鈕將構造好的惡意請求發送給服務器,此時抓包可以發現向服務器請求的文件是SchedLgU.Txt%00.js(如圖4紅框處所示)。當服務器收到請求後,程序會提取%00後面的js字符串進行文件類型過濾,惡意請求順利騙過程序檢測。當程序打開../../../../../WINDOWS/SchedLgU.Txt%00.js文件時,由於%00具有截斷功能,實際上打開的是WINDOWS目錄下的SchedLgU.Txt文件,從圖5中我們可以看出該日誌文件被成功輸出,攻擊成功。

æå_conew1

                                                                        圖4 發送給服務器的惡意數據包

æ»å»æå_conew1

                                                                         圖5 敏感文件被成功輸出

 

目錄遍歷漏洞產生環境

https://www.fujieace.com/penetration-test/directory-traversal-2.html

網站應用提供文件下載,其中文件儲存在服務器中,網站腳本利用代碼獲取此目錄文件將其顯示至網站上,其中如果對代碼沒有進行相關的驗證過濾,將會導致目錄遍歷漏洞。

1、以下是一個簡單的PHP目錄遍歷漏洞示例:

<?php
$dir_path=$_REQUEST['path'];
$filename=scandir($dir_path);
var_dump($filename);
?>

一、目錄遍歷漏洞第一種情況

1、加密參數傳遞的數據

在WEB應用程序對文件名進行加密之後再提交,比如:“downfile.jsp?filename=ZmfugsbS”,在參數filename用的是Base64加密,而攻擊者要想繞過,只需簡單的將名加密後再附加提交即可!所以說,採用一些有規律或者輕量能識別的加密方式,也是存在風險的。

2、編碼繞過

嘗試使用不同的編碼轉換進行過濾性的繞過,比如url編碼,通過參參數進行url編碼提交,"downfile.jsp?filename=%66%61%6E%2E%70%64%66"來繞過。

3、目錄限定繞過

在有些Web應用程序是通過限定目錄權限來分離的。當然這樣的方法不值得可取的,攻擊者可以通過某些特殊的符號“~”來繞過。例如這樣提交“downfile.jps?filename=~/../boot”。能過這樣一個符號,就可以直接跳轉到硬盤目錄下了。

4、繞過文件後綴過濾

一些web應用程序在讀取前,會對提交的文件後綴進行檢測,攻擊者可以在文件名後放一個空字節編碼來繞過這樣的文件類型的檢查。

例如:../../.../../boot.ini%00.jpg,web應用程序使用的Api會允許字符串中包含空字符,當實際獲取文件名時,剛由系統的Api會直接截斷,而解析爲"../../../../boot.ini".

在類似Uninx的系統中也可以使用url編碼的換行符,例如:../../../etc/passwd%0a.jpg,如果文件系統在獲取含有換行符的文件名,會截短爲文件名。也可以嘗試%20,例如:../../../index.jsp%20

5、繞過來路驗證

HTTP Referer:HTTP Referer是header的一部份,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接來的。

 

二、目錄遍歷漏洞第二種情況

還有一種目錄遍歷,那就是因爲這個web服務器的配置不當造成的。

Index of/

我們可以直接利谷歌黑客語法來尋找此形式的目錄遍歷漏洞:

intitle:Index of

例如:

1、IIS“目錄瀏覽”前打勾,就是允許目錄列表顯示。

2、Apache配置文件httpd.con中Options 爲Indexes就是允許目錄列表顯示。

 

注意:雖然說此 Options 值爲 Indexes,但是你去訪問的時候依然不會目錄列表展示,會提示403禁止訪問,這也是phpstudy爲了安全吧!所以說有時候,並不代表你這樣設置就可以以目錄列表的方式去顯示了。

 

Apache設置Opions選項具體中以參考:

http://httpd.apache.org/docs/2.2/mod/core.html#options

目錄遍歷漏洞防禦

1、系統開發階段的防禦

在系統開發階段應充分考慮系統的安全性,對目錄遍歷漏洞來說,需對用戶提交的內容進行嚴格的過濾,這裏主要指過濾目錄跳轉符,字符截斷符,dir命令等。

2、系統運行階段的防禦

系統運維人員需有強烈的安全意識,他們的一舉一動都會影響用戶的個人隱私信息安全。對系統運維人員來說,部署新的業務系統或者安裝新的軟件或應用後應通過web掃描工具積極查找系統是否存在目錄遍歷漏洞,儘可能不要在服務器上安裝與業務不相關的第三方軟件以避免引入目錄遍歷漏洞。除此之外,還應該合理配置web服務器(禁止目錄瀏覽,分配好目錄權限等)並積極關注所使用的各種軟件和應用的版本發佈情況,及時升級新的軟件版本。

不同web服務器禁止目錄瀏覽方法有所不同。對IIS而言,如果不需要可執行的CGI,可以刪除可執行虛擬目錄或直接關閉目錄瀏覽;如果確實需要可執行的虛擬目錄,建議將可執行的虛擬目錄單獨放在一個分區。

對於Apache而言,管理員需要修改配置文件,禁止瀏覽列出目錄和文件列表,如可通過修改conf目錄下的httpd.conf文件來禁止使用目錄索引。以Apache 2.2.25版本爲例,打開httpd.conf文件將“Options Indexes FollowSymLinks”中的“Indexes”刪除,這樣web目錄下的所有目錄都不再生成索引。

爲更好的保護系統安全,實際生產環境和測試開發環境應該隔離。在生產環境中的任何改動,都需要嚴格遵循變更管理流程,做到執行人、執行時間、執行對象和具體改動均記錄在案,並有企業信息安全部門進行事前審覈和事後審計。技術人員一般不要直接調試生產系統,可以在測試環境中調試完成後再更新生產系統,以避免調試過程中開啓某些接口、更改某些配置或者保存某些調試信息造成安全隱患。如果非要在線調試生產系統,而且需要保存調試信息時,應避免將調試信息直接保存到服務器本地,同時調試完成後應第一時間刪除相關調試信息並恢復系統配置。

3、安全設備的防禦

進行目錄遍歷攻擊時,攻擊者基本都會使用目錄跳轉符,同時可能配合使用字符截斷符,dir命令等。對專業的安全設備來說通過檢測特定語法下的目錄跳轉符,字符截斷符,以及與查看目錄相關的命令即可識別各種目錄遍歷攻擊。部署專業的安全設備不僅可以很好的保護業務系統自身的目錄遍歷漏洞,同時還能防禦web服務器和服務器上其他非業務相關的第三方應用漏洞引發的目錄遍歷攻擊。目前華三通信發佈的SecPath IPS系列產品採用特有技術,能夠智能有效的識別各種編碼方式的目錄遍歷攻擊。

結束語

目錄遍歷漏洞雖然是一種非常古老的漏洞,但目前仍在很多系統中被發現。對系統運維人員來說合理配置web服務器並主動查找該漏洞,同時配合專業的安全設備進行防禦可以大大提升服務器的安全性。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章