相关推荐recommended
PHP伪协议filter详解,php:filter协议过滤器
作者:mmseoamin日期:2023-12-14

「作者主页」:士别三日wyx

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者

「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第1张

php://filter

  • 一、访问数据流
  • 二、过滤数据流
  • 三、多个过滤条件
  • 四、过滤并写入数据流
  • 五、过滤器
    • 1、string.rot13
    • 2、string.toupper
    • 3、string.tolower
    • 4、convert.base64-encode
    • 5、convert.iconv.*

      php:// 用来访问输入和输出流(I/O streams)。

      输入/输出流也就是「数据流」数据流可以是某个文件(xx.php)或某个url(http://www.baidu.com)。

      php://filter 可以在访问数据流之前进行「过滤」,并指定过滤方式。

      php://filter 有4个可用参数:

      名称描述
      resource=<要过滤的数据流>这个参数是必须的。它指定了你要筛选过滤的数据流。
      read=<读链的筛选列表>该参数可选。可以设定一个或多个过滤器名称
      write=<写链的筛选列表>该参数可选。可以设定一个或多个过滤器名称
      <;两个链的筛选列表>任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

      提示:read/write参数不是必须的,可以直接使用过滤器,比如 php://filter/convert.base64-encode/resource=hello.php

      一、访问数据流

      直接「读取」数据源的内容resource 参数必须位于 php://filter 的末尾,并指定需要过滤筛选的数据流。

      1)读取「url形式」的数据流。

       
      

      因为没指定过滤条件弹了几条告警,不影响执行结果,不用管。

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第2张

      2)读取「文件形式」的数据流。

       
      

      同样因为没指定过滤条件弹了几条告警,不影响执行结果,不用管。

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第3张

      二、过滤数据流

      读取数据源之前,添加「过滤条件」

      1)以「大写字母」读取 http://www.baidu.com页面的全部内容

       
      

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第4张

      2)以「小写字母」读取 hello.php文件的全部内容

       
      

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第5张

      1. 将 hello.php文件的内容「base64加密」后读取出来。

        include()包含的文件,默认会执行文件中的代码,但加密后的内容不会被执行,而是直接输出在页面中,复制后解密就能拿到被包含文件的内容。

       
      

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第6张

      三、多个过滤条件

      同时使用「多个过滤条件」时,使用管道符 | 分隔。

      1)base64加密并且转换为大写

       
      

      按照「从左到右」的顺序过滤,过滤条件的顺序可能会影响过滤的结果,比如:先转换大写再过滤的话,输出的结果就会变成小写的base64编码。

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第7张

      四、过滤并写入数据流

      write 参数,过滤指定字符,并将过滤后的结果「输出」到指定文件中。

      1)过滤字符,并输出到 result.txt文件中。

       
      

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第8张

      五、过滤器

      1、string.rot13

      string.rot13 ,PHP4.3.0及以后版本,对数据流的内容进行「rot13编码」,等于用str_rot13() 函数编码。

      ROT13(otate by 13 places)也叫回转13位,是一种替换式密码。

      ROT13会把每一个字母替换成13位之后的字母,也就是把a换成n,b换成o,以此类推;如果超过了26个字母的范围,就会从开头重新开始。

      ROT13转换对照表
      ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
      NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

      常用方式:rot13编码读取文件内容后,复制页面输出的编码后的内容,手动用str_rot13()函数解码。

      # rot13编码后读取 hello.php文件的内容
      include('php://filter/read=string.rot13/resource=hello.php');
      # 手动复制编码后的结果,输出rot13解码后的内容。
      print str_rot13(" 
      

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第9张

      2、string.toupper

      string.toupper,PHP5.0.0及以后版本,将数据流转换成「大写」,类似于 strupper() 函数。

      需要注意的是,string.tuupper不是直接将文件内容变成大写,而是先执行文件内容,再将执行后的结果转换成大写。

      # string.touper过滤器将 hello.php文件内容转换成大写
      include('php://filter/read=string.toupper/resource=hello.php');
      echo "\n";
      # 手动复制 hello.php文件内容,并使用strtoupper()转换成大写
      echo strtoupper(" 
      

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第10张

      3、string.tolower

      string.tolower,PHP5.0.0及以后版本,将数据流转换成「小写」,类似 strtolower()函数。

      和 string.toupper,也是先执行文件的内容,再将执行后的结果转换成小写。

      4、convert.base64-encode

      1)convert.base64-encode,对数据流的内容进行「base64编码」,相当于 base64_encode()函数。

      hello.php文件

       
      

      filter.php文件

       
      

      对 hello.php文件内容进行base64编码

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第11张

      2)编码后的内容可以使用 base64_decode()函数解码

      print base64_decode('PD9waHANCmVjaG8gJ2hlbGxvLnBocOaWh+S7tueahOWGheWuue+8mmhlbGxvIHRlc3QnOw0KDQoNCg0KDQo=');
      

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第12张

      5、convert.iconv.*

      convert.iconv.*,将数据流的内容按照「指定字符编码」来转换,使用格式有两种:

      格式一:.分隔

      convert.iconv.. 
      

      格式二:/分隔

      convert.iconv./
      

      比如,convert.iconv.utf-8*.utf-16* 的意思就是把文件的字符编码从 utf-8* 转换为 utf-16*

      支持的字符编码有:

      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*
      EUC-JP*
      SJIS*
      eucJP-win*
      SJIS-win*
      ISO-2022-JP
      ISO-2022-JP-MS
      CP932
      CP51932
      SJIS-mac (alias: MacJapanese)
      SJIS-Mobile#DOCOMO (alias: SJIS-DOCOMO)
      SJIS-Mobile#KDDI (alias: SJIS-KDDI)
      SJIS-Mobile#SOFTBANK (alias: SJIS-SOFTBANK)
      UTF-8-Mobile#DOCOMO (alias: UTF-8-DOCOMO)
      UTF-8-Mobile#KDDI-A
      UTF-8-Mobile#KDDI-B (alias: UTF-8-KDDI)
      UTF-8-Mobile#SOFTBANK (alias: UTF-8-SOFTBANK)
      ISO-2022-JP-MOBILE#KDDI (alias: ISO-2022-JP-KDDI)
      JIS
      JIS-ms
      CP50220
      CP50220raw
      CP50221
      CP50222
      ISO-8859-1*
      ISO-8859-2*
      ISO-8859-3*
      ISO-8859-4*
      ISO-8859-5*
      ISO-8859-6*
      ISO-8859-7*
      ISO-8859-8*
      ISO-8859-9*
      ISO-8859-10*
      ISO-8859-13*
      ISO-8859-14*
      ISO-8859-15*
      ISO-8859-16*
      byte2be
      byte2le
      byte4be
      byte4le
      BASE64
      HTML-ENTITIES (alias: HTML)
      7bit
      8bit
      EUC-CN*
      CP936
      GB18030
      HZ
      EUC-TW*
      CP950
      BIG-5*
      EUC-KR*
      UHC (alias: CP949)
      ISO-2022-KR
      Windows-1251 (alias: CP1251)
      Windows-1252 (alias: CP1252)
      CP866 (alias: IBM866)
      KOI8-R*
      KOI8-U*
      ArmSCII-8 (alias: ArmSCII8)
      

      粉丝福利

      评论区留言即可参与抽奖,下图9本书中任选一本。

      PHP伪协议filter详解,php:filter协议过滤器,在这里插入图片描述,第13张

      618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,清华

      社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多 个 IT

      开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!