WEB 安全漏洞之目錄遍歷

什麼是目錄遍歷

第一次接觸到目錄遍歷漏洞還是在 ThinkJS 2 的時候。代碼如下圖,目的是當用戶訪問的 URL 是靜態資源的時候返回靜態資源的地址。其中 pathname 就是用戶訪問的 URL 中的路徑,我們發現代碼中只是簡單的解碼之後就在22行將其與資源目錄做了拼接,這就是非常明顯的目錄遍歷漏洞了。

爲什麼這麼說呢?假設用戶訪問的 URL 是 http://xxx.com/../../../xxx.jpg 的話最終返回的文件地址就會變成 think.RESOURCE_PATH 的上三層目錄中的文件了。而這種利用網站的安全缺陷來列出服務器目錄或者文件的方式就成爲目錄遍歷漏洞(Directory traversal),也稱之爲路徑遍歷漏洞(英文:Path traversal)。

目錄遍歷在英文世界裏又名../ 攻擊(Dot dot slash attack)、目錄攀登(Directory climbing)及回溯(Backtracking)。其部分攻擊手段也可劃分爲規範化攻擊(Canonicalization attack)。
via: wikipedia

目錄遍歷的危害

目錄遍歷最大的危害是能夠讓任意用戶訪問系統的敏感文件,繼而攻陷整個服務器。例如獲取linux下的/etc/passwd文件後可能會破解出root用戶的密碼等。

防禦方法

可以看到大部分情況下問題的關鍵就是 ../ 目錄跳轉符,所以防禦的第一要務就是它進行過濾。除了過濾之外,還可以針對最終的文件路徑進行判斷,確保請求文件完整目錄後的頭N個字符與文檔根目錄完全相同,如果相同則返回內容,否則則可能是攻擊地址不予返回。

回到文章開頭說的那個代碼問題,最終就是通過上述方法修復的,對最終的文件地址進行規範化後判斷開頭是否包含 RESOURCE_PATH 目錄,如果不包含則返回空。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章