php伪协议
PHP 伪协议(PHP Stream Wrapper)PHP 的伪协议(Protocol Wrapper)是一种机制,答应开辟者通过统一的文件访问函数(如 file_get_contents、fopen、include 等)访问不同类型的数据源,包罗本地文件、长途资源、内存数据、压缩包等。
原理分析
PHP 伪协议本质上是对路径的一种特殊格式扩展,它将以特定协议开头的路径重定向到不同的数据处置惩罚器。比方:
file_get_contents("php://input");
上述代码读取的不是文件,而是 HTTP 请求体的原始内容。
常见伪协议分类及功能
伪协议功能分析file://默认本地文件访问,可省略 file:// 前缀php://filter对文件内容举行过滤,如编码转换(如 base64)php://input读取原始 POST 请求体数据php://memory / php://temp利用内存/暂时文件作为读写流data://读取内联数据,适用于直接包罗字符串内容zip://访问 zip 压缩包中的文件phar://访问 Phar 存档文件内容glob://利用通配符举行文件匹配http:// / https://长途网页数据读取(依靠 allow_url_fopen)ftp://读取长途 FTP 文件expect://执行 shell 命令(高危,默认禁用) 常见利用场景及用法
1. php://filter 读取源码(常用于 CTF)
读取 PHP 文件并举行 base64 编码:
file_get_contents("php://filter/convert.base64-encode/resource=index.php");
可用于源码查看或绕过 Web 服务对 .php 文件的访问限制。
2. php://input 读取原始 POST 数据
$raw = file_get_contents("php://input");
适用于接收非标准 Content-Type 的 POST 数据,好比上传 Webshell 绕过限制。
3. data:// 内联数据作为代码包罗
include("data://text/plain,<?php phpinfo(); ?>");
可以直接把一段字符串当作 PHP 文件执行,常用于代码注入场景。
4. zip:// 读取压缩包内的文件
file_get_contents("zip://shell.zip#shell.php");
配合文件上传漏洞利用,将 PHP 文件嵌入 zip 包中,绕过后缀检测。
5. phar:// 配合反序列化漏洞利用
include("phar://shell.jpg");
Phar 文件在被剖析时会自动触发反序列化逻辑,可用于 POP 链触发。
安全风险
PHP 伪协议可被滥用,尤其是在存在以下漏洞时:
[*] 本地文件包罗(LFI)
[*] 长途文件包罗(RFI)
[*] 反序列化(Phar 利用)
[*] 文件上传(zip 包绕过)
[*] 恣意文件读取(结合 filter)
攻击者可以利用伪协议读取敏感信息、执行恣意代码、走漏源码等。
示例:利用 LFI + php://filter 获取源码
<?php
include($_GET['file']);
访问:
?file=php://filter/convert.base64-encode/resource=flag.php
结果为 flag.php 文件的 base64 编码内容。
总结表
类型示例功能分析本地文件file://index.php常规文件读写网络访问http://example.com获取长途网页数据输入流php://input获取原始 POST 数据编码过滤php://filter/convert.base64-encode/resource=index.php获取源码并 base64 编码输出内联数据data://text/plain,<?php phpinfo(); ?>执行/包罗内嵌内容压缩包zip://shell.zip#shell.php访问 zip 包中的 PHP 文件Phar 文件phar://shell.jpg利用 Phar 举行反序列化利用
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]