我的编程空间,编程开发者的网络收藏夹
学习永远不晚

php://filter伪协议(总结)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

php://filter伪协议(总结)

前言

这篇文章主要是关于php://filter伪协议中的知识点总结,分析了常见的用法

文章目录

php://filter伪协议总结

php://filter伪协议介绍

php://filterphp中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理,rot13处理等。官方解释为:

php://filter 是一种元封装器,设计用于数据流打开时的筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(),在数据流内容读取之前没有机会应用其他过滤器。

php://filter伪协议可以用于如下函数:

include()

file()

file_get_contents()

readfile()

file_put_contents()

可以用于读取、写入文件等函数,

php://filter伪协议使用方法

php://filter伪协议的一般使用方法为:

php://filter/过滤器|过滤器/resource=要过滤的数据流

过滤器可以设置多个,使用管道符 |分隔,按照从左到右的方式依次使用相应的过滤器进行过滤处理,例如:

echo file_get_contents("php://filter/read=convert.base64-encode|convert.base64-encode/resource=data://text/plain,");

上述代码对 进行了两次base64编码处理。

read可以省略,会自动根据函数作用来决定read还是write。

我们使用了 data伪协议file_get_contents() 想要读取的内容变成了data伪协议输入的内容。

php://filter过滤器分类

根据 php://filter官方说明 php://filter协议过滤器 大致分为以下四类:

字符串过滤器

转换过滤器

压缩过滤器

加密过滤器

filter字符串过滤器

每个过滤器都正如其名字暗示的那样工作并与内置的 PHP 字符串函数的行为相对应。

字符串过滤器以 string 开头,常见的过滤器有 rot13touppertolowerstrip_tags

string.rot13

使用该过滤器也就是用 str_rot13() 函数处理所有的流数据。

echo file_get_contents("php://filter/read=string.rot13/resource=data://text/plain,abcdefg");//输出: nopqrst

string.toupper

string.tolower

该过滤器就是将字符串进行大小写转换.

等同于strtolower()strtoupper() 函数

echo file_get_contents("php://filter/read=string.toupper/resource=data://text/plain,abcdefg");//输出 ABCDEFGecho file_get_contents("php://filter/read=string.tolower/resource=data://text/plain,ABCDEFG");//输出 abcdefg

string.strip_tags

本特性已自 PHP 7.3.0 起废弃。强烈建议不要使用本特性。

使用此过滤器等同于用 strip_tags() 函数处理所有的流数据。可以用两种格式接收参数:一种是和 strip_tags() 函数第二个参数相似的一个包含有标记列表的字符串,一种是一个包含有标记名的数组。

strip_tags() — 从字符串中去除 HTML 和 PHP 标签

strip_tags对数据流进行strip_tags函数的处理,该函数功能为剥去字符串中的 HTMLXML 以及 PHP 的标签,简单理解就是包含有尖括号中的东西。

echo file_get_contents("php://filter/string.strip_tags/resource=flag.php");//flag.php<b>flag{abc}</b>    //输出:flag{abc}

filter转换过滤器

主要含有三类,分别是base64的编码转换、quoted-printable的编码转换以及iconv字符编码的转换。该类过滤器以convert(转换)开头。

convert.base64-encode

convert.base64-decode

将数据进行base64编码、解码

使用这两个过滤器等同于分别用 base64_encode()base64_decode() 函数处理所有的流数据。

echo file_get_contents("php://filter/read=convert.base64-encode/resource=data://text/plain,abc");//输出:YWJj    abc的base64编码echo file_get_contents("php://filter/read=convert.base64-decode/resource=data://text/plain,YWJj");//输出:abc

convert.quoted-printable-encode

convert.quoted-printable-decode

使用此过滤器的 decode 版本等同于用 quoted_printable_decode() 函数处理所有的流数据。没有和 convert.quoted-printable-encode 相对应的函数。

quoted-printable-encode可译为可打印字符引用编码,可以理解为将一些不可打印的ASCII字符进行一个编码转换,转换成:=后面跟两个十六进制数,例如:

echo file_get_contents("php://filter/convert.quoted-printable-encode/resource=data://text/plain,666".chr(12));//输出:666=0C//将ascii码为12的字符编码为:=0C

quoted-printable-decode 与上述操作相反,将 =后面跟上两个16进制数 转换为不可打印的ascii字符

echo file_get_contents("php://filter/convert.quoted-printable-decode/resource=data://text/plain,666=0A888");输出:666      // =0A 是 \n 的编码888

convert.iconv.*

在激活 iconv 的前提下可以使用 convert.iconv.* 压缩过滤器, 等同于用 iconv() 处理所有的流数据。

iconv过滤器 就是对输入输出的数据进行编码转换,即将输入的字符串编码转换成输出指定的编码

写法:

