1. 项目概述:文件下载漏洞靶场搭建与实战
Pikachu漏洞练习平台中的"Unsafe Filedownload"模块,是Web安全领域经典的任意文件下载漏洞(Arbitrary File Download)实战环境。这个靶场模拟了开发者未对文件下载功能做安全校验时,攻击者如何通过目录遍历手段获取服务器敏感文件。我在渗透测试项目中遇到过大量类似案例,其中某次通过该漏洞直接拿到了客户数据库配置文件,导致整个内网沦陷。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 漏洞原理深度解析
2.1 任意文件下载漏洞的形成机制
当Web应用提供文件下载功能时,如果直接将用户输入的文件名拼接到文件路径中,且未做任何过滤和校验,就会形成高危漏洞。例如:
php复制// 危险示例:直接拼接用户输入
$file_path = "/downloads/" . $_GET['filename'];
readfile($file_path);
攻击者通过构造../../etc/passwd这样的相对路径,就能突破下载目录限制。我曾用Burp Suite抓包修改参数,在真实项目中下载到Windows系统的C:\Windows\win.ini文件。
2.2 Pikachu靶场的漏洞实现分析
查看Pikachu的PHP源码会发现关键缺陷:
php复制$filename=$_GET['filename'];
$file_path = "download/{$filename}";
if(file_exists($file_path)){
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file_path));
readfile($file_path);
}
这里仅用file_exists()检查文件存在性,未对路径做规范化处理。basename()函数虽然能防止部分攻击,但当配合目录遍历时仍会失效。
3. 漏洞利用实战演示
3.1 基础利用:下载系统敏感文件
- 启动Pikachu环境(建议使用Docker版)
- 访问`/uns
