Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)复现

漏洞环境

配置vulhub , 在目录activemq/CVE-2016-3088中打开docker。
Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)复现
docker中显示
Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)复现
此时开启了两个端口分别为8161和61616
其中61616是工作端口,消息在这个端口进行传递; 8161是网络管理页面端口
访问http://your-ip:8161即可看到网络管理页面,不过这个漏洞理论上是不需要网络的。

利用浏览器进入网络管理页面
Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)复现
进入admin界面,默认密码账号为admin
Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)复现

漏洞原理

ActiveMQ Web控制台分为三个应用程序:admin,api和fileserver,其中admin是管理员页面,api是界面,fileserver是用于存储文件的界面;admin和api需要先登录才能使用,fileserver不需要登录。

文件服务器是RESTful API接口。我们可以通过HTTP请求(例如GET,PUT和DELETE)读写存储在其中的文件。设计目的是为了弥补消息队列操作无法传输和存储二进制文件但后来发现的缺陷:

  1. 使用率不高
  2. 文件操作容易产生漏洞

此漏洞出现在Fileserver应用程序中,该漏洞的原理实际上非常简单,即文件服务器支持写入文件(但不解析JSP),同时支持移动文件(MOVE请求)。因此,我们只需要编写一个文件,然后使用移动请求将其移动到任何位置,就会导致任意文件写入漏洞。

写入文件,例如cron或ssh key

  1. 编写Webshel​​l
  2. 写入文件,例如cron或ssh key
  3. 编写库和配置文件,例如jar或jetty.xml

编写Webshel​​l的优点是方便,但是文件服务器不需要解析jsp,admin和api都需要登录才能访问,因此有点徒劳。编写cron或ssh键的优点是直接反转Shell,这也很方便,缺点是您需要root权限;写jar,有点麻烦(需要jar后门),写xml配置文件,这种方法比较可靠,但是有一点徒劳:我们需要知道ActiveMQ的绝对路径。

漏洞复现

编写webshell

Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)复现
构造Put请求,文件名为jsp是会拒绝上传,所以文件名为1.txt
内容为输出hello。

上传到fileserver目录,但是此目录没有执行权限

访问systemProperties.jsp页面。找到activemq.home路径。此目录下有执行权限
Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)复现
找到地址为 opt/activemq

构造move请求
Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)复现
访问移动后的页面
Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)复现
发现页面中出现了注入语句。
复现成功

参考

复现博客 https://paper.seebug.org/346/
vulhub 官方博客 https://vulhub.org/#/environments/activemq/CVE-2016-3088/