目錄遍歷漏洞
文章來源:H3C攻防團隊
一、什麼是目錄遍歷漏洞
目錄遍歷漏洞在國內外有許多不同的叫法,也可以叫做信息泄露漏洞、非授權文件包含漏洞等。目錄遍歷是針對Windows IIS和Apache的一種常見攻擊方法,它可能讓攻擊者訪問受限制的目錄,通過執行cmd.exe /c命令來提取目錄信息,或者在Web伺服器的根目錄以外執行命令。
目錄遍歷漏洞可能存在於Web伺服器軟體本身,也可能存在於Web應用程序之中。目錄遍歷攻擊比較容易掌握,要執行一個目錄遍歷攻擊,攻擊者所需要的只是一個web瀏覽器,並且掌握一些關於系統的預設文件和目錄所存在的位置的知識即可。
二、目錄遍歷漏洞原理
目錄遍歷漏洞原理比較簡單,就是程序在實現上沒有充分過濾用戶輸入的../之類的目錄跳轉符,導致惡意用戶可以通過提交目錄跳轉來遍歷伺服器上的任意文件。這裡的目錄跳轉符可以是../,也可是../的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所示。
圖1 WeBid目錄遍歷漏洞問題代碼
分析圖1代碼可以發現,/WeBid/loader.php頁面沒有對用戶提交的js參數的文件路徑進行過濾,攻擊者可通過目錄跳轉字元「../」進行目錄遍歷攻擊。雖然程序將讀取的文件類型限制為「js」和「css」(此處程序雖然支持php文件類型,但是結合上下文可以發現程序通過check_file函數對php文件類型的文件路徑和名稱都做了嚴格的限制),但是由於PHP 5.3.4之前的版本中存在空字元截斷漏洞,同時程序也未對截斷符「%00」進行過濾,攻擊者可藉助截斷符讀取任意類型文件。我們分三步來展示非法讀取文件。
1、訪問敏感文件
敏感文件列表 http://wiki.wooyun.org/pentest:filepath
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、繞過系統過濾
為繞過文件類型白名單過濾,可以藉助「%00」截斷符再進行嘗試,這裡使用web調試工具Fiddler進行截斷。空字元截斷是一個比較經典的攻擊手法,文件上傳、下載、讀取等操作都可能利用。運行Fiddler對所有HTTP請求進行監視,同時開啟Fiddler的斷點功能,再次發送前面的http請求,這時由於斷點功能該請求雖然已經生成,但是尚未發送給伺服器,在Fiddler里將本次請求的URL里的文件名修改為:SchedLgU.Txt%00.js,如圖3右上角紅框處所示。
3、執行惡意請求
點擊圖3中的「Run to Completion」綠色按鈕將構造好的惡意請求發送給伺服器,此時抓包可以發現向伺服器請求的文件是SchedLgU.Txt%00.js(如圖4紅框處所示)。當伺服器收到請求後,程序會提取%00後面的js字元串進行文件類型過濾,惡意請求順利騙過程序檢測。當程序打開../../../../../WINDOWS/SchedLgU.Txt%00.js文件時,由於%00具有截斷功能,實際上打開的是WINDOWS目錄下的SchedLgU.Txt文件,從圖5中我們可以看出該日誌文件被成功輸出,攻擊成功。
四、目錄遍歷漏洞防禦
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伺服器並主動查找該漏洞,同時配合專業的安全設備進行防禦可以大大提升伺服器的安全性。
推薦閱讀:
※千年蟲之後最大危機,Intel晶元漏洞這隻黑天鵝背後福禍難料
※F5設備中存在一個Ticketbleed漏洞 可被遠程攻擊者利用
※ADV170014 NTLM SSO:利用指南
※讓我們一起來消滅CSRF跨站請求偽造(上)
TAG:安全漏洞 |