Pikachu靶场通关之Unsafe Filedownload
字数 2137 2025-08-15 21:33:30

不安全文件下载漏洞(Unsafe File Download)全面解析

一、漏洞原理

不安全文件下载漏洞(Unsafe File Download)是指Web系统在实现文件下载功能时,由于对用户提供的文件名参数缺乏充分的安全验证,导致攻击者可以通过构造恶意文件名路径下载服务器上的任意文件。

漏洞产生机制

  1. 典型工作流程

    • 用户点击下载链接
    • 前端发送包含文件名的下载请求
    • 后台接收请求并将文件名直接拼接到下载路径
    • 服务器返回对应文件内容
  2. 漏洞根源

    • 直接信任前端传入的文件名参数
    • 未对文件名进行安全过滤和验证
    • 允许路径回溯符号(如../)
    • 未限制文件下载目录范围
  3. 攻击原理
    攻击者通过修改filename参数为精心构造的路径(如../../etc/passwd),利用路径回溯下载系统敏感文件。

二、漏洞利用方法

基本利用步骤

  1. 发现文件下载功能点
  2. 拦截下载请求(使用Burp Suite等工具)
  3. 修改filename参数为恶意路径
  4. 重放请求获取敏感文件

靶场示例分析

以Pikachu靶场为例:

  1. 页面提供NBA球员图片下载功能
  2. 点击下载时传递filename参数
  3. 修改参数为../down_nba.php可下载后台源码
  4. 通过源码审计可能发现更多漏洞

敏感文件路径列表

Windows系统敏感文件

文件路径 用途
C:\boot.ini 查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml IIS配置文件
C:\Windows\repair\sam 存储系统初次安装的密码
C:\Program Files\mysql\my.ini MySQL配置
C:\Program Files\mysql\data\mysql\user.MYD MySQL root用户信息
C:\Windows\php.ini PHP配置信息
C:\Windows\win.ini Windows基本系统配置文件

Linux系统敏感文件

文件路径 用途
/etc/passwd 用户账户信息
/etc/shadow 用户密码哈希
/etc/my.cnf MySQL配置文件
/etc/httpd/conf/httpd.conf Apache配置文件
/root/.bash_history 用户历史命令记录
/root/.mysql_history MySQL历史命令记录
/proc/mounts 系统挂载设备信息
/proc/config.gz 内核配置文件
/var/lib/mlocate/mlocate.db 全文件路径数据库
/proc/self/cmdline 当前进程cmdline参数

三、漏洞危害

不安全文件下载漏洞可导致以下严重后果:

  1. 系统敏感信息泄露

    • 获取系统密码文件(/etc/passwd, /etc/shadow)
    • 读取系统配置文件
    • 获取服务配置信息(数据库、Web服务器等)
  2. 源代码泄露

    • 下载网站业务源代码
    • 通过代码审计发现更多漏洞
    • 获取数据库连接凭证
  3. 内网渗透跳板

    • 获取内网拓扑信息
    • 发现其他系统和服务
    • 为横向移动提供信息支持
  4. 权限提升基础

    • 结合其他漏洞实现权限提升
    • 获取管理员凭据
    • 控制系统关键配置文件

四、漏洞防御措施

1. 输入验证与过滤

  • 过滤特殊字符:禁止./等路径回溯符号
  • 白名单验证:只允许特定格式的文件名(如仅字母数字)
  • 正则校验:严格匹配预期的文件名格式
// 示例:白名单验证
$allowed_ext = array('jpg', 'png', 'gif');
$file_name = $_GET['filename'];
$ext = pathinfo($file_name, PATHINFO_EXTENSION);

if(!in_array($ext, $allowed_ext)) {
    die('Invalid file type!');
}

2. 目录限制

  • 固定下载目录:不允许指定任意路径
  • 相对路径转换:将文件名转换为绝对路径前验证
  • 目录权限分离:下载目录与系统目录隔离
// 示例:固定下载目录
$base_dir = '/var/www/downloads/';
$file_name = basename($_GET['filename']);
$file_path = $base_dir . $file_name;

if(!file_exists($file_path)) {
    die('File not found!');
}

3. 系统级防护

  • open_basedir限制:PHP配置限制文件访问范围
  • 文件权限控制:敏感文件设置适当权限
  • Web服务器配置:限制访问特定目录
; php.ini配置示例
open_basedir = /var/www/html/:/tmp/

4. 其他安全措施

  • 文件ID映射:使用数据库ID代替真实文件名
  • 日志记录:记录所有下载请求便于审计
  • 内容检查:下载前验证文件内容类型

五、漏洞检测方法

  1. 手工测试

    • 尝试修改filename参数
    • 使用../进行路径回溯测试
    • 尝试下载已知的敏感文件
  2. 自动化工具

    • 使用Burp Suite Intruder模块
    • 编写脚本批量测试常见路径
    • 使用OWASP ZAP等扫描工具
  3. 代码审计

    • 检查文件下载功能的实现代码
    • 查找未过滤的用户输入
    • 验证路径拼接逻辑

六、总结

