首页/安全/渗透测试与安全评估速查/本地文件包含(LFI)检查
常见漏洞验证121 条

本地文件包含(LFI)检查

参数被拼进 include/require 类调用时可包含本地文件;PHP 等历史系统常见。验证关注参数语义与回显特征。

本地文件包含怎么验证

当参数的取值被拼进包含类调用(PHP 的 include/require、模板引擎的模板名、语言包加载路径)时,攻击者可以用路径穿越或绝对路径去包含服务器上的文件,从而读取源码、配置与凭据。验证的关键是「参数语义」而非盲目试路径:先找一个疑似文件名的参数,替换为一个已知存在的无害文件路径,对比页面输出与报错信息的变化,就能判断包含是否成立。

基本信息

典型入口模板名、语言包、页面路由、文件下载与预览参数
信号页面内容随参数变化、报错暴露包含路径
历史分布PHP 等动态语言的历史系统中最常见
验证边界只读验证,不写入文件,不做日志投毒
修复方向禁止用户输入直接控制包含路径,改用白名单映射的模板标识

典型使用场景

  • 老系统评估中的常规项,尤其是自研模板与路由机制
  • 文件下载与预览接口的参数分析
  • 排查「传入不同参数页面结构不同」这类现象
  • 评估修复方案:白名单映射是否覆盖全部入口
  • 与目录穿越类问题合并评估,判断读取范围

验证步骤

验证步骤
# 1. 找疑似文件名参数:page=、lang=、tpl=、file=、view=
curl -s 'https://example.com/index.php?page=home'
# 2. 替换为一个已知存在的无害文件路径(如系统自带的说明文件),对比输出变化
curl -s 'https://example.com/index.php?page=../../etc/hostname'
# 3. 观察报错信息中出现的包含路径与文件名
# 4. 记录参数、现象与影响(不保存目标文件内容)
# 不使用日志投毒方式验证:写入的内容难以清理,且会改变目标环境

现象与判断

现象含义处置
页面内容随参数变化且返回文件内容包含成立,可读取文件列缺陷并按读取范围定级
返回文件内容但被截断部分读取或存在过滤记录过滤规则,评估绕过可能性
报错暴露包含路径存在包含行为但被限制作为独立信息泄露问题记录
页面无任何变化参数未进入包含或已白名单化记录为已核查
修复视角:把用户输入映射为固定的模板标识(如数字 ID 到文件的映射表),而不是直接拼路径;需要动态加载时用白名单枚举。
不要用日志投毒方式验证:写入的内容会留在目标环境,清理困难且影响业务,属于高风险验证手段。

易错点

  • 用日志投毒方式验证:写入内容难以清理,还会改变目标环境状态
  • 把普通错误页当作包含成功:误判会让开发方无从复现
  • 只试一种路径写法就放弃:编码、截断与参数污染等写法需分别确认,但要控制请求量
  • 不记录具体参数名:无法复现的结论在报告中价值很低

数据来源与参考

  • OWASP WSTG WSTG-ATHZ-01(LFI/RFI)
  • CWE-98
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