该过滤器不支持参数,但可使用输入/输出的编码名称,组成过滤器名称,比如 :        convert.iconv.<input-encoding>.<output-encoding>     或convert.iconv.<input-encoding>/<output-encoding>  (两种写法的语义都相同)。    

就是编码方式,有如下几种;

UCS-4*UCS-4BEUCS-4LE*UCS-2UCS-2BEUCS-2LEUTF-32*UTF-32BE*UTF-32LE*UTF-16*UTF-16BE*UTF-16LE*UTF-7UTF7-IMAPUTF-8*ASCII*

例如:

abcdefg 从编码 UCS-2LE 转换为 UCS-2BE

echo file_get_contents("php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=data://text/plain,abcdefg");//输出: badcfe

就是两两字符顺序互换一下(两个两个一组)如果不是字符串2的倍数,最后1个字符不会被输出

abcdefgh1234 从编码 UCS-4LE 转换为 UCS-4BE :

echo file_get_contents("php://filter/convert.iconv.UCS-4LE.UCS-4BE/resource=data://text/plain,abcdefgh1234");//输出:dcbahgfe4321

(四个一组)将每一组内的成员倒序排列,如果不是字符串4的倍数,最后几个字符不会被输出

filter压缩过滤器

虽然 压缩封装协议 提供了在本地文件系统中 创建 gzip 和 bz2 兼容文件的方法,但不代表可以在网络的流中提供通用压缩的意思, 也不代表可以将一个非压缩的流转换成一个压缩流。对此,压缩过滤器可以在任何时候应用于任何流资源。

zlib.deflate(压缩)

include("php://filter/read=zlib.deflate/resource=test.php");//test.phpabcdef

输出:

image-20230107171528799

zlib.inflate(解压)

include("php://filter/read=zlib.inflate/resource=test.php");//test.php内容为上面压缩后的内容
image-20230107171630762

bzip2.compress (压缩)

bzip2.decompress (解压)

bzip2.compressbzip2.decompress 工作的方式与上面讲的 zlib 过滤器相同

filter加密过滤器

加密过滤器特别适用于文件/数据流的加密。

本特性已自 PHP 7.1.0 起废弃。强烈建议不要使用本特性。

mcrypt.*

mdecrypt.*

mcrypt.*mdecrypt.* 使用 libmcrypt 提供了对称的加密和解密。这两组过滤器都支持 mcrypt 扩展库中相同的算法,格式为 mcrypt.ciphername,其中 ciphername 是密码的名字,将被传递给 mcrypt_module_open()。有以下五个过滤器参数可用:

mcrypt 过滤器参数

参数是否必须默认值取值举例
mode可选cbccbc, cfb, ecb, nofb, ofb, stream
algorithms_dir可选ini_get(‘mcrypt.algorithms_dir’)algorithms 模块的目录
modes_dir可选ini_get(‘mcrypt.modes_dir’)modes 模块的目录
iv必须N/A典型为 8,16 或 32 字节的二进制数据。根据密码而定
key必须N/A典型为 8,16 或 32 字节的二进制数据。根据密码而定

后记

如果您觉得这篇文章不错的话,请多多点赞支持一下,您的支持是我最大的动力!

参考

php://filter 官方文档

PHP Filter伪协议Trick总结

php://filter的各种过滤器

来源地址:https://blog.csdn.net/qq_61839115/article/details/128593214

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

php://filter伪协议(总结)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2023-08-31
2023-09-03
2023-09-01

PHP伪协议基本原理介绍

这篇文章主要介绍了PHP伪协议,php中有很多封装协议,最常见的如file协议,php协议,data协议,zip和phar协议等等
2022-11-16

文件包含及PHP伪协议怎么用

今天小编给大家分享一下文件包含及PHP伪协议怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。文件包含文件包含漏洞是“代码
2023-06-30

总结CCNA路由协议的IGRP内容

  路由器提供了异构网互联的机制,实现将一个网络的数据包发送到另一个网络。而路由就是指导IP数据包发送的路径信息。路由协议就是在路由指导IP数据包发送过程中事先约定好的规定和标准。现在就跟着小编一起来学习一下:总结CCNA路由协议的IGRP内容。  在教程开始之前,小编先为大家简单的介绍一下:IGRP(Interior
总结CCNA路由协议的IGRP内容
2024-04-17

总结CCNA路由协议的RIP内容

  CCNA思科认证网络工程师(CCNA)是思科职业认证的第一步,CCNA认证标志着具备安装、配置、运行中型路由和交换网络,并进行故障排除的能力。在这篇教程中,小编会为大家总结CCNA路由协议的RIP内容。  那么大家知道什么叫做RIP吗?路由信息协议(RoutingInformationProtocol,缩写:RIP
总结CCNA路由协议的RIP内容
2024-04-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录