文件包含支持的伪协议

2023-11-07


一、什么是伪协议?

PHP官方文档

  • 伪协议: 带有URL 风格的封装协议。
  • PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。
  • 封装:是php面向对象的其中一个特性,将多个可重复使用的函数封装到一个类里面,在使用时直接实例化该类的某一个方法,获得需要的数据。

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — 安全外壳协议 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

二、文件包含支持的伪协议用法

描述之前,我们先把php.ini的allow_url_fopen 和allow_url_include设置为On。以便对这些伪协议进行分析。

1、php://

php:// — 访问各个输入/输出流(I/O streams)

1.1 php://input

php://input:访问请求的原始数据的只读流。
注:当enctype=”multipart/form-data”时,php://input是无效的。

示例:

include会把参数’info’当作文件执行
在这里插入图片描述
正常情况下,除非输入的参数刚好是这个目录下的某个文件,
比如我有个名为alert.php的文件
在这里插入图片描述
否则就会报错
在这里插入图片描述
现在我们利用php://input协议
在这里插入图片描述
截取数据包
在这里插入图片描述
在最后面,我们加入要执行的代码<?php echo phpinfo(); ?>
这里输入的实际上就是请求的数据,然后它被当作代码执行了。
在这里插入图片描述
放包
在这里插入图片描述
扩展

这里有道关于php://input的ctf题,我们提取部分代码进行分析。
链接
简单的代码示例:
file_get_contens($data):将文件内容以字符串形式输出
在这里插入图片描述

这里的data被当作文件读取,而实际上,后台并不能找到名为"a"的这个文件,所以会报错。

在这里插入图片描述
利用php://input绕过

现在我们输入的值为空,返回false

在这里插入图片描述

用burpsite进行抓包,在最后面输入我们要传进去的值“xxx”(因为根据源代码,只有data为xxx时,才会返回true)
在这里插入图片描述
放包
在这里插入图片描述
这个时候,后台得到的数据应该是这样子的
在这里插入图片描述
在这里插入图片描述
若是修改参数
在这里插入图片描述
则会发生和最初一样的报错,文件不存在
在这里插入图片描述
也就是说,file_get_contents("php://input")能够获取请求原始数据流。
按照函数的检测逻辑,"php://input"被当作了空的文件来读取,输出的自然也是空字符串。然后,当我们在burpsite上抓包,POST中输入data的时候,后台看见的代码应该是$a ="".$data
但是具体是否如此我也不太清楚,网上并没有找到准确的答案。
像这样的:
在这里插入图片描述

这样子也可以
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

经过测试,我发现还有其他一些php伪协议也可以被file_get_contents执行,例如:
php://stdout,php://stdin,php://stderr
php://output,php://memory,php://temp

1.2 php://output

  • php://output 只写的数据流
  • php://output允许你以 print 和 echo 一样的方式写入到输出缓冲区。

示例:
在这里插入图片描述
内容并没有被写入。因为php://input是只读流。
在这里插入图片描述
换成php://output,只写的数据流
在这里插入图片描述
在这里插入图片描述

所谓缓冲区就是,临时存放数据的地方。当我们重新访问时,它就会刷新;
当我们修改文件中的内容时,它也会刷新自己的内容。像这里的 $f 实际上并没有被创建到相对路径下,而是被放置在缓冲区。

1.3 php://filter

  • php://filter是一种元封装器,是PHP中特有的协议流,设计用于数据流打开时的筛选过滤应用,作用是作为一个“中间流”来处理其他流。

  • php://filter目标使用以下的参数作为它路径的一部分。复合过滤链能够在一个路径上指定。

名称 描述 备注
resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选
read=<读链的筛选列表> 可以设定一个或多个过滤器名称,以管道符分隔 可选
write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符分隔。 可选
<;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
page=php://filter/read=convert.base64-encode/resource=../../../../../../phpstudy_pro\WWW\feng\php_output.php

在这里插入图片描述
得到:
PD9waHANCgkNCgkkZj1mb3BlbigicGhwOi8vb3V0cHV0IiwiYSIpOw0KCWZ3cml0ZSgkZiwidGhpcyBpcyBhIHNlbnRlbmNlIik7DQoJZmNsb3NlKCRmKTsNCj8+
进行base64解码
在这里插入图片描述
但是如果是有中文的文件,就不好读取了。base64对中文支持并不友好,需要对中文进行编码之后再转base64。这里我就不尝试了。读取的文件都是非中文的。

php://filter可用于读取包含有敏感信息的PHP等源⽂件,使用base64加密是了防止被浏览器当作XML语言解析,导致出错。