不安全文件下载漏洞是Web安全中常见的中高危漏洞,攻击者利用此漏洞可以获取系统敏感信息,为进一步攻击提供基础。开发人员应在实现文件下载功能时:

  1. 永远不要信任用户输入
  2. 实施严格的文件名验证
  3. 限制文件下载目录范围
  4. 采用最小权限原则

安全人员在进行渗透测试时,应重点关注所有文件下载功能点,尝试通过路径回溯和敏感文件枚举来检测此类漏洞。

不安全文件下载漏洞(Unsafe File Download)全面解析 一、漏洞原理 不安全文件下载漏洞(Unsafe File Download)是指Web系统在实现文件下载功能时,由于对用户提供的文件名参数缺乏充分的安全验证,导致攻击者可以通过构造恶意文件名路径下载服务器上的任意文件。 漏洞产生机制 典型工作流程 : 用户点击下载链接 前端发送包含文件名的下载请求 后台接收请求并将文件名直接拼接到下载路径 服务器返回对应文件内容 漏洞根源 : 直接信任前端传入的文件名参数 未对文件名进行安全过滤和验证 允许路径回溯符号(如../) 未限制文件下载目录范围 攻击原理 : 攻击者通过修改filename参数为精心构造的路径(如 ../../etc/passwd ),利用路径回溯下载系统敏感文件。 二、漏洞利用方法 基本利用步骤 发现文件下载功能点 拦截下载请求(使用Burp Suite等工具) 修改filename参数为恶意路径 重放请求获取敏感文件 靶场示例分析 以Pikachu靶场为例: 页面提供NBA球员图片下载功能 点击下载时传递filename参数 修改参数为 ../down_nba.php 可下载后台源码 通过源码审计可能发现更多漏洞 敏感文件路径列表 Windows系统敏感文件 | 文件路径 | 用途 | |---------|------| | C:\boot.ini | 查看系统版本 | | C:\Windows\System32\inetsrv\MetaBase.xml | IIS配置文件 | | C:\Windows\repair\sam | 存储系统初次安装的密码 | | C:\Program Files\mysql\my.ini | MySQL配置 | | C:\Program Files\mysql\data\mysql\user.MYD | MySQL root用户信息 | | C:\Windows\php.ini | PHP配置信息 | | C:\Windows\win.ini | Windows基本系统配置文件 | Linux系统敏感文件 | 文件路径 | 用途 | |---------|------| | /etc/passwd | 用户账户信息 | | /etc/shadow | 用户密码哈希 | | /etc/my.cnf | MySQL配置文件 | | /etc/httpd/conf/httpd.conf | Apache配置文件 | | /root/.bash_ history | 用户历史命令记录 | | /root/.mysql_ history | MySQL历史命令记录 | | /proc/mounts | 系统挂载设备信息 | | /proc/config.gz | 内核配置文件 | | /var/lib/mlocate/mlocate.db | 全文件路径数据库 | | /proc/self/cmdline | 当前进程cmdline参数 | 三、漏洞危害 不安全文件下载漏洞可导致以下严重后果: 系统敏感信息泄露 : 获取系统密码文件(/etc/passwd, /etc/shadow) 读取系统配置文件 获取服务配置信息(数据库、Web服务器等) 源代码泄露 : 下载网站业务源代码 通过代码审计发现更多漏洞 获取数据库连接凭证 内网渗透跳板 : 获取内网拓扑信息 发现其他系统和服务 为横向移动提供信息支持 权限提升基础 : 结合其他漏洞实现权限提升 获取管理员凭据 控制系统关键配置文件 四、漏洞防御措施 1. 输入验证与过滤 过滤特殊字符 :禁止 . 和 / 等路径回溯符号 白名单验证 :只允许特定格式的文件名(如仅字母数字) 正则校验 :严格匹配预期的文件名格式 2. 目录限制 固定下载目录 :不允许指定任意路径 相对路径转换 :将文件名转换为绝对路径前验证 目录权限分离 :下载目录与系统目录隔离 3. 系统级防护 open_ basedir限制 :PHP配置限制文件访问范围 文件权限控制 :敏感文件设置适当权限 Web服务器配置 :限制访问特定目录 4. 其他安全措施 文件ID映射 :使用数据库ID代替真实文件名 日志记录 :记录所有下载请求便于审计 内容检查 :下载前验证文件内容类型 五、漏洞检测方法 手工测试 : 尝试修改filename参数 使用../进行路径回溯测试 尝试下载已知的敏感文件 自动化工具 : 使用Burp Suite Intruder模块 编写脚本批量测试常见路径 使用OWASP ZAP等扫描工具 代码审计 : 检查文件下载功能的实现代码 查找未过滤的用户输入 验证路径拼接逻辑 六、总结 不安全文件下载漏洞是Web安全中常见的中高危漏洞,攻击者利用此漏洞可以获取系统敏感信息,为进一步攻击提供基础。开发人员应在实现文件下载功能时: 永远不要信任用户输入 实施严格的文件名验证 限制文件下载目录范围 采用最小权限原则 安全人员在进行渗透测试时,应重点关注所有文件下载功能点,尝试通过路径回溯和敏感文件枚举来检测此类漏洞。