文件包含漏洞解析教程

文件包含漏洞解析教程

  • 最近更新2018年12月11日

1. 什么是文件包含

文件包含其实是一种代码的处理方法,当一个代码文件想用另一个代码文件时,就需要到代码包含,以PHP语言为例,当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件(通常参数为文件名),此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

2. 文件包含演示

案例所需要的相关工具有:

(1)火狐浏览器;

(2)火狐浏览器插件HackBar;

(3)DVWA。

修改DVWA安全级别,正确登录DVWA后,选择“DVWA Security”项,选择安全级别为“Low”,并点击“Submit”按钮确认提交。

进入文件包含案例部分,选择“File Inclusion”项,即文件包含选择项。

在浏览器右上角打开Hackbar(安装方法请参见前面教程内容),打开后,我们点击Hackbar界面中的“Load”按钮,来加载当前页面,加载完成后,就可以看到当前页面的地址。

接下来,我们分别点击界面中的“file1.php”、“file2.php”以及“file3.php”,并分别点击HackBar上的“Load”按钮,来查看当前页面URL的加载情况。

根据图片我们可以分析出:

file1.php对应地址:http://localhost/dvwa/vulnerabilities/fi/?page=file1.php

file2.php对应地址:http://localhost/dvwa/vulnerabilities/fi/?page=file2.php

file3.php对应地址:http://localhost/dvwa/vulnerabilities/fi/?page=file3.php

也就是说,对于文件的选择,对应着变动的是参数,也就是“?page=”后面的内容。接下来我们做个测试,把“?page=”后面的内容进行修改。本例修改为“test.php”(这里是直接修改HackBar内加载的内容),并点击“Run”按钮进行执行。

执行结束后,就可台看到一条警告信息,大概的意思是找不到“test.php”,因为“test.php”是我们自己随意写的,当然找不到。当然通过这种方法,我们已经确认网站存在着文件包含漏洞(当然这里面还有一些细节信息,大家自己发现)。

3. 漏洞分析

在我们刚刚得到的地址可以看出“?page=”后面的内容是可变的,也就是说,如果我们以开发者角度来思考问题的话,其实在PHP中,开发者使用的文件包含方法如下:

网站地址:
http://localhost/dvwa/vulnerabilities/fi/?page=test.php

文件包含地址:
include(“C:\phpStudy\PHPTutorial\WWW\DVWA\vulnerabilities\fi\test.php”)

 

文件包含“C:\phpStudy\PHPTutorial\WWW\DVWA\vulnerabilities\fi“地址来自之前出现漏洞时,暴漏出来的地址。

也就是说,网站地址与文件包含地址,我们可以修改的地方是“test.php”部分,分析到这里,我们就可以进行下面的漏洞的利用了。

4. 漏洞利用

本地文件读取,根据上面的分析,我们可以试着将“test.php”结合之前命令行注入教程里“../”来寻找当前网站路径中的上一级路径内容,本例中,DVWA为我们提供了测试内容,即“C:\phpStudy\PHPTutorial\WWW\DVWA\php.ini”文件,结合之前的路径,我们可以看到,这个文件在之前包含路径的上一级的上一级路径,那么我们结合“../”,得到的包含的代码地址如下:

文件路径:
C:\phpStudy\PHPTutorial\WWW\DVWA\php.ini

文件包含地址:
include(“C:\phpStudy\PHPTutorial\WWW\DVWA\../../php.ini”)

网站地址:
http://localhost/dvwa/vulnerabilities/fi/?page=../../php.ini

 

本地文件执行,我们修改HackBar加载的地址,并点击“Run”来运行页面,我们就可以在页面的最上面显示php.ini文件内容。

当然,除了可以显示文件之外,还可以执行PHP文件。如,DVWA同样给我们保留了一个测试文件,“phpinfo.php”文件,它的路径位置在:“C:\phpStudy\PHPTutorial\WWW\DVWA\phpinfo.php”下,所以我们同样可以使用“../”来定位到它所在的位置。

跨站文件执行,更高级的方法来了,此方法是通过目标服务器的文件包含漏洞,在目标服务器上执行任意服务器上你事先写好的代码,从而实现跨站文件执行。

为了使用一台电脑模拟这个条件,我们将使用测试机器的外网地址,以及回环地址来进行测试。

被攻击者服务器地址为:192.168.10.194,即为上图中的www.a.com。

攻击者存放WebShell的地址为:127.0.0.1,即为上图中的www.b.com。

我们在攻击者的服务器上创建一个打印PHP版本信息的文件,i.php,内容如下所示:

<?php
    phpinfo();
?>

 

将i.php文件放入网站路径下。

接下来我们在被攻击者的浏览器的HackBar上进行地址的拼接,拼接完成后,点击“Run”扫钮进行执行,执行结果后,就可以看到显示的PHP版本等信息。

但这里有一个问题,就是这个页面显示的内容是被医疗击者的?还是攻击者的?通过查看apache环境变量,发现是攻击者的,所以还没有真正的实现漏洞的利用,当然我们有办法,就是将解决的i.php文件更名,不让他在攻击者的服务器上运行,而是在被攻击者的服务器上运行。

我们将攻击者WebShell的文件“i.php”改名为“i.txt”。

同样,在被攻击者的浏览器上进行修改,并进行执行。

我们再次查看时,就可以看到,这次执行的则是被攻击者的服务器IP地址。也就是说,虽然WebShell没有在这台机器上,我确可以让别人的WebShell在这台服务器上执行,从而实现了跨站文件执行的目的。

 

分享到 :
ASCII码对照表
2018-12-11 下一篇
相关推荐

发表回复

登录... 后才能评论