定義
目錄遍歷漏洞是由於網站存在配置缺陷,導致網站目錄可以被任意瀏覽,這會導致網站很多隱私文件與目錄泄露,比如數據庫備份文件、配置文件等,攻擊者利用該信息可以為進一步入侵網站做准備。目錄遍歷是針對windows和Apache的一種常見攻擊方法,它能讓攻擊者訪問受限制的目錄,通過執行cmd.exe /c命令來提取目錄信息,或在Web服務器的根目錄以外執行命令。
目錄遍歷漏洞的探測:可以利用web漏洞掃描器掃描web應用進行檢測,也可以通過搜索,網站標題包含“index of”關鍵詞的網站進行訪問。
目錄遍歷漏洞的危害:攻擊者通過訪問網站某一目錄時,該目錄沒有默認首頁文件或沒有正確設置默認首頁文件,將會把整個目錄結構列出來,將網站結構完全暴露給攻擊者;攻擊者可能通過瀏覽目錄結構,訪問到某些隱秘文件(如PHPINFO文件、服務器探針文件、網站管理員后台訪問地址、數據庫連接文件等)。
目錄遍歷漏洞原理
許多的Web應用程序一般會有對服務器的文件讀取查看的功能,大多會用到提交的參數來指明文件名
形如:http://www.nuanyue.com/getfile=image.jgp
當服務器處理傳送過來的image.jpg文件名后,Web應用程序即會自動添加完整路徑,形如“d://site/images/image.jpg”,將讀取的內容返回給訪問者。
初看,在只是文件交互的一種簡單的過程,但是由於文件名可以任意更改而服務器支持“~/”,“../”等特殊符號的目錄回溯,從而使攻擊者越權訪問或者覆蓋敏感數據,如網站的配置文件、系統的核心文件,這樣的缺陷被命名為路徑遍歷漏洞。在檢查一些常規的Web應用程序時,也常常有發現,只是相對隱蔽而已。
發現路徑遍歷漏洞
路徑遍歷漏洞的發現,主要是對Web應用程序的文件讀取交互的功能塊,進行檢測,面對這樣的讀取方式:
“http://www.nuanyue.com/test/downfile.jsp?filename=fan.pdf”
我們可以使用 “../”來作試探,
比如提交Url:“getfile=/fan/fan/*53.pdf”,而系統在解析
是“d://site/test/pdf/fan/fan/../../*53.pdf"
通過“../”跳轉目錄“/fan”,即“d://site/test/pdf/*53.pdf”,
返回了讀取文件的正常的頁面。
路徑遍歷漏洞隱藏一般在文件讀取或者展示圖片功能塊這樣的通過參數提交上來的文件名,從這可以看出來過濾交互數據是完全有必要的。惡意攻擊者當然后會利用對文件的讀取權限進行跨越目錄訪問,
比如訪問一些受控制的文件,“../../../../../../../etc/passwd“或
者”../../../../boot.ini“,當然現在部分網站都有類似Waf的防護設備,只要在數據中會有/etc /boot.ini等文件名出直接進行攔截。
1、加密參數傳遞的數據
在WEB應用程序對文件名進行加密之后再提交,比如:“downfile.jsp?filename=ZmfugsbS”,在參數filename用的是Base64加密,而攻擊者要想繞過,只需簡單的將名加密后再附加提交即可!所以說,采用一些有規律或者輕量能識別的加密方式,也是存在風險的。
2、編碼繞過
嘗試使用不同的編碼轉換進行過濾性的繞過,比如url編碼,通過參參數進行url編碼提交,"downfile.jsp?filename=%66%61%6E%2E%70%64%66"來繞過。
URL編碼繞過需要編碼兩次,第一次是瀏覽器傳到后端自動解碼,第二次是后端使用函數進行解碼。
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,告訴服務器我是從哪個頁面鏈接來的。
如果應用程序要求用戶提供的文件名必須以預期的基本文件夾開頭,例如/var/www/images,則可能包含所需的基本文件夾,后跟合適的遍歷序列。例如:
filename=/var/www/images/../../../etc/passwd
還有一種目錄遍歷,那就是因為這個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
防范遍歷路徑漏洞
在防范遍歷路徑漏洞的方法中,最有效的是權限的控制,謹慎的處理向文件系統API傳遞過來的參數路徑。主要是因為大多數的目錄或者文件權限均沒有得到合理的配置,而Web應用程序對文件的讀取大多依賴於系統本身的API,在參數傳遞的過程,如果沒有得嚴謹的控制,則會出現越權現象的出現。在這種情況下,Web應用程序可以采取以下防御方法,最好是組合使用。
(1) 數據凈化,對網站用戶提交過來的文件名進行硬編碼或者統一編碼,對文件后綴進行白名單控制,對包含了惡意的符號或者空字節進行拒絕。
(2) Web應用程序可以使用chrooted環境訪問包含被訪問文件的目錄,或者使用絕對路徑+參數來控制訪問目錄,使其即使是越權或者跨越目錄也是在指定的目錄下。
總結
路徑遍歷漏洞允許惡意攻擊者突破Web應用程序的安全控制,直接訪問攻擊者想要的敏感數據 ,包括配置文件、日志、源代碼等,配合其它漏洞的綜合利用,攻擊者可以輕易的獲取更高的權限,並且這樣的漏洞在發掘上也是很容易的,只要對Web應用程序的讀寫功能塊直接手工檢測,通過返回的頁面內容來判斷,是很直觀的,利用起來也相對簡單。
所有的繞過情況都是對路徑過濾不嚴導致的,所以可以采取以下兩中方法來緩解這個漏洞:1、設置白名單,僅允許路徑中包含允許的片段或數據類型。2、在經過白名單過濾以后再與基線路徑拼接,讓路徑結構規范化。