許多的Web應用程序通常會有對服務器的文件讀取查看的功能,大多會用到提交的參數來指明文件名
形如:http://www.nuanyue.com/getfile=image.jgpweb
當服務器處理傳送過來的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」,
返回了讀取文件的正常的頁面。jsp
路徑遍歷漏洞隱藏通常在文件讀取或者展現圖片功能塊這樣的經過參數提交上來的文件名,從這能夠看出來過濾交互數據是徹底有必要的。惡意攻擊者固然後會利用對文件的讀取權限進行跨越目錄訪問,
好比訪問一些受控制的文件,「../../../../../../../etc/passwd「或
者」../../../../boot.ini「,固然如今部分網站都有相似Waf的防禦設備,只要在數據中會有/etc /boot.ini等文件名出直接進行攔截。網站
遍歷路徑攻擊變異
路徑遍歷漏洞是很常見的,在Web應用程序編寫過程,會有意識的對傳遞過來的參數進行過濾或者直接刪除,存在風險的過濾方式,通常能夠採用以下方式進行突破:
如下是一些繞過的方法,固然在實際運行過程當中,能夠組合使用。編碼
(1) 加密參數傳遞的數據;加密
在Web應用程序對文件名進行加密以後再提交,好比:「downfile.jsp?filename= ZmFuLnBkZg- 「,在參數filename用的是Base64加密,而攻擊者要想繞過,只需簡單的將文件名加密後再附加提交便可。因此說,採用一些有規律或者輕易能識別的加密方式,也是存在風險的。spa
(2) 編碼繞過,日誌
嘗試使用不一樣的編碼轉換進行過濾性的繞過,好比Url編碼,經過對參數進行Url編碼提交,「downfile.jsp?filename= %66%61%6E%2E%70%64%66「來繞過。
(3) 目錄限定繞過;
在有些Web應用程序是經過限定目錄權限來分離的。固然這樣的方法不值得可取的,攻擊者能夠經過某些特殊的符號「~「來繞過。形如這樣的提交「downfile.jsp?filename=~/../boot」。能過這樣一個符號,就能夠直接跳轉到硬盤目錄下了。
(4) 繞過文件後綴過濾;
一些Web應用程序在讀取文件前,會對提交的文件後綴進行檢測,攻擊者能夠在文件名後放一個空字節的編碼,來繞過這樣的文件類型的檢查。
例如:../../../../boot.ini%00.jpg,Web應用程序使用的Api會容許字符串中包含空字符,當實際獲取文件名時,則由系統的Api會直接截短,而解析爲「../../../../boot.ini」。
在類Unix的系統中也可使用Url編碼的換行符,例如:../../../etc/passwd%0a.jpg若是文件系統在獲取含有換行符的文件名,會截短爲文件名。也能夠嘗試%20,例如: ../../../index.jsp%20
(5) 繞過來路驗證。
Http Referer : HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,通常會帶上Referer,告訴服務器我是從哪一個頁面連接過來的
在一些Web應用程序中,會有對提交參數的來路進行判斷的方法,而繞過的方法能夠嘗試經過在網站留言或者交互的地方提交Url再點擊或者直接修改Http Referer便可,這主要是緣由Http Referer是由客戶端瀏覽器發送的,服務器是沒法控制的,而將此變量看成一個值得信任源是錯誤的。
防範遍歷路徑漏洞
在防範遍歷路徑漏洞的方法中,最有效的是權限的控制,謹慎的處理向文件系統API傳遞過來的參數路徑。主要是由於大多數的目錄或者文件權限均沒有獲得合理的配置,而Web應用程序對文件的讀取大多依賴於系統自己的API,在參數傳遞的過程,若是沒有得嚴謹的控制,則會出現越權現象的出現。在這種狀況下,Web應用程序能夠採起如下防護方法,最好是組合使用。
(1) 數據淨化,對網站用戶提交過來的文件名進行硬編碼或者統一編碼,對文件後綴進行白名單控制,對包含了惡意的符號或者空字節進行拒絕。
(2) Web應用程序可使用chrooted環境訪問包含被訪問文件的目錄,或者使用絕對路徑+參數來控制訪問目錄,使其即便是越權或者跨越目錄也是在指定的目錄下。
總結
路徑遍歷漏洞容許惡意攻擊者突破Web應用程序的安全控制,直接訪問攻擊者想要的敏感數據 ,包括配置文件、日誌、源代碼等,配合其它漏洞的綜合利用,攻擊者能夠輕易的獲取更高的權限,而且這樣的漏洞在發掘上也是很容易的,只要對Web應用程序的讀寫功能塊直接手工檢測,經過返回的頁面內容來判斷,是很直觀的,利用起來也相對簡單。
還有一種目錄遍歷 那就是由於這個web服務器的配置不當形成的
index of /
咱們能夠直接利用百度語法來尋找此形式的目錄遍歷漏洞
intitle:index of
隨意找一個演示下