什麼是目錄遍歷漏洞
目錄遍歷漏洞是由於網站存在配置缺陷,導致網站目錄可以被任意瀏覽,這會導致網站很多隱私文件與目錄泄露。
比如數據庫備份文件、配置文件等,攻擊者利用該信息可以為進一步入侵網站做準備。
簡單來說,我個人認為目錄遍歷更像是一種 trick,是一種可以配合其他攻擊一起使用的 trick,利用方法高於 CSRF 與 CORS。
早在最早接觸的 dirb、御劍、Burpsuite 中的目錄爆破工具,如果能掃出一些存在/存活的目錄,其實就是目錄遍歷漏洞的一種。
總而言之,目錄遍歷這個漏洞是需要經常去摸一摸,探一探的。
存在資源的地方就極有可能存在目錄遍歷。
幾種目錄遍歷攻擊手段
首先要特別明確的一個點是,目錄遍歷的攻擊基於操作系統。基於操作系統,例如 Linux 操作系統下,cd ..命令是返回上一級目錄。
../這個命令,貫穿了整個目錄遍歷攻擊,也是目錄遍歷攻擊的核心。
如果對方服務器是 Linux,攻擊手段就是通過../,這一個../將貫穿整個目錄遍歷攻擊,
1. 在文件上傳中利用目錄遍歷漏洞靶場地址:WebGoat 靶場,目錄遍歷下的 PageLesson2
題目中簡單描述了通過文件上傳利用目錄遍歷漏洞
靶場界面
題目的要求,讓我們講圖片上傳至非本目錄下。
本來要上傳的目錄是:/PathTraversal/user/tests 下,我們能夠通過目錄遍歷的方式,將要上傳的圖片上傳至其他目錄。
已經 OS 為 Linux,所以使用../來完成目錄遍歷攻擊,
利用 Burpsuite 抓包,將 "test" 修改為 "../test",也就是 /test 目錄的上一級目錄。
如圖,修改成功,將頭像上傳至 /PathTraversal/user 目錄下了。
2. 對網站上存在的資源點進行目錄遍歷攻擊
網站上存在的資源點:比如圖片這種資源,在請求圖片的同時嘗試目錄遍歷。
例如,圖片資源所在的目錄:
127.0.0.1/home/image
而在 127.0.0.1/home 下存在一個名為password.txt的文件,
image 通過 GET 請求獲取參數,那麼獲取圖片的 url 就是。
127.0.0.1/home/image?filename=1.jpg
當然,/home 根目錄當然不會流出來。此時如果我們將 filename 的請求變成../1.jpg,請求就變成了
127.0.0.1/home/image?filename=../1.jpg
直接就訪問到了 /home 這一目錄下,所以此時,若我們把請求再構造一下,就不是那麼簡單的事情了,filename=../password.txt,請求就變成了
127.0.0.1/home/image?filename=../password.txt
這下就出大問題了吧!~
接下來我們通過一道靶場再深化一下對已有資源點進行目錄遍歷的攻擊方式
靶場地址:已有資源點的目錄遍歷(https://portswigger.net/web-security/file-path-traversal/lab-simple)
靶場要求我們搞到 /etc/passwd 這一文件
靶場界面如圖所示
抓包,並點開圖片,獲取到圖片的 GET 請求。並直接開始我們的目錄遍歷攻擊。
目錄遍歷攻擊成功,返回的是 400,說明服務器後台並未對目錄遍歷攻擊作任何限制,但是並沒有請求到資源,再往上一層試試。也就是../../。
也失敗了,不要着急,繼續嘗試。
終於在第三層的時候成功了!不容易啊……
本身 /etc/passwd 這一文件在 Linux 當中是非常重要的文件了
我們通過截圖其實也很能體會到漏洞的可利用之處,非常之多,輕信息泄露,重 Getshell。
3. 對於 Zip 文件,在文件上傳中,可以替代頭像上傳,並利用目錄遍歷
場景應用於文件上傳界面,但同樣也是一個非常特殊的點。早在之前人們並不重視這個情況的時候,Zip 文件可以作為文件上傳。
攻擊者可以利用../來改變 Zip 包中某個文件的存放位置。
明明也算是文件上傳的部分,但也要單獨拉出來說道說道
Zip 文件在解壓之後,在攻擊者的精心設計之下,很有概率會覆蓋服務器上原有的文件。舉個例子,php 當中的 .htacess 文件就是最著名的文件上傳的覆蓋,若是覆蓋了 .htacess 文件,那就出大事兒咯 ~
目錄遍歷普通防禦的繞過方式1. 對簡單../的目錄遍歷防禦
當服務器後台過濾../的時候,例如這段代碼
return super.execute(file, fullName != null ? fullName.replace("../", "") : "");
此時因為輸入的../會被處理,替換成空格。
那麼我們通過雙寫繞過,也就是輸入..././,它會被解析成 ==》../成功繞過~
靶場地址:WebGoat Path Traversal PageLesson3
一般的防禦手段的源碼如圖所示
繞過如圖所示
2. GET 請求參數中不允許存在..與/
回顧一下之前的例子:對網站上存在的資源點進行目錄遍歷攻擊。
此時我們請求資源是通過 GET 請求中的參數的,若參數中不允許存在..與/,較難進行目錄遍歷攻擊,但總歸還是有繞過方法的 ~
原理:服務器後台在獲取我們的參數值之後,會進行一次 url 編碼,若只是單純的對參數進行這種過濾,則可以通過 url 編碼繞過。
payload
?filename=%2e%2e%2f/etc/passwd
%2e%2e ------> ..%2f ------> /
可以如此繞過。具體靶場可以看 WebGoat Path Traversal PageLesson5。
防禦的源碼如圖所示
使用 url 編碼繞過,
3. 當服務器只允許獲取當前格式的資源
情景:若此時資源為圖像,那麼服務器只允許的請求是?filename=圖片格式的後綴。只有?filename=1.jpg才可以被請求。
繞過手段:空字節繞過
原本的 payload
?filename=../etc/passwd
因為服務器限制了請求的資源,所以此時必然會報錯。
空字節繞過,也就是增添空格,因為空格後的內容都會被自動過濾。而空格對應的 hex 編碼為 %20,所以我們構造新的 payload。
?filename=../etc/passwd%201.jpg<!--轉換一下,也就是-->?filename=../etc/passwd 1.jpg
在空字節存在的情況下,空格後面的內容會直接被注釋掉,就變成了這樣。
?filename=../etc/passwd
繞過實現 GET ~ !
目錄遍歷的終極防禦手段
前面講了一些目錄遍歷存在的簡單的防禦手段,並不頂用,接下來我們介紹一下能夠很好防禦目錄遍歷的方法。
1. 限制用戶輸入的路徑在某一個範圍內。2. 標準化所有字符
當用戶請求訪問文件/目錄時,直接標準化所有字符,將所有字符轉換成 url 編碼,這樣做之後,到了服務器手上不會解析成../,就不存在目錄遍歷了。
3. 驗證用戶的輸入是否在白名單那內
也就是限制用戶請求資源,對於少量的文件(例如都是圖像),寫正則表達式批量規範請求資源的白名單,這樣可以做到完美防禦目錄遍歷漏洞。
聲明:本公眾號所分享內容僅用於網安愛好者之間的技術討論,禁止用於違法途徑,所有滲透都需獲取授權!否則需自行承擔,本公眾號及原作者不承擔相應的後果。
侵權請私聊公眾號刪文
熱文推薦
藍隊應急響應姿勢之Linux
通過DNSLOG回顯驗證漏洞
記一次服務器被種挖礦溯源
內網滲透初探 | 小白簡單學習內網滲透
實戰|通過惡意 pdf 執行 xss 漏洞
免殺技術有一套(免殺方法大集結)(Anti-AntiVirus)
內網滲透之內網信息查看常用命令
關於漏洞的基礎知識
任意賬號密碼重置的6種方法
乾貨 | 橫向移動與域控權限維持方法總匯
手把手教你Linux提權
歡迎關注LemonSec
覺得不錯點個「贊」、「在看」哦