文章來源:https://cloud.tencent.com/developer/news/60212
參考文章:https://www.cnblogs.com/AtesetEnginner/p/11064279.html
一.漏洞描述
目錄遍歷是由于web服務器或者web應用程式對用戶輸入的檔案名稱的安全性驗證不足而導致的一種安全漏洞,使得攻擊者通過利用一些特殊字符就可以繞過服務器的安全限制,訪問任意的檔案(可以是web根目錄以外的檔案),甚至執行系統命令,
二.漏洞成因
程式在實作上沒有充分過濾用戶輸入的../之類的目錄跳轉符,導致惡意用戶可以通過提交目錄跳轉來遍歷服務器上的任意檔案,
三.漏洞利用
常見目錄遍歷:
0x01 Unix目錄遍歷攻擊
通用的類Unix系統的目錄遍歷攻擊字串形如“../”,
0x02 Windows作業系統目錄遍歷攻擊
對于微軟的Windows作業系統以及DOS系統的目錄結構,攻擊者可以使用“../”或者“..\”字串,
在這種作業系統中,每個磁盤磁區有一個獨立的根目錄(比如我們會把個人電腦磁區成“C盤”、“D盤”等等),并且在所有磁盤磁區之上沒有更高級的根目錄,這意味著Windows系統上的目錄遍歷攻擊會被隔離在單個磁盤磁區之內(C盤被攻擊,D盤不受影響),
0x03 URI編碼形式的目錄遍歷攻擊
一些網路應用會通過查詢危險的字串,例如:- ..- ..- ../
來防止目錄遍歷攻擊,然而,服務器檢查的字串往往會被URI編碼,因此這類系統將無法避免如下形式的目錄遍歷攻擊:
-
%2e%2e%2f:解碼為../
-
%2e%2e/:解碼為../
-
..%2f:解碼為../
-
%2e%2e%5c:解碼為..\
0x04 Unicode/UTF-8編碼形式的目錄遍歷攻擊
UTF-8編碼被Bruce Scheneier和Jeffery Streifling標記為一種易受攻擊的資源,
當微軟向他們的Web服務增加Unicode支持時,一種新的編碼方式——“../”被引入,也正是這一舉動最終引入了目錄遍歷攻擊,
許多帶百分號的編碼方式,例如:- %c1%1c- %c0%af 被轉換成“/”或“\”字符,
百分號編碼字符被微軟提供的Web服務解碼成相應的8位元組字符,正式由于Windows和DOS使用基于ASCII的8位元組標準編碼方式,這個行為在歷史上一度被認為是正確的,
然而,UTF-8本身的源頭并非標準化,許多字串甚至根本就沒有對應的編解碼字符,微軟通過其他一些方式,最終沒有使用標準化的編解碼方式,許多奇怪的百分號編碼形式,例如“%c0%9v”也被引入,
0x05 Zip/歸檔檔案目錄遍歷攻擊
形如zip這樣的歸檔檔案格式也允許目錄遍歷攻擊:就像回溯檔案系統一樣,在歸檔檔案中的任何檔案也會被重寫,我們可以撰寫出查看歸檔檔案內部檔案路徑的代碼來,
目錄遍歷變異:
路徑遍歷漏洞是很常見的,在Web應用程式撰寫程序,會有意識的對傳遞過來的引數進行過濾或者直接洗掉,存在風險的過濾方式,一般可以采用如下方式進行突破:
0x01 加密引數傳遞的資料
在Web應用程式對檔案名進行加密之后再提交,比如:“downfile.jsp?filename= ZmFuLnBkZg- “,在引數filename用的是Base64加密,而攻擊者要想繞過,只需簡單的將檔案名加密后再附加提交即可,所以說,采用一些有規律或者輕易能識別的加密方式,也是存在風險的,
0x02 編碼繞過
嘗試使用不同的編碼轉換進行過濾性的繞過,比如Url編碼,通過對引數進行Url編碼提交,“downfile.jsp?filename= %66%61%6E%2E%70%64%66“來繞過,
0x03 目錄限定繞過
在有些Web應用程式是通過限定目錄權限來分離的,當然這樣的方法不值得可取的,攻擊者可以通過某些特殊的符號““來繞過,形如這樣的提交“downfile.jsp?filename=/../boot”,能過這樣一個符號,就可以直接跳轉到硬碟目錄下了,
0x04 繞過檔案后綴過濾
一些Web應用程式在讀取檔案前,會對提交的檔案后綴進行檢測,攻擊者可以在檔案名后放一個空位元組的編碼,來繞過這樣的檔案型別的檢查,
例如:../../../../boot.ini%00.jpg,Web應用程式使用的Api會允許字串中包含空字符,當實際獲取檔案名時,則由系統的Api會直接截短,而決議為“../../../../boot.ini”,
在類Unix的系統中也可以使用Url編碼的換行符,例如:../../../etc/passwd%0a.jpg如果檔案系統在獲取含有換行符的檔案名,會截短為檔案名,也可以嘗試%20,例如: ../../../index.jsp%20
0x05 繞過來路驗證
Http Referer : HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的
在一些Web應用程式中,會有對提交引數的來路進行判斷的方法,而繞過的方法可以嘗試通過在網站留言或者互動的地方提交Url再點擊或者直接修改Http Referer即可,這主要是原因Http Referer是由客戶端瀏覽器發送的,服務器是無法控制的,而將此變數當作一個值得信任源是錯誤的,
四.漏洞防御
在防范目錄遍歷漏洞的方法中,最有效的是權限的控制,謹慎的處理向檔案系統API傳遞過來的引數路徑,主要是因為大多數的目錄或者檔案權限均沒有得到合理的配置,而Web應用程式對檔案的讀取大多依賴于系統本身的API,在引數傳遞的程序,如果沒有得嚴謹的控制,則會出現越權現象的出現,在這種情況下,Web應用程式可以采取以下防御方法,最好是組合使用,
對用戶的輸入進行驗證,特別是路徑替代字符“../”
盡可能采用白名單的形式,驗證所有輸入
合理配置web服務器的目錄權限
程式出錯時,不要顯示內部相關細節
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/59921.html
標籤:其他
上一篇:recon-ng打開后顯示No modules enabled/installed
下一篇:STM32串口發送接收問題