1.4 其它php://伪协议

在这里插入图片描述

2、file://

  • 常用于读取本地文件

示例:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、data://

  • data://伪协议,是数据流封装器,和php://相似,都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过包含你输入的payload来实现目的。

格式:?file=data://text/plain,payload ?>
例1:
?page=data://text/plain,<script>alert(document.cookie)</script>
在这里插入图片描述
例2:
?page=data://text/plain,<?php system("ping 127.0.0.1");?>
在这里插入图片描述例3:
在这里插入图片描述
如果对特殊字符进行了过滤,可以通过base64编码后再输入
?page=data://text/plain;base64,PD9waHAgZWNobyBwaHBpbmZvKCk7Pz4=
在这里插入图片描述

4、phar://

  • php解压缩包的一个函数,不管后缀是什么,都当作压缩包来解压。
  • 格式:
?file=phar://压缩包名/内部文件名
例:phar://x.zip/x.php
步骤:写一个一句话木马shell.php,然后用zip协议压缩为shell.zip,
再将后缀改为png等其他格式

在这里插入图片描述
在这里插入图片描述

注:php 版本大于等于5.3.0,压缩包需要是zip协议压缩,rar不行,将木马文件压缩后,改为其他任意格式的文件都可以正常使用。

5、zip://

在这里插入图片描述

源代码:
在这里插入图片描述
压缩(zip)
在这里插入图片描述
为了验证zip函数可以将任意文件当作压缩包来解压,我们修改后缀为bb.txt
在这里插入图片描述
访问(绝对路径)

在这里插入图片描述
这里貌似可以直接访问本地文件(但是phar不能)
在这里插入图片描述

更多的协议与相关测试,以后有时间再补充

三、总结

  • 文件包含的主要函数有:include()、require()、include_once()、require_once()等。
  • 文件包含支持的伪协议主要有:php://input、php://filter、data://、phar://、zip://等
  • 伪协议在文件包含漏洞上的使用能够帮助我们绕过一些检测机制(比如包含的文件必须是“file”开头之类的判别,又或者利用data伪协议写入一句话木马)。
  • 另外,这些协议的使用还有一些使用条件,我并没有写出来。
    大家可以自行去网上查找相关资料。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件包含支持的伪协议 的相关文章

  • proc_open() 失败并显示“权限被拒绝”

    我正在尝试使用proc open 执行程序并打印结果 但是 我不断收到 许可被拒绝 的消息 已将脚本和可执行文件的 chmod 设置为 0777 但无济于事 ini get safe mode 是假的 可能出什么问题了 我正在使用 Cent
  • ASCII“../”是 PHP 中指示目录遍历的唯一字节序列吗?

    我有一个 PHP 应用程序 它使用 GET参数来选择文件系统上的 JS CSS 文件 如果我拒绝输入字符串包含的所有请求 或者可见 7 位 ASCII 范围之外的字节 当路径传递到 PHP 的底层 基于 C 文件函数时 这是否足以防止父目录
  • 在 wampserver 2.2 上安装 php_imagick.dll PHP 扩展

    我使用的是 32 位操作系统的 Windows 7 我安装了 ImageMagick 6 8 7 Q16Link https www imagemagick org script download php windows我能够从命令行 转换
  • Php 转换 GMT 格式的时间

    我有这个字符串2012 06 27 16 17 06我想将其转换为 GMT 格式 我怎样才能做到这一点 多谢 Use gmdate http php net manual en function gmdate php 使用以下命令将当前日期
  • 将字符串分解为标记,保持引用的子字符串完整

    我不知道我在哪里看到它 但是谁能告诉我如何使用 php 和 regex 来完成这个任务 this is a string that has quoted text inside 我希望能够像这样爆炸它 0 this 1 is 2 a 3 s
  • node-mongodb-native的插入性能

    我正在使用 MongoDB 测试 Node js 的性能 我知道其中每一个都很好 彼此独立 但我正在尝试一些测试来感受它们 我遇到了这个问题 但无法确定来源 问题 我正在尝试在单个 Node js 程序中插入 1 000 000 条记录 它
  • 如何使用 PHP 查找字符串中字符的序列模式?

    假设我有随机的文本块 EAMoAAQAABwEBAAAAAAAAAAAAAAABAgMFBgcIBAkBAQABBQEBAAAAAAAAAAAAAAAGAgMEBQcBCBAAAQMDAgMEBQcIBQgGCwEAAQACAxEEBSEG
  • 纯旧 PHP 对象 (POPO) 一词的确切含义是什么?

    我想了解一下波波 我搜索了 popo 发现它代表 Plain Old Php Object 但我不确定 Plain Old Php Object 的确切含义 我想知道什么是 popo 以及在哪里使用它 谢谢 普通旧 在此处插入语言 对象是一
  • Composer 无法下载文件

    我正在尝试在命令行上使用作曲家 php composer phar update php composer phar install php composer phar self update php composer phar selfu
  • 使用 php ping 网站

    我想创建一个 php 脚本 它将 ping 一个域并列出响应时间以及请求的总大小 这将用于监控网站网络 我尝试过curl 这是我到目前为止的代码 function curlTest2 url clearstatcache return if
  • 在 laravel 中禁用特定路由的 csrf

    我有一个支付系统 数据被提交到第三方网站然后被拉回 当数据返回时 它会到达特定的 url 比如 ok 路由 REQUEST transaction 但由于 Laravel 中间件 我遇到了令牌不匹配的情况 第三方支付API无法生成token
  • 使用 Mock 对 Laravel 5 Mail 进行单元测试

    有没有办法在 Laravel 5 中测试 Mail 尝试了我在互联网上看到的唯一合法的模拟示例 但它似乎只适用于 Laravel 4 下面的当前代码 mock Mockery mock Swift Mailer this gt app ma
  • laravel 5.3 新的 Auth::routes()

    最近开始使用laravel 5 3写博客 但是运行后出现一个问题php artisan make auth 当我运行这个时 它会在我的web php 这是其中的代码 Auth routes Route get home HomeContro
  • 管理面板的 htaccess 重写规则

    我的网络应用程序中有这样的 url 模式 www mysitename com foldername controller method 所有请求的页面首先被重定向到根文件夹上的index php 然后处理请求的页面 但每当我进入管理面板
  • Apache 虚拟主机始终重定向到 /dashboard

    我遇到的问题似乎是一个常见问题 但我找到的任何解决方案似乎都不适合我的情况 我正在尝试设置一个虚拟主机 以便我可以通过 mytestdomain local 访问我的 Laravel 安装的公共文件 但是当我在 google chrome
  • 退出 PHP 脚本后终止或停止 MySQL 查询

    我在工作中运行一个统计服务器 由于运行的查询量很大 该服务器有时会变得非常慢 我们的营销团队使用它作为主要统计工具 团队中的某些人有时会在脚本结束之前退出脚本 通过关闭浏览器或选项卡 同时 SQL 查询继续执行 当有人关闭或离开 PHP 脚
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4
  • 一些基本的 PHP 问题 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是有一些基本的 php 问题来加深我对学习的理解 但我找不到简单的答案 我有一个 php ajax 应用程序 它生成 mysql

