文章目录

  • php://filter伪协议总结
    • php://filter伪协议介绍
    • php://filter伪协议使用方法
    • php://filter过滤器分类
    • filter字符串过滤器
      • string.rot13
      • string.toupper
      • string.tolower
      • string.strip_tags
    • filter转换过滤器
      • convert.base64-encode
      • convert.base64-decode
      • convert.quoted-printable-encode
      • convert.quoted-printable-decode
      • convert.iconv.*
    • filter压缩过滤器
      • zlib.deflate(压缩)
      • zlib.inflate(解压)
      • bzip2.compress (压缩)
      • bzip2.decompress (解压)
    • filter加密过滤器
      • mcrypt.*
      • mdecrypt.*
  • 参考
    • [php://filter 官方文档](https://www.php.net/manual/zh/filters.php)
    • [PHP Filter伪协议Trick总结](https://blog.csdn.net/gental_z/article/details/122303393#:~:text=php%3A%2F%2Ffilter%20%E6%98%AF%20php%20%E4%B8%AD%E7%8B%AC%E6%9C%89%E7%9A%84%E4%B8%80%E7%A7%8D%E5%8D%8F%E8%AE%AE%EF%BC%8C%E5%AE%83%E6%98%AF%E4%B8%80%E7%A7%8D%E8%BF%87%E6%BB%A4%E5%99%A8%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BD%9C%E4%B8%BA%E4%B8%80%E4%B8%AA%E4%B8%AD%E9%97%B4%E6%B5%81%E6%9D%A5%E8%BF%87%E6%BB%A4%E5%85%B6%E4%BB%96%E7%9A%84%E6%95%B0%E6%8D%AE%E6%B5%81%E3%80%82,%E9%80%9A%E5%B8%B8%E4%BD%BF%E7%94%A8%E8%AF%A5%E5%8D%8F%E8%AE%AE%E6%9D%A5%E8%AF%BB%E5%8F%96%E6%88%96%E8%80%85%E5%86%99%E5%85%A5%E9%83%A8%E5%88%86%E6%95%B0%E6%8D%AE%EF%BC%8C%E4%B8%94%E5%9C%A8%E8%AF%BB%E5%8F%96%E5%92%8C%E5%86%99%E5%85%A5%E4%B9%8B%E5%89%8D%E5%AF%B9%E6%95%B0%E6%8D%AE%E8%BF%9B%E8%A1%8C%E4%B8%80%E4%BA%9B%E8%BF%87%E6%BB%A4%EF%BC%8C%E4%BE%8B%E5%A6%82%20base64%20%E7%BC%96%E7%A0%81%E5%A4%84%E7%90%86%EF%BC%8C%20rot13%20%E5%A4%84%E7%90%86%E7%AD%89%E3%80%82)
    • 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,<?php phpinfo();?>");

上述代码对 <?php phpinfo();?> 进行了两次base64编码处理。

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

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

php://filter过滤器分类

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

1、字符串过滤器

2、转换过滤器

3、压缩过滤器

4、加密过滤器

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>  (两种写法的语义都相同)。

<input-encoding>和<output-encoding> 就是编码方式,有如下几种;

UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-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.php
abcdef

输出:

zlib.inflate(解压)

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

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 可选 cbc cbc, 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的各种过滤器

php://filter伪协议(总结)相关推荐

  1. PHP Filter伪协议Trick总结

    PHP Filter伪协议Trick总结 前言:最近在学习的过程中碰到了很多的filter协议的小trick,在此做一个总结以及对filter协议的一些探索. PHP Filter协议介绍 ​ php ...

  2. 第十天文件包含漏洞 php伪协议

    文件包含漏洞 PHP中常见包含文件函数 常见文件包含漏洞代码 文件包含漏洞的危害 伪协议 php使用input读取post请求体的内容 Data:// 数据 Zlib:// 压缩流 文件包含的漏洞的分 ...

  3. 90.网络安全渗透测试—[常规漏洞挖掘与利用篇6]—[文件包含-PHP封装伪协议详解实战示例]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.文件包含-PHP封装伪协议简介 1.php内置封装协议 2.data://命令执行-伪协议 3.zip:// ...

  4. php伪协议语法,php文件包含漏洞(input与filter)

    php://input php://input可以读取没有处理过的POST数据.相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置.php:/ ...

  5. php 伪协议 lfi,php://伪协议(I/O)总能给你惊喜——Bugku CTF-welcome to bugkuctf

    今天一大早BugkuCTF 的welcome to bugkuctf 就给了我一发暴击:完全不会啊...光看源码就发现不知道怎么处理了,于是转向writeup求助.结果发现这是一道非常有营养的题目,赶 ...

  6. CTF-Web-常用伪协议用法:

    常用伪协议用法: 1.php伪协议 用法 php://input,用于执行php代码,需要post请求提交数据. php://filter,用于读取源码,get提交参数.?a=php://filter ...

  7. base64 转文件_PHP伪协议与文件包含

    PHP伪协议与文件包含 PHP伪协议与文件包含 php:// 协议 php://input php://filter data:// 协议 file:// 协议 zip://.bzip2://.zli ...

  8. PHP伪协议-文件包含漏洞常用的伪协议

    在实战中文件包含漏洞配合PHP的伪协议可以发挥重大的作用,比如读取文件源码,任意命令执行或者开启后门获取webshell等,常用的伪协议有 php://filter 读取文件源码 php://inpu ...

  9. 文件包含漏洞 文件伪协议利用

    目录 0x0 文件包含漏洞原理 0x1 检测文件包含漏洞 0x2 文件包含漏洞类型 0x3 文件协议流 0x4 实战 简介 #文件包含漏洞 原理,检测,类型,利用,修复等 #文件包含各个脚本代码 AS ...

最新文章

  1. onchange事件只生效一次的问题
  2. PostgreSQL入门,PostgreSQL和mysql
  3. springboot项目输入打印日志文件到本地
  4. 开发板A/D转换原理
  5. 自动化测试:Selenium webdriver 学习笔记-C#版(四)
  6. Python Django Session中存取值常用API
  7. 企业微服务:实现crud操作之dao接口
  8. 粉红小猪中有一个叫“快乐小鸡”的游戏
  9. Auto login to your computer
  10. 开源 | 高颜值神经网络可视化工具
  11. OpenSSL在Windows下使用vs2010的编译安装
  12. ckfinder java 源码,关于不再找java使用CKFinder的原因
  13. Jrebel激活方法
  14. 项目引用android-support-v7-appcompat,如何使用android-support-v7-appcompat
  15. 分享一个小软件fences(桌面管理软件)
  16. element-tree 实现部门-人员选择(支持ID相同)
  17. 四旋翼飞行器14——无人机中的OSD、数传、图传、FPV是什么?
  18. App登录方式和测试重点总结
  19. 大比例尺地图分幅行列编号参照表
  20. 常用基本初等函数的求导公式推导

热门文章

  1. Photoshop 2023 (ps 2023)
  2. MySQL update语句使用连表(join)
  3. 04.HTML基础-表单标签基础标签
  4. Unsupported major.minor version 52.0那点坑
  5. 【搬家】【软件工具】BitBucket 初体验-安装与配置
  6. 《东方巨龙》一首能感动所有中国人的歌,上榜一周点播过百万!
  7. 数据结构上机实验6.15
  8. html页面颜色对应代码
  9. Word目录中自动添加自定义样式的多级标题的方法
  10. 杭州到温州老家自驾路线优化与整理