AI 助教问 AI 助教
东方瑞通 · CISP-PTE

文件包含与伪协议

文件包含漏洞指程序包含文件的参数可控,攻击者包含恶意文件或利用伪协议读取源码、执行代码。

考点精讲

  1. PHP 的 include/require 包含文件时若参数可控即存在漏洞。伪协议:php://filter 读取源码(如 php://filter/read=convert.base64-encode/resource=index.php)、php://input 执行 POST 中的代码、data:// 执行内联代码、phar://、zip:// 等。本地文件包含(LFI)读本地文件,远程文件包含(RFI)包含远程文件。

记忆技巧

filter 读源码、input 执行、data 执行
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 漏洞 文件包含与伪协议

AI 助教

让 AI 助教带你深入学习,把你卡住的地方直接问它

随时为您答疑解惑

开始答疑