随机推荐

  • Linux:apache配置与应用

    Linux apache配置与应用 一 虚拟 Web 主机 1 1 虚拟Web主机 1 2 httpd服务支持的虚拟主机类型 二 基于域名的虚拟主机 2 1 为虚拟主机提供域名解析 2 2 为虚拟主机准备网页文档 2 3 添加虚拟主机配置
  • ezpolt和plot区别_《qqplot2: 数据分析与图形艺术》第4章学习笔记

    第4章 用图层构建图像 每个图层孝可以有自己的数据集和图形属性映射 附加的数据元素可以通过图层添加到图形中 4 2 创建绘图对象 ggplot 函数 有两个主要参数 数据和图形属性映射 这两个参数被设定为绘图的默认参数 只有在新添加的图层里
  • 南桥和北桥-主板芯片组发展史

    转自https baijiahao baidu com s id 1636848759349227507 wfr spider for pc 芯片组无疑是主板重要的组成部分 在我们今天能够看到的主板上芯片组只不过是一个散热片底下的小芯片而已
  • web前后台数据交互的四种方式(转)

    1 利用cookie对象 Cookie是服务器保存在客户端中的一小段数据信息 使用Cookie有一个前提 就是客户端浏览器允许使用Cookie并对此做出相应的设置 一般不赞成使用Cookie 1 后台代码 1 利用cookie对象 Cook
  • 解决 Processing of multipart/form-data request failed. /upload/A.tmp (No such file or directory) 问题

    使用spring boot 上传 刚开始一切正常 但过了一段时间上传文件的时候出现错误 ERROR org apache catalina core ContainerBase Tomcat localhost dispatcherServ
  • 日语(五十元音)_01

    一五十元音图 a i u e o ka ki ku ke ko sa si su se so ta ti tu te to na 二ni nu ne ha ma ya la wa nn 转载于 https www cnblogs com h
  • AD常用快捷键记录

    一 通用快捷键 1 放大缩小 常用方法 ctrl 鼠标滚轮 鼠标中键 移动鼠标 pgup pgup 2 切换不同的布线层 ctrl shift 鼠标滚轮 3 在SCH或者PCB 同一平面内左右翻转 ctrl X 4 在SCH或者PCB 同一
  • php递归数据转二维数组

    1 核心代码 把递归的数组转二维数组 function arrDepth data children 获取key列表 keyLists array keys data 获取数组长度 count count keyLists foreach
  • 一文了解巨量引擎的买量产品矩阵:巨量云图、巨量方舟、巨量广告、巨量纵横

    01 巨量引擎是什么 巨量引擎是抖音集团 原字节跳动 于2022年5月6日更名生效 旗下综合的数字化营销服务平台 致力于让不分体量 地域的企业及个体 都能通过数字化技术激发创造 驱动生意 实现商业的可持续增长 简言之 巨量引擎是字节系流量
  • No rule to make target

    No rule to make target 引言 解决方法 引言 报错 No rule to make target Thirdparty g2o lib libg2o so needed by lib libygz SLAM so 停止
  • 计算机命令指示符大全,常用CMD命令提示符大全:让你玩转Win7系统“运行命令”!...

    CMD命令提示符对于电脑老鸟十分方便的工具之一 通过简单的CMD命令打开各类程序 Win7系统的运行命令提示符通过输入相应的命令来完成相应的操作来提高工作效率 下面装机之家小编整理的有Win7系统的常用CMD命令提示符大全 希望对大家有所帮
  • Centos7部署Vue项目

    一 安装docker 1 安装依赖包 sudo yum install y yum utils device mapper persistent data lvm2 2 设置阿里云镜像源 sudo yum config manager ad
  • redission的看门狗失效问题

    leaseTime这个参数字段表示租期 只要设置了租期 那么看门狗就失效了 不会续期 具有Watch Dog 自动延期机制 默认续30s lock tryLock 10 TimeUnit SECONDS 拿锁失败时会不停的重试 1 2 没有
  • Kubernetes Deployment控制器(二十)

    前面我们学习了 ReplicaSet 控制器 了解到该控制器是用来维护集群中运行的 Pod 数量的 但是往往在实际操作的时候 我们反而不会去直接使用 RS 而是会使用更上层的控制器 比如我们今天要学习的主角 Deployment Deplo
  • 小程序echarts 自定义tooltip提示框及显示隐藏兼容苹果iOS

    很久没有写小程序了 2023年回来补充一句 以下echart为2019年版本踩的坑 后来用了antv f2 性能比echart好很多 卡顿问题也不知道echart官方解决没有 移动端不推荐使用tooltip悬浮框 如果项目非要用 驯服不了产
  • 微软官方制作纯净版的U盘启动盘(详细步骤)

    文章目录 1 前期准备 超过8GB的U盘并且是空的 后面会格式化的 2 如何使用微软官方工具制作win10启动盘 第一步 百度搜索栏中搜索下载win10 找到官网 第二步 点击打开 立即下载工具 第三步 等待下载完成 这是下载完成后的样子
  • 风控趋势

    普惠金融的发展离不开信用体系的建设 截至目前 人行征信报告是部分普惠金融企业对借款申请人进行判断的重要手段 中国人民银行征信中心建设的一代征信系统于2006年正式运行 通过采集 整理 保存 加工企业和个人的基本信息 信贷信息和反映其信用状况
  • solidity 合约权限授权_智能合约编写之Solidity的编程攻略

    3月25日 BSN第二次开发者大赛正式启动 本次大赛以 编写基于多种底层框架的智能合约 为主题 开发者可基于FISCO BCOS等主流底层框架 结合业务场景设计 开发并部署智能合约 为了让大家更好上手智能合约开发 区块链服务网络发展联盟与F
  • Impala基础知识

    概述 Impala是由Cloudera公司开发的新型查询系统 参照Dremel系统进行设计的 提供SQL语义 能查询存储在Hadoop的HDFS和HBase上的PB级大数据 在性能上比Hive高出3 30倍 基于Hive的大数据实时分析查询
  • 文件包含支持的伪协议

    文件包含支持的伪协议 一 什么是伪协议 二 文件包含支持的伪协议用法 1 php 1 1 php input 1 2 php output 1 3 php filter 1 4 其它php 伪协议 2 file 3 data 4 phar