PHP伪协议本身非漏洞,但被用于用户可控的include等函数时会触发或放大LFI/RFI漏洞;常见危险协议包括php://filter(读源码)、php://input(无文件RCE)、data://(内联代码执行)、phar://与zip://(反序列化利用)、file://(路径遍历读取系统文件)。

PHP 伪协议本身不是漏洞,但当它们被用在用户可控的文件包含函数(如 include、require)中时,就会成为触发或放大文件包含漏洞(LFI/RFI)的关键杠杆。真正的问题从来不是协议本身,而是程序把外部输入直接拼进危险函数,且未做路径校验、内容过滤与上下文隔离。
下面这几类伪协议,在真实攻防和代码审计中最常被利用,每一种都对应明确的攻击意图和典型危害:
php://filter:读源码最常用、最隐蔽的入口
这个协议不执行代码,但能对目标文件内容做实时编码/解码/转换,绕过“只允许.php后缀”的表面限制。
- 常见 payload:
?file=php://filter/read=convert.base64-encode/resource=/var/www/html/config.php - 效果:把 PHP 配置文件原样转成 Base64 返回,解码后数据库账号密码全暴露。
- 关键点:它不受
allow_url_fopen和allow_url_include控制,只要include()参数可控,基本必中。 - 容易被忽略的是:它还能链式使用多个过滤器,比如
string.tolower|convert.base64-encode,用来绕过简单关键词检测。
php://input:实现无文件 RCE 的核心通道
当服务端 include($_POST['file']) 或类似逻辑存在,且 POST 数据未被解析为变量时,php://input 就能将原始请求体当作 PHP 代码执行。
立即学习“PHP免费学习笔记(深入)”;
- 攻击方式:GET 传
?file=php://input,再在 POST body 中直接写<?php system('id'); ?> - 要求:
allow_url_include=On(但很多老系统仍开着);且不能有enctype="multipart/form-data"(会干扰流读取)。 - 危害直接:无需上传文件、不写磁盘、无日志痕迹,属于高隐蔽性远程代码执行。
data://:完全脱离服务器文件系统的注入方式
它把数据本身编码进 URL,让 PHP 直接解析执行,相当于“把木马写在请求里”。
- 典型 payload:
?file=data:text/plain,<?php%20echo%20'pwned';?> - 更强变体:
data:text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQiIC9ldGMvcGFzc3dkKTs/Pg==(Base64 编码的cat /etc/passwd) - 注意:等号
=和加号+必须 URL 编码,否则解析失败;部分 WAF 会拦截data:开头,但大小写变形(Data:)、双写(da%61ta:)常可绕过。
phar:// 和 zip://:配合反序列化打组合拳
这两个协议本身不执行代码,但能触发 PHP 反序列化流程,尤其在 unserialize() 或某些扩展(如 exif_read_data)处理归档内容时。
- 利用前提:服务器上存在可被
phar://加载的恶意 Phar 文件(需提前上传或存在于日志、缓存等可写目录) - payload 示例:
?file=phar:///var/www/uploads/malicious.phar/test.txt - 实际效果:如果
test.txt是一个反序列化入口点,就能触发 gadget 链,最终 getshell。 - 风险升级点:PHP 7.4+ 默认禁用
phar.stream.wrapper,但若phar.readonly=Off,攻击者还能动态生成 Phar 文件。
file://:看似老实,实则最基础也最难防
它只是读本地文件,但正因为“太基础”,反而最容易被忽视防御。
- 不受任何 PHP 远程配置影响,
allow_url_fopen=Off也不影响它。 - 配合路径遍历(
../../../etc/shadow)可读任意系统文件。 - 若配合
/proc/self/environ、/proc/self/fd/0等特殊路径,还能读取请求头、环境变量甚至未关闭的输入流,进一步辅助信息收集。
这些协议之所以危险,根本在于 PHP 的设计哲学:信任流,不信任路径。include() 只关心“能不能读到内容”和“内容里有没有 <?php”,从不验证“这该不该被包含”。一旦用户输入进入这个链条,整个解析上下文就失控了。
不复杂但容易忽略



















