IIS網站安全管理之URL路徑穿越漏洞
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
路徑穿越其實就是目錄遍歷,它可以讓攻擊者查看運行了存在此漏洞的應用的服務器上的任意文件,包括: 程序代碼、數據; 后臺系統憑證; 敏感的操作系統文件。 在某些情況下還可能允許攻擊者上傳文件到任意目錄下(比如文件上傳漏洞同時存在路徑穿越),從而使得攻擊者可以修改服務器的配置文件,甚至最終完全控制服務器。 1、文件、模版下載; 2、URL參數,如 file、f、path、download、filename、load 等,相關的字典網上多的是我就不列舉了; 3、圖片鏈接。 測試方法 這沒什么好說的 ../ 就完事了,再不濟 ..%2F。 其實要預防路徑穿越漏洞的方法就是不要把用戶提供的參數完全輸入給文件系統的API,而是寫死在代碼里,限制用戶只能下載指定的文件。 那如果必須要用戶輸入呢,可以添加下面的驗證流程: 如果可能得話,驗證用戶輸入是否在白名單列表中;如果不行,就驗證用戶輸入是否只包含文字或數字;如果再不行,就校驗用戶輸入是否包含 ../ ..%2F 之類的 payload 設置指定的文件路徑,在拼接用戶輸入后獲取真實的文件路徑,查看其是否與預設相同,示例代碼如下: import os input_path = input("請輸入路徑: ") full_path = os.path.realpath(os.path.join("D:\ProjectPython\\test", input_path)) # 將用戶輸入的路徑與/etc/abc拼接成完整的路徑,使用os.path.realpath()函數獲取完整路徑的真實路徑 common_path = os.path.commonpath([full_path, "D:\ProjectPython\\test"]) # 使用os.path.commonpath()函數找到完整路徑和/etc/abc的共同路徑。如果共同路徑為/etc/abc,則表示路徑合法;否則,表示路徑不合法。 if common_path == "D:\\ProjectPython\\test": print("路徑合法") else: print("路徑不合法")
一個簡單的路徑穿越 任務簡報 這個實驗室包含路徑穿越漏洞,你要讀取到 /etc/passwd 文件。 任務過程 在網站上有一些商品的圖片,這些圖片的src=/image?filename=48.jpg,那我們是不是可以修改它的值來查看對應的文件呢? 現在我們把 filename 的值改成 "/../../../../../etc/passwd" 看看: 修改之后它的圖片就沒有啦,我們看看 burp 的流量是什么: OK 成功拿下。 絕對路徑繞過 有些應用會檢測用戶輸入中是否含有 ../ 這種跨越目錄的命令,但是如果它們使用的是一些函數進行目錄拼接時如果你輸入的是一個絕對路徑,那么它們就會自動忽略你前面預設的目錄,這里我使用 python 作為演示,輸入正常的文件名: 此時一切安好,那我們輸入帶有 payload 的路徑呢: 此時雖然最終執行的 /etc/passwd 但是我們的規則校驗已經識別出它有問題了,在實際中并不會被執行,那么我們輸入絕對路徑試試 /etc/passwd,按照我們的理解,這里最后應該執行的是 /home/test/etc/passwd 這個路徑,那么結果是不是這樣呢,下面揭曉: 哈 傻了吧,最后的結果是 /etc/passwd 而且我們的校驗規則認為這個用戶輸入是沒有問題的,這也就使得對方的攻擊成功了,他成功繞過了我們的校驗。 這主要是因為,os.path.join() 函數會根據傳入的參數自動拼接路徑,并處理其中的目錄分隔符。然而,如果傳入的參數中包含了絕對路徑(以根目錄開始的路徑),則之前的路徑部分將被忽略。 那么我們接下來就在靶場中看一下吧。 任務簡報 這個網站設置了一個默認的工作目錄,應用程序阻止遍歷序列,但將提供的文件名視為相對于默認工作目錄,你要做的是讀取到 /etc/passwd 文件。 任務過程 我們還是使用 ../ 試一下運行的結果。 可以看到是不行的,現在我們換成絕對路徑看看 /etc/passwd。 看 和我們的演示代碼是一樣的結果,絕對路徑繞過了它的 ../ 檢測。 雙寫繞過 有的開發會在識別到 ../ 之后將其直接置換為空,以此對抗路徑穿越,但是我們都知道,這種策略我們可以通過雙寫來繞過,下面我們來看看。 任務簡報 這個網站會把用戶提交的 ../ 剝離,你要做的是讀取到 /etc/passwd 文件。 任務過程 我們還是提交一個 ../ 看看情況。 這里我們可以看到在使用 ../3.jpg 的情況下還是正常顯示了圖片,這說明程序就是把 ../ 給去掉了,畢竟上一層目錄是不會有 3.jpg 這個文件的,那我們就開始工作吧 ....//....//....//....//....//etc/passwd。 成功繞過,收工。 URL 編碼繞過 對于上面的情況,我們也可以使用 URL 編碼進行繞過,有時候也可以嘗試 雙層 URL 編碼繞過。 任務簡報 這個實驗室包含路徑穿越漏洞,你要讀取到 /etc/passwd 文件。 任務過程 還是輸入 ../ 看看情況。 這里可以看到,還是和上一節一樣的情況,這次我們改一下,用 ..%2F 試試。 還是不行,好好好,那我就直接雙重編碼。 這次應該是成了,我們直接上: payload %25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%36%35%25%37%34%25%36%33%25%32%66%25%37%30%25%36%31%25%37%33%25%37%33%25%37%37%25%36%34 OK 成功繞過,下班下班。 截斷繞過 有些網站可能會通過驗證文件后綴來判斷要訪問的是不是系統文件,畢竟大多數Linux系統的文件都是沒有后綴的,對于這種情況,我們可以通過之前文件上傳漏洞時使用的 00 截斷來繞過。 任務簡報 這個實驗室包含路徑穿越漏洞,你要讀取到 /etc/passwd 文件。 任務過程 這次我們直接用 ../images/38.jpg 試試水。 這里可以正?;仫@圖片,說明這個地方沒有對 ../ 做處理,那我們就直接上 payload 了。 這里可以看到是不行的,那我們試試 00 截斷 OK 現在就可以了,具體原理可以參考上一篇文件上傳的文章,這里就不過多贅述了。 好了,本篇文章主要就是介紹了一些路徑穿越的常見位置、測試方法、常見的繞過手段、修復建議,相同的方法都可以用在文件下載上面,這兩個的原理都是一樣的,就不單獨介紹啦。 該文章在 2024/3/18 18:39:37 編輯過 |
關鍵字查詢
相關文章
正在查詢... |