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. 原请求:GET /download?file=report.pdf(过滤../)
- 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. 访问/index.php?file=<?php echo file_get_contents('/etc/passwd');?>,将 Payload 写入 Apache 日志
- 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. 若存在文件上传功能,上传包含ln -s /etc/passwd /var/www/html/link.txt的脚本
- 2. 通过漏洞下载link.txt获取/etc/passwd内容限制:需应用允许执行命令或上传脚本可被解析。
四、工具辅助与实战技巧
16. 敏感路径字典爆破
原理:基于常见路径字典批量探测可下载文件。
实操:
- • 工具:Burp Intruder 加载字典(含系统配置、应用源码、数据库备份等路径)
- • 字典示例:/etc/passwd、/var/www/config.php、C:\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. 上传含路径信息的图片(如嵌入<?php echo __FILE__;?>)
- 2. 通过文件包含漏洞解析图片,获取 Web 根目录路径
- 3. 构造精准路径下载/var/www/.env配置文件防御:实施最小权限原则,避免单一漏洞引发连锁风险。
20. 自动化工具深度探测
原理:利用专业工具覆盖手工测试盲区。
推荐工具:
- • 静态扫描:Semgrep(检测代码中file_get_contents($_GET['file'])等危险函数)
- • 动态扫描:OWASP ZAP(路径遍历插件自动生成 Payload)
- • 专项工具:LFISuite(本地文件包含漏洞专用探测工具)注意:工具结果需人工验证,排除误报。
防御建议
- 1. 输入校验:递归过滤../等遍历符号,限制路径在预设目录内(如realpath()函数校验)。
- 2. 权限控制:运行 Web 服务的用户(如 www-data)仅授予最小文件读取权限。
- 3. 路径映射:采用文件 ID 替代真实路径(如数据库存储1->report.pdf,通过 ID 查询路径)。
- 4. 版本管控:及时修复 Jenkins、Tomcat 等组件已知漏洞(参考 CVE 数据库)。
- 5. 日志审计:监控异常文件访问(如频繁请求/etc/passwd),触发告警机制。
文章来源:HACK之道
华盟君