PHP 伪协议总结

admin 2024年12月25日11:01:50评论10 views字数 2387阅读7分57秒阅读模式

PHP 伪协议总结

概述

PHP 提供了伪协议,允许灵活的文件和数据处理。这些协议可以成为文件读取、代码执行和数据操作的强大工具。

PHP 伪协议总结

file:// 协议

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

特性

  • • 兼容 allow_url_fopen:开/关
  • • 兼容 allow_url_include:开/关

作用

用于访问本地文件系统,通常用于读取本地文件。在CTF(夺旗)场景中尤其有用于文件检索。

关键特点

  • • PHP 默认的文件系统协议
  • • 支持绝对和相对路径
  • • 适用于本地和网络文件系统
  • • 相对路径基于当前工作目录

使用示例

/absolute/path/to/file.txtrelative/path/to/file.txtfile:///full/path/to/file.txtC:/windows/path/to/file.txt\networksharepathtofile.txt

实际应用场景

// 通过不同方法读取文件include('file:///path/to/file.txt');file_get_contents('file://./local_file.txt');

php:// 协议

php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://inputphp://filter用于读取源码。php://input用于执行php代码。php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。 例如有一些敏感信息会保存在php文件中,如果我们直接利用文件包含去打开一个php文件,php代码是不会显示在页面上的,例如打开当前目录下的2.php

特性

  • • 需要 allow_url_fopen:开/关
  • • allow_url_include:取决于特定流

作用

提供对各种输入/输出流的访问,在CTF场景中对源代码读取和PHP代码执行至关重要。

可用流

php://input原始请求数据的只读流php://output用于输出缓冲的只写流php://fd直接文件描述符访问(PHP 5.3.6+)php://memory内存中的数据流php://temp临时文件流(超过2MB后切换到磁盘)php://filter用于流过滤的元包装器

php://filter 详细参数

参数描述resource指定要过滤的数据流(必填)read可选的读取链过滤器write可选的写入链过滤器

可用过滤器

字符串过滤器

  • • string.rot13:ROT13转换
  • • string.toupper:转换为大写
  • • string.tolower:转换为小写
  • • string.strip_tags:删除HTML和PHP标签

转换过滤器

  • • convert.base64-encode/decode:Base64编码/解码
  • • convert.quoted-printable-encode/decode:quoted-printable编码/解码

压缩过滤器

  • • zlib.deflate/inflate:zlib压缩/解压
  • • bzip2.compress/decompress:bzip2压缩/解压

加密过滤器

  • • mcrypt.*:对称加密算法
  • • mdecrypt.*:对称解密算法

zip://bzip2:// 和 zlib:// 协议

zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。zip://中只能传入绝对路径。要用#分割压缩包和压缩包里的内容,并且#要用url编码成%23(即下述POC中#要用%23替换)只需要是zip的压缩包即可,后缀名可以任意更改。相同的类型还有zlib://和bzip2://

特性

  • • allow_url_fopen:开/关
  • • allow_url_include:开/关

作用

这些压缩流协议可以访问压缩文件中的子文件,其独特之处在于无需指定后缀名,可以修改为任意后缀,如 jpgpnggif 等。

data:// 协议

data:// 同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行

特性

  • • allow_url_fopen:开
  • • allow_url_include:开

作用

自 PHP 5.2.0 起,可以使用 data:// 数据流封装器传递特定格式的数据,通常用于执行PHP代码。

使用方法

data://ttxt/plain,data://ttxt/plain;base64,

http:// 和 https:// 协议

特性

  • • allow_url_fopen:开
  • • allow_url_include:开

作用

允许通过HTTP 1.0 GET方法只读访问文件或资源。在CTF中通常用于远程文件包含。

使用示例

http://example.comhttp://example.com/file.php?var1=val1&var2=val2http://user:[email protected]https://example.com

参考文章

https://segmentfault.com/a/1190000018991087https://link.segmentfault.com/?enc=DfOwlcBVY9wAvTWtmlWeUg%3D%3D.9CrheUpnAWIBHUs98fD5dl4Bq3gQA45Lv8h0kYLQ31T41sSrAI9ncpgfH4rcptpg

原文始发于微信公众号(无尽藏攻防实验室):PHP 伪协议总结

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月25日11:01:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP 伪协议总结https://cn-sec.com/archives/3549572.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息