CVE-2016-3088漏洞复现

背景描述

ActiveMQ 是 Apache 软件基金会下的一个开源消息驱动中间件软件。Jetty 是一个开源的 servlet 容器,它为基于 Java 的 web 容器,例如 JSP 和 servlet 提供运行环境。ActiveMQ 5.0 及以后版本默认集成了jetty。在启动后提供一个监控 ActiveMQ 的 Web 应用。

原理分析

ActiveMQ 中的 FileServer 服务允许用户通过 HTTP PUT 方法上传文件到指定目录,且路径在conf/jetty.xml中定义,定义如下:

<bean class =“ org.eclipse.jetty.webapp.WebAppContext”>
    <property name =“ contextPath” value =“ / fileserver” />
    <property name =“ resourceBase” value =“ $ {activemq.home} / webapps / fileserver” />
    <property name =“ logUrlOnStart” value =“ true” />
    <property name =“ parentLoaderPriority” value =“ true” />
</ bean>
fileserver:储存文件的接口,可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作,
其设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷,但是随后发现:
1.其使用率并不高
2.文件操作容易出现漏洞
所以ActiveMQ在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(你可以在conf/jetty.xml中开启之);在5.14.0版本以后,彻底删除了fileserver应用。

漏洞利用

首先写入一个文件,随后使用移动文件的请求将文件移动到任意位置,
造成任意文件写入漏洞。文件写入有如下方法可以利用:

  1. 写入webshell
  2. 写入cron或ssh key等文件
  3. 写入jar或jetty.xml等库和配置文件

漏洞复现

1.上传webshell,但是不会解析

2.移动到api目录下面(api下面会解析)

首先看一下api路径((http://ip:8161/admin/test/systemProperties.jsp))

移动到api目录下。

查看api目录

3.执行命令

利用完毕。

4.利用cron添加定时任务反弹shell

添加shell脚本

移动shell脚本到/etc/cron.d下面

反弹shell