概述
在web功能設計中,很多時候我們會要将需要通路的檔案定義成變量,進而讓前端的功能便的更加靈活。 當使用者發起一個前端的請求時,便會将請求的這個檔案的值(比如檔案名稱)傳遞到背景,背景再執行其對應的檔案。 在這個過程中,如果背景沒有對前端傳進來的值進行嚴格的安全考慮,則攻擊者可能會通過“../”這樣的手段讓背景打開或者執行一些其他的檔案。 進而導緻背景伺服器上其他目錄的檔案結果被周遊出來,形成目錄周遊漏洞。
看到這裡,你可能會覺得目錄周遊漏洞和不安全的檔案下載下傳,甚至檔案包含漏洞有差不多的意思,是的,目錄周遊漏洞形成的最主要的原因跟這兩者一樣,都是在功能設計中将要操作的檔案使用變量的 方式傳遞給了背景,而又沒有進行嚴格的安全考慮而造成的,隻是出現的位置所展現的現象不一樣,是以,這裡還是單獨拿出來定義一下。
需要區分一下的是,如果你通過不帶參數的url(比如:http://xxxx/doc)列出了doc檔案夾裡面所有的檔案,這種情況,我們成為敏感資訊洩露。 而并不歸為目錄周遊漏洞。(關于敏感資訊洩露你你可以在"i can see you ABC"中了解更多)
你可以通過“../../”對應的測試欄目,來進一步的了解該漏洞。
原理與防範可參考之前的blog: 漏洞之目錄周遊漏洞
一、../../ 目錄周遊
首先, 點選兩個連結, 分别指向兩個php檔案,:
根據title參數(可控參數)執行php來顯示頁面的, 若程式在實作上沒有充分過濾使用者輸入的../之類的目錄跳轉符,導緻惡意使用者可以通過送出目錄跳轉來周遊伺服器上的任意檔案。
分析
若把dir_list.php檔案去掉, 直接列出了dir檔案夾下的所有檔案:
事實上這并不算是目錄周遊, 上述是由于開啟了目錄浏覽造成的
比如, 在apace+phpStudy下開啟d目錄浏覽, 需要在phpStudy\Apache\conf下面的vhosts.conf檔案中修改:
<Directory "D:\wwwroot\d">
Options Indexes FollowSymLinks
</Directory>
這樣就可以對目錄d進行目錄浏覽了:
漏洞利用
根據目錄周遊的原理, 攻擊者主要通過../來傳回上一級目錄, 進而導緻所有目錄的暴露
這裡先嘗試一下對title變量加入上一級目錄../ (類似檔案包含漏洞..)
http://localhost/pikachu-master/vul/dir/dir_list.php?title=../../../README.md
其實也可以算做是檔案包含漏洞, 從源碼中可以看出
但是如果php開啟了目錄浏覽, 同樣也可以采取一下方式進行目錄周遊:
想繼續到系統根目錄是不可能的, 應該目錄浏覽的開啟僅限于網站根目錄下:
如果想要進行目錄周遊的話, 就先利用資訊探針來判斷作業系統, 再根據經驗來包含出系統關鍵檔案即可: