fileclude(文件包含漏洞及php://input、php://filter的使用)

2023-11-14

先介绍一些知识

1、文件包含漏洞

和SQL注入等攻击方式一样,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。

什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程叫做包含。

有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。

php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php
 

2、PHP file_get_contents() 函数

file_get_contents() 函数用于将文件的内容读入到一个字符串中

和file() 一样,不同的是 file_get_contents() 把文件读入到一个字符串

3、include 语句

包含并运行指定文件

语法
include 'filename';

被包含文件先按参数给出的路径寻找,如果没有给出目录,只有文件名时则按照include_path指 定的目录寻找。如果在 include_ path下没找到该文件,则 include最后才在调用脚本文件所在的目录和当前工作目录下寻找,如果最后仍 未找到文件则include结构会发出一条警告。

4、empty() 函数

用于检查一个变量是否为空。

empty() 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。 这意味着 empty() 本质上与 !isset($var) || $var == false 等价。

当变量存在,并且是一个非空非零的值时返回FALSE,否则返回TRUE。

以下的变量会被认为是空的:

  • "" (空字符串)
  • 0 (作为整数的0)
  • 0.0 (作为浮点数的0)
  • "0" (作为字符串的0)
  • NULL
  • FALSE
  • array() (一个空数组)
  • $var; (一个声明了,但是没有值的变量)

5、isset()函数

用于检测变量是否已设置并且非NULL。

如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。

若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。

同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。

6、PHP伪协议

指的是PHP所支持的协议与封装协议,在web渗透漏洞利用中常用于配合文件包含进行web攻击,从而获取网站权限。

7、php://input(用于执行PHP代码)

是一个只读信息流,当请求方式是post的,并且enctype不等于”multipart/form-data”时,可以使用php://input来获取原始请求的数据,当enctype等于”multipart/form-data”时php://input是无效的。

php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行,当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容,从而导致任意代码执行。

例如:
http://127.0.0.1/cmd.php?cmd=php://input
POST数据:<?php phpinfo()?>

利用该方法,我们可以直接写入php文件,输入file=php://input,然后使用burp抓包,写入php代码。

遇到file_get_contents()要想到用php://input绕过

用法: ?file=php://input POST:需要写入的数据

8、php://filter(用于读取源码)

 读取源代码并进行base64编码输出

一种元封装器,设计用于数据流打开时的筛选过滤应用。

对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、file() 和 file_get_contents(),在数据流内容读取之前没有机会应用其他过滤器。

可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行,从而导致任意文件读取。

打开题目链接,代码审计file2被放入了file_get_contents() 函数,且要求返回值为 hello ctf

file1是要包含的文件,且flag应该是在文件flag.php里面

我们要想办法来读取这个文件,使用php://filter伪协议来读取源代码

即 file1=php://filter/read=convert.base64-encode/resource=flag.php

这里出现了file_get_contents()函数,想到用php://input来绕过

即 file2=php://input       POST DATA]: hello ctf

所以payload为

/?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input

且post传入 hello ctf

 

得到一串base64编码

PD9waHAKZWNobyAiV1JPTkcgV0FZISI7Ci8vICRmbGFnID0gY3liZXJwZWFjZXtjMjNkY2VlOWYxZTc0NTRlNzVlMTA5OGJlMmZhM2IzOH0=

解码得到源码

$flag = cyberpeace{c23dcee9f1e7454e75e1098be2fa3b38} 

存在文件包含时使用PHP伪协议

可能遇到的文件包含函数:
1、include 2、require 3、include_once 4、require_once 5、highlight_file

6、show_source 7、flie 8、readfile 9、file_get_contents 10、file_put_contents 11、fopen

eg:

php://filter/read=convert.base64-encode/resource=[文件名]

读取文件源码(针对php文件需要base64编码)

php://input + [POST DATA]

执行php代码

若有写入权限,写入一句话木马


 

 

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

fileclude(文件包含漏洞及php://input、php://filter的使用) 的相关文章

  • PHP日期时间“下周星期三”给我星期一

    我正在尝试使用以下方法获取下周星期三的日期new DateTime next week wednesday 然而 它返回2016 12 19 00 00 00 000000今天是星期一 为什么会这样呢 如何得到正确的结果 我尝试在在线 PH
  • 将日期格式(在数据库或输出中)更改为 dd/mm/yyyy - PHP MySQL

    MySQL 将日期存储在我的数据库中 默认情况下 为 YYYY MM DD 我的日期的字段类型是 DATE 我不需要任何时间存储 有没有一种简单的方法可以默认更改它到 DD MM YYYY 我在两个不同的表中调用不同的日期 并且在我的任何代
  • PHP_CodeSniffer - 显示失败的嗅探

    PHP CodeSniffer 中是否有设置来显示失败的嗅探 我将输出与我们的编码标准进行比较 并且一一使用很难破译哪个测试失败 看看我们可能想忽略哪个 如果有一种简单的方法来显示故障嗅探 那么我可以更轻松 更快地完成配置 您可以使用 s
  • 从 PHP 执行 SQL Server 存储过程

    我尝试从 PHP 调用 SQL Server 存储过程 这是我的存储过程 CREATE procedure dbo tester id NVARCHAR MAX AS BEGIN DECLARE tab TABLE myxml XML IN
  • XMLReader - 如何处理未声明的命名空间

    Merged https meta stackexchange com questions 158066 what is a merged question with 如何使用 XMLReader 读取未定义命名空间的 XML 文件 que
  • 使用 href 和 php 从 sql 数据库对 html 表进行排序

    我有一个 html 表 其中包含来自 php 吐出的 sql 表的产品数据 我想通过单击表列的标题对数据进行排序 我像这样输出我的表 php product list sql mysql query SELECT FROM products
  • PayPal Rest API for Payments 在沙箱中返回 NULL

    我有一个 PayPal 沙盒帐户 我可以在 PHP 上使用curl 通过 api 检索令牌 但是处理测试卡只会返回 null 有人看到代码有问题吗 这是 PayPal 沙盒的已知问题吗 下面代码片段中的客户端是伪造的 但是 如前所述 使用我
  • 类似的 PHP 表单代码:如果 $_REQUEST 为空,第一个抛出错误,第二个则不抛出错误

    我是 PHP 新手 所以这可能是一个简单的答案 希望我能正确地按照 SO 标准格式化它 对于该网站来说仍然是新的 我正在通过 SitePoint 编写两组非常相似的代码 提交表单数据并使用 htmlspecialchars 来阻止 XSS
  • php简单xml如何读取具有不同子节点级别的多个节点

    我有一个 xml 文件 其中包含不同的命名节点和多级子节点 每个节点之间都不同 我应该如何访问数据 需要很多嵌套的for循环吗 以下是 xml 代码示例
  • 在 WooCommerce 订单和电子邮件中添加并显示自定义购物车项目数据

    我有一个名为彩票的自定义 woocommerce 产品类型 我需要在其上添加一个自定义选择字段 因为它不是可变产品 所以我添加了一个 一切工作正常 我在购物车和结帐中也获得了价值 但我无法在管理订单或订单邮件 客户和管理员 中获得价值 这是
  • 准备好的声明不返回任何内容

    我知道这个特定的查询是有效的 因为我用未经准备的过程方法测试了它 这里是 name introduction mysqli new mysqli localhost user pass db or die There was a probl
  • MPDF 未定义索引错误

    我正在使用 MPDF 库将 HTML 转换为 PDF 这是我的代码 HTML HTML CONTENT GOES HERE HTML STRING MPDF gt WriteHTML html Converting MPDF gt Outp
  • 使用 getJSON 未显示 JSON 数据

    document ready function getJSON news php parseInfo function parseInfo data alert data news undefined info html data news
  • PHPstorm - 无法在blade.php 文件中设置断点

    我正在开发 Laravel 应用程序 可以很好地调试我的控制器 php 文件 但我还想调试blade php 文件 在我当前的设置中 我遵循了所有 jetbrains 为 Laravel 推荐的设置 https confluence jet
  • 如何设置外键id的id #sf2 #doctrine2

    我正在尝试手动为对象设置外键 id 但没有找到如何执行此操作 class Item ORM ManyToOne targetEntity MyBundle Entity ItemType inversedBy itemTypes ORM J
  • PHP 静态变量用双引号引起来

    如何让 PHP 计算双引号中的静态变量 我想做这样的事情 log self CLASS METHOD entering 我尝试过各种 组合来获取变量值self CLASS 但没有任何效果 我目前已经解决了字符串连接问题 但输入起来很痛苦 l
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • 如何使 WordPress 中的自定义模板充当受密码保护的页面?

    我正在使用自定义模板构建一个页面 问题是 我需要此页面受密码保护 或者至少可供登录用户访问 但即使我在 WordPress 管理的新页面部分中将其设置为此类 私人 密码保护 它也不会显示菜单项和内容 如果是私有的 或者它会立即显示页面内容
  • mysqli_connect(): (HY000/2002): 无法建立连接,因为目标机器主动拒绝

    我知道有很多这样的问题 但我没有找到任何解决方案 我尝试过的事情 检查防火墙 重新启动我的电脑和 Apache 服务器 重新启动MYSQL 检查了我的代码 尝试了我所知道的和在互联网上找到的一切 这是我的代码
  • 在 Laravel 视图中使用 CSS?

    我刚刚开始学习 Laravel 并且可以掌握控制器和路由的基础知识 我的操作系统是 Mac OS X Lion 它位于 MAMP 服务器上 我的routes php代码 Route get function return View make

随机推荐

  • 基于 Windows 搭建vue开发环境

    1 下载WebStorm软件 https www jetbrains com webstorm download 2 下载Node js https nodejs org download release latest v10 x 注意事项
  • 解决网页无法选中文字,无法复制的问题

    今天在CSDN浏览网页的时候发现有一些文章无法复制文字 查找解决方式 找到一个可行的方式 1 将网页保存到本地 保存为一个单网页 2 使用文本编辑工具打开网页文件 找到以下字段 content views user select none
  • 网络安全之端口扫描

    1 扫描三步曲 一个完整的网络安全扫描分为三个阶段 第一阶段 发现目标主机或网络 端口扫描 第二阶段 发现目标后进一步搜集目标信息 包括操作系统类型 运行的服务以及服务软件的版本等 如果目标是一个网络 还可以进一步发现该网络的拓扑结构 路由
  • java使用aspose-words无损格式转pdf文件

    1 下载aspose wordsjar包 链接 https pan baidu com s 1Dtb hFgYJj2 F Ona8nErQ 提取码 kdrb 2 项目pom xml配置以下代码 执行下载jar包 这个时候肯定是下载不下来的
  • 美团某程序员哀叹:能力很强,却因为不会“向上管理”而惨遭被裁!怎么办?...

    互联网大厂大多有自己的绩效考核机制 比如 361 271 等 美团实行的绩效考核机制就是 271 即20 的人是A类绩效 70 的人是B类绩效 10 的人是C类绩效 那么这个绩效是如何评定的呢 是唯技术论还是有其他因素 评定过程中是否存在不
  • Linux——TCP编程流程

    TCP编程流程 TCP是传输层的一种协议 提供的是面向连接 可靠的 字节流的服务 主机字节序和网络字节序 主机字节序列分为大端字节序和小端字节序 不同的主机采用的字节序列可能不同 不同的芯片 所采用的数值存储方式是不同 大端字节序是指一个整
  • SQL server 导入Excel数据

    SQL server 导入Excel数据 编辑 洪伟富 2018 06 07 第一步 对表格数据的处理 这一列数据中有数字 又有中文 如果不做处理 导入数据库会默认为float 从而导致 公教楼201 等字符全部为null 解决办法 用筛选
  • 从键盘上输入身份证号, 判断出生日期,性别

    从键盘上输入身份证号 判断出生日期 性别 倒数第二位是奇数表示男 偶数代表女 public class IdNumber public static void main String args 1 键盘输入身份证号 Scanner intp
  • qt 导出word中插入图片

    QAxObject selection m word gt querySubObject Selection QVariantList params params append 6 params append 0 selection gt
  • 手把手教YOLO系列算法部署之安卓部署

    前言 首先我的yolov5的版本是v6 1 我的部署方式是将模型先转为tflite然后部署到安卓上 大家一般是使用自己的训练模型权重文件来部署 所以我直接讲述自定义模型的部署检测 链接 https pan baidu com s 1bskq
  • shouldComponentUpdate有什么作用

    shouldComponentUpdate有什么作用 shouldComponentUpdate是生命周期之一 是不常用的一个方法 能影响组件是否重新渲染 在更新阶段 当有了new props或者调用setState 方法 在render方
  • Mathorcup数学建模竞赛第三届-【妈妈杯】B题:关于三维健康评分模型的研究(附带赛题解析&获奖论文)(一)

    赛题描述 由于现代社会的生活节奏加快 生活工作压力增大 拥有一个健康的身体显得尤为重要 健康的标准有很多 但是如何量化这些标准 评价一个人的健康状况是一个比较困难的问题 世界卫生组织给出的健康标准有如下几个 1 精力充沛 能从容不迫地应付日
  • 【react】props的基本使用

    props可以用来组件传值 render里面的this指向Person的实例对象 而实例对象上有一个属性props 可以用他来给组件传值 class Person extends React Component render const n
  • SpringCloud——Gateway和过滤器和跨域问题的解决

    介绍 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目 该项目是基于 Spring 5 0 Spring Boot 2 0 和 Project Reactor 等响应式编程和事件流技术开发的网关 它旨在
  • LeetCode(20):有效的括号

    描述 给定一个只包括 的字符串 判断字符串是否有效 有效字符串需满足 左括号必须用相同类型的右括号闭合 左括号必须以正确的顺序闭合 注意空字符串可被认为是有效字符串 示例 输入 输出 true 输入 输出 true 输入 输出 true 输
  • 从ubuntu18 升级到ubuntu20 墙倒屋塌,重新开始

    升级到20 发现了各种不便 最主要是我的机器就是这个运行水平 不能再往上跟了 运行慢将不可容忍 启动慢 不可容忍 点击icon 有几秒种不响应期 难以容忍 与vmware虚拟机15不能很好兼容 并进一步不能与win7兼容 win7我认为是最
  • 基于线性回归对神经网络的解释以及梯度下降鞍点与局部最优的产生原理

    首先 机器学习的本质是让计算机找到一个函数来解决问题 这种函数非常复杂以至于人类无法直接手写出来 本文参考李宏毅教授视频ML 2021 Spring 神经网络是解决线性不可分问题 你可以引入多条线来分割当然我们也可以引入激活函数 非线性函数
  • 计算机视觉小项目—基于RGB颜色特征的火焰识别

    提出问题 随着计算机视觉及图像处理技术的发展 基于计算机视觉的火焰检测技术逐渐取代了传统的火灾检测 由于火焰最显著静态特质是其颜色 火焰识别算法主要利用视频图像中颜色与亮度的相关信息 所以对火焰颜色的特征提取是火焰识别过程的关键 在有关火焰
  • Spring Cloud Ribbon无法将服务名转换为地址

    试了许多网上说的 都不管用 后来发现是spring cloud starter eureka依赖项的版本问题 将版本降低后正常运行
  • fileclude(文件包含漏洞及php://input、php://filter的使用)

    先介绍一些知识 1 文件包含漏洞 和SQL注入等攻击方式一样 文件包含漏洞也是一种注入型漏洞 其本质就是输入一段用户能够控制的脚本或者代码 并让服务端执行 什么叫包含呢 以PHP为例 我们常常把可重复使用的函数写入到单个文件中 在使用该函数