考点精讲
记忆技巧
filter 读源码、input 执行、data 执行
LFI 读本地、RFI 读远程
LFI 读本地、RFI 读远程
常见误区
- 混淆 LFI(本地)与 RFI(远程)
- 忽略 php://filter 在读取源码上的作用
- 以为文件包含只能包含 .php 文件
真题思路
- 【示例】 要利用文件包含漏洞读取某 PHP 页面源码,最合适的伪协议是()
php://input php://filter/read=convert.base64-encode/resource=xxx.php data:// phar://
答案:B
解析:php://filter 配合 base64 编码可读取源码,B 正确;php://input 用于执行 POST 代码,data:// 用于执行内联代码,phar:// 用于读取 phar 归档,均非「读源码」最合适选择。
常见问题
Q:php://filter 有什么用?
A:php://filter 用于读取文件内容,常配合 base64 编码读源码,如 php://filter/read=convert.base64-encode/resource=index.php,可读出 index.php 的源码。
Q:php://input 能干什么?
A:php://input 读取 POST 请求体,配合 include 可把 POST 中的 PHP 代码包含进来执行。
Q:LFI 和 RFI 有什么区别?
A:LFI(本地文件包含)是包含服务器本地的文件,RFI(远程文件包含)是包含远程服务器上的文件。二者是文件包含漏洞的两种形态。
Q:data:// 协议怎么用?
A:data:// 伪协议可直接携带内联数据(如 base64 编码的代码),配合 include 执行,如 data://text/plain;base64,<base64代码>。
相关知识
教材出处:第4章 Web 漏洞 文件包含与伪协议