PHP文件包含漏洞(LFI/RFI)的高效发现需结合工具与人工验证:Burp Suite适合精细测试,LFISuite.py专用于快速初筛,Nuclei适用于批量检测;无论工具与否,均须通过php://filter读源码、路径穿越和日志包含等手法验证并构建利用链。

PHP文件包含漏洞(LFI/RFI)的发现,不能只靠手动拼URL碰运气。真正高效、可复现的渗透流程,离不开合适的扫描工具辅助探测和验证。工具本身不代替理解,但能帮你快速确认可控点、绕过基础过滤、识别协议支持情况,并减少低级失误。
常见扫描工具选型与适用场景
目前主流工具按定位可分为三类:
-
Burp Suite + 手动插件:适合精细测试。配合Intruder跑路径穿越(
../../../../etc/passwd)、php://filter payload(php://filter/convert.base64-encode/resource=index.php),再用Decoder解码查看源码;配合Logger或自定义Scanner规则,可识别?page=、?file=等典型参数名。 -
LFISuite.py:专为LFI设计的Python脚本,支持自动探测、路径遍历、base64读源码、日志路径爆破(
/var/log/apache2/access.log)、临时文件利用(/tmp/phpXXXXXX)等。命令简单:python LFISuite.py -u "http://target/?file=" -t lfi,适合初筛和快速验证。 -
Nuclei + 自定义模板:适用于批量资产评估。社区已有成熟LFI检测模板(如
lfi-simple-detection.yaml),能触发../../../etc/passwd并比对响应中的root:x:特征;也可自己写模板验证php://filter是否生效,例如检查Base64响应是否含PD9waH(<?php的Base64开头)。
实战中工具常踩的坑
工具不是万能的,很多失败源于环境适配没到位:
- 目标关闭
display_errors,导致报错不回显——此时Burp的“Match and Extract”功能要开启,主动抓取HTTP状态码200但响应体为空的情况,再补测php://filter; - 参数被加了固定后缀(如
include($file . '.html'))——LFISuite默认会尝试.php后缀,需手动改模板或在Burp Intruder中加.html、.php%00、.php%20等变体; - WAF拦截
../或php://关键字——用大小写混合(PhP://Filter)、双重编码(php%253a%252f%252ffilter)、或换data://协议替代(data://text/plain,<?php phpinfo(); ?>); - open_basedir限制导致路径穿越失败——这时别硬刚目录跳转,直接切php://filter读当前目录下的
index.php或config.php,往往更稳。
扫描结果如何落地成有效利用
工具扫出“疑似LFI”,只是起点。下一步必须人工验证并构建利用链:
立即学习“PHP免费学习笔记(深入)”;
- 先确认是否真能包含:用
?file=php://filter/convert.base64-encode/resource=index.php,解码后看到完整PHP源码,说明php://filter可用; - 再判断能否RCE:如果
allow_url_include=On且allow_url_fopen=On,尝试php://input或data://传入<?php system('id'); ?>; - 若不能远程执行,就转向本地可控文件:查
access.log、error.log、session文件、user-agent头注入,再用LFI包含它们实现代码执行; - 所有操作必须配合响应长度、状态码、内容特征交叉判断——比如返回500但长度突增,可能是PHP解析错误,反而说明路径被拼进去了。
不依赖工具也能快速定位的关键动作
即使没装任何扫描器,三个手动动作就能覆盖80%的LFI入口:
- 把参数值换成
index.php,看页面是否变化(说明包含逻辑存在); - 换成
../../../../etc/passwd,看是否返回系统用户列表(确认路径穿越可行); - 换成
php://filter/convert.base64-encode/resource=index.php,用浏览器开发者工具看响应体是否为Base64字符串,再解码验证是否为真实源码。



















