許多的web應用程式一般會有對伺服器的檔案讀取檢視的功能,大多會用到提交的引數來指明檔名,如:
當伺服器處理傳送過來的image.jpg檔名後,web應用程式即會自動新增完整路徑,如 「d://site/images/image.jpg」,將讀取的內容返回給訪問者。
初看,在只是檔案互動的一種簡單的過程,但是由於檔名可以任意更改而伺服器支援 「~/」,「../」 等特殊符號的目錄回溯,從而使攻擊者越權訪問或者覆蓋敏感資料,如**的配置檔案、系統的核心檔案,這樣的缺陷被命名為路徑遍歷漏洞。在檢查一些常規的web應用程式時,也常常有發現,只是相對隱蔽而已。
路徑遍歷漏洞的發現,主要是對web應用程式的檔案讀取互動的功能塊,進行檢測,面對這樣的讀取方式:
「
我們可以使用 「../」來作試探,比如提交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,告訴伺服器我是從哪個頁面鏈結過來的。
在防範遍歷路徑漏洞的方法中,最有效的是許可權的控制,謹慎的處理向檔案系統api傳遞過來的引數路徑。主要是因為大多數的目錄或者檔案許可權均沒有得到合理的配置,而web應用程式對檔案的讀取大多依賴於系統本身的api,在引數傳遞的過程,如果沒有得嚴謹的控制,則會出現越權現象的出現。在這種情況下,web應用程式可以採取以下防禦方法,最好是組合使用。
(1) 資料淨化,對**使用者提交過來的檔名進行硬編碼或者統一編碼,對檔案字尾進行白名單控制,對包含了惡意的符號或者空位元組進行拒絕。
(2) web應用程式可以使用chrooted環境訪問包含被訪問檔案的目錄,或者使用絕對路徑+引數來控制訪問目錄,使其即使是越權或者跨越目錄也是在指定的目錄下。
路徑遍歷漏洞允許惡意攻擊者突破web應用程式的安全控制,直接訪問攻擊者想要的敏感資料 ,包括配置檔案、日誌、源**等,配合其它漏洞的綜合利用,攻擊者可以輕易的獲取更高的許可權,並且這樣的漏洞在發掘上也是很容易的,只要對web應用程式的讀寫功能塊直接手工檢測,通過返回的頁面內容來判斷,是很直觀的,利用起來也相對簡單。
目錄遍歷攻擊詳解
對於乙個安全的web 伺服器來說,對web內容進行恰當的訪問控制是極為關鍵的。目錄遍歷是http所存在的乙個安全漏洞,它使得攻擊者能夠訪問受限制的目錄,並在web伺服器的根目錄以外執行命令。web伺服器主要提供兩個級別的安全機制 訪問控制列表是用於授權過程的,它是乙個web伺服器的管理員用來說明什麼...
什麼是目錄遍歷攻擊及如何防護
前幾日研究某web專案源 使用的是thinkphp框架,根目錄下有個www目錄,存放專案模組的入口檔案。頓時茫然,本人一般直接把入口檔案放在web根目錄,而這裡卻是www目錄,不知www目錄是何作用,遂問老大,老大回 你查查什麼是目錄遍歷攻擊。所以才懂得www目錄之所以存在的目的。攻擊人員通過目錄便...
cmd for 遍歷目錄 python 遍歷目錄樹
假定你希望對某個資料夾中的所有檔案改名,包括該資料夾中所有子資料夾中 的所有檔案。也就是說,你希望遍歷目錄樹,處理遇到的每個檔案。寫程式完成這 件事,可能需要一些技巧。好在,python 提供了乙個函式,替你處理這個過程。請看 c delicious 資料夾及其內容,如圖所示。這裡有乙個例子程式,針...