簡介
目錄穿越(也被稱為目錄遍歷)是通過使用../
等目錄控制序列或者文件的絕對路徑來訪問存儲在文件系統上的任意文件和目錄,特別是應用程序源代碼、配置文件、重要的系統文件等。
路徑穿越是網站被惡意人員利用,來得到其無權限訪問的內容。
通常是由於代碼沒有判斷拼接路徑的真實路徑是否合法,最終導致文件讀取。
一般來講用戶在網站進行瀏覽,所能見到的網頁都是位於網站根目錄下的文件,根目錄以外的文件是不允許被未授權訪問的。但是安全方面做得不嚴謹的web程序可能會出現目錄穿越漏洞,惡意人員可以利用這個漏洞來讀取根目錄以外的文件夾。一旦成功,本不應該暴露的敏感信息就可能被泄漏給惡意人員。
攻擊payload
1.URL參數
··/
..\
..;/
2.Nginx off by slash
https://vuln.site.com/files../
3. UNC Bypass
https://localhost/c$/windows/win.ini
4.過濾繞過
- 單次替換,如
..//
- URL編碼
- 16位Unicode編碼
- 超長UTF-8編碼
防御
方案一:過濾惡意字符,如..
、./
、.\
等
缺點:黑名單過濾不全的話,很容易被繞過。
方案二:采用白名單方式,只允許讀取特定文件,若不是特定文件直接攔截。也可以僅允許純字母或數字字符等。
方案三:按照.
分割,讀文件名參數和文件格式參數,如果文件名參數中有..
,則攔截
附錄:UNC路徑
- UNC(Universal Naming Convention)
- 為了迎合網絡化的趨勢,windows的地址風格(
C:\ABC\def\文件
、\\計算機名\dir\file
)向網絡地址風格做了一次兼容變換。 - 整體形式如:
file://機器的IP地址/目錄/文件
file
表示協議類型://
后面是機器的網絡地址/
后面是目錄和文件名
- 我們訪問網上鄰居所采用的命令行訪問法,實際上應該稱作UNC路徑訪問法。