1. 程式人生 > >【滲透測試】目錄遍歷漏洞

【滲透測試】目錄遍歷漏洞

許多的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等檔名出直接進行攔截。

遍歷路徑攻擊變異
路徑遍歷漏洞是很常見的,在Web應用程式編寫過程,會有意識的對傳遞過來的引數進行過濾或者直接刪除,存在風險的過濾方式,一般可以採用如下方式進行突破:
以下是一些繞過的方法,當然在實際執行過程中,可以組合使用。

(1) 加密引數傳遞的資料;

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

(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