• 產品與解決方案
  • 行業解決方案
  • 服務
  • 支持
  • 合作夥伴
  • 關於我們

目錄遍曆漏洞簡介

【發布時間:2015-03-09】

/H3C攻防團隊

2014322日,烏雲漏洞報告平台爆出國內某著名網站存在漏洞,安全支付日誌可被遍曆下載,該事件在網絡的助推下迅速擴散,讓無數用戶意識到了目錄瀏覽和目錄遍曆漏洞巨大的危害性,目錄遍曆這個古老的漏洞再次成為網絡熱點。本文將詳細闡述目錄遍曆漏洞的原理,結合具體漏洞演示攻擊過程並給出防禦方法。

1      什麼是目錄遍曆漏洞

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

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

2   目錄遍曆漏洞原理

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

在包含動態頁麵的Web應用中,輸入往往是通過GET或是POST的請求方法從瀏覽器獲得,例如:

http://www.test.com/my. jsp?file=abc.html

通過這個URL,瀏覽器向服務器發送了對動態頁麵my.jsp的請求,並且伴有值為abc.htmlfile參數,當請求在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-2938Tomcat處理請求中的編碼時存在漏洞,如果在context.xmlserver.xml中將allowLinking設置為true且連接器配置為URIEncoding=UTF-8的話,則向Tomcat提交惡意請求就可以通過目錄遍曆攻擊讀取服務器上的任意文件。

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

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

3      目錄遍曆攻擊實例

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

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

1 WeBid目錄遍曆漏洞問題代碼

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

3.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,並不在係統允許允許訪問的文件類型的白名單中,所以目標文件內容並沒有被輸出,訪問失敗。

2 直接請求敏感文件失敗

3.2      繞過係統過濾

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

3 借助斷點構造惡意請求

3.3      執行惡意請求

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

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

5 敏感文件被成功輸出

 

4   目錄遍曆漏洞防禦

4.1      係統開發階段的防禦

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

4.2      係統運行階段的防禦

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

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

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

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

4.3      安全設備的防禦

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

5    結束語

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

BOB登陆
官網
聯係我們