
Una versión de nueva generación de enum4linux (una herramienta de enumeración de Windows/Samba) con características adicionales como exportación a JSON/YAML. Diseñada para profesionales de seguridad y jugadores de CTF.
Una versión de nueva generación de enum4linux
enum4linux-ng.py es una reescritura de enum4linux.pl de Mark Lowe (anteriormente Portcullis Labs, ahora Cisco CX Security Labs), una herramienta para enumerar información de sistemas Windows y Samba, destinada a profesionales de seguridad y jugadores de CTF. La herramienta es principalmente un envoltorio alrededor de las herramientas de Samba nmblookup, net, rpcclient y smbclient.
La hice con fines educativos para mí mismo y para solucionar problemas con enum4linux.pl. Tiene la misma funcionalidad que la herramienta original (aunque hace algunas cosas de manera diferente). A diferencia de la herramienta original, analiza toda la salida de las herramientas de Samba y permite exportar todos los hallazgos como un archivo YAML o JSON. La idea detrás de esto es permitir que otras herramientas importen los hallazgos y los procesen posteriormente. Está previsto agregar nuevas funciones en el futuro.
Algunas cosas se implementan de manera diferente en comparación con el enum4linux original. Estas son las diferencias importantes:
-Gm-A) pero se puede habilitar con -R-A en lugar de -a)Me gustaría agradecer y dar crédito a las personas de lo que antes era Portcullis Labs (ahora Cisco CX Security Labs), en particular:
Además, me gustaría agradecer y dar crédito a:
¡Fue muy divertido leer su código! :)
Por último, pero no menos importante, me gustaría agradecer a las diversas personas que contribuyeron con código, reportaron problemas y brindaron sugerencias útiles sobre cómo mejorar la herramienta.
Si usas la herramienta: no la uses con fines ilegales.
Un ejemplo de ejecución podría verse así:
enum4linux-ng.py -As <objetivo> -oY out
Esto demuestra una ejecución contra una instalación estándar de Windows Server 2012 R2. Se utiliza el siguiente comando:
enum4linux-ng.py 192.168.125.131 -u Tester -p 'Start123!' -oY out
Se creó un usuario 'Tester' con contraseña 'Start123!'. Se permitió el acceso al firewall. Una vez que finaliza la enumeración, desplazo hacia arriba para que los resultados sean más claros. Dado que no se especifica otra opción de enumeración, la herramienta asumirá -A, que se comporta de manera similar a la opción -a de enum4linux. Se pasan el usuario y la contraseña. La opción -oY exportará todos los datos enumerados como un archivo YAML para su posterior procesamiento en out.yaml. La herramienta detecta automáticamente al principio que LDAP no se está ejecutando en el host remoto. Por lo tanto, omitirá cualquier verificación LDAP adicional que normalmente formaría parte de la enumeración predeterminada.

La segunda demo muestra una ejecución contra Metasploitable 2. Se utiliza el siguiente comando:
enum4linux-ng.py 192.168.125.145 -A -C
Esta vez se utilizan las opciones -A y -C. Mientras que la primera se comporta de manera similar a la opción -a de enum4linux, la segunda habilitará la enumeración de servicios. Esta vez no se proporcionaron credenciales. La herramienta detecta automáticamente que necesita usar SMBv1. No se escribe ningún archivo YAML o JSON. Nuevamente, desplazo hacia arriba para que los resultados sean más claros.

usage: enum4linux-ng.py [-h] [-A] [-As] [-U] [-G] [-Gm] [-S] [-C] [-P] [-O] [-L] [-I] [-R [BULK_SIZE]] [-N] [-w DOMAIN] [-u USER]
[-p PW | -K TICKET_FILE | -H NTHASH] [--local-auth] [-d] [-k USERS] [-r RANGES] [-s SHARES_FILE] [-t TIMEOUT] [-v] [--keep]
[-oJ OUT_JSON_FILE | -oY OUT_YAML_FILE | -oA OUT_FILE]
host
This tool is a rewrite of Mark Lowe's enum4linux.pl, a tool for enumerating information from Windows and Samba systems. It is mainly a wrapper around the Samba
tools nmblookup, net, rpcclient and smbclient. Other than the original tool it allows to export enumeration results as YAML or JSON file, so that it can be
further processed with other tools. The tool tries to do a 'smart' enumeration. It first checks whether SMB or LDAP is accessible on the target. Depending on the
result of this check, it will dynamically skip checks (e.g. LDAP checks if LDAP is not running). If SMB is accessible, it will always check whether a session can
be set up or not. If no session can be set up, the tool will stop enumeration. The enumeration process can be interupted with CTRL+C. If the options -oJ or -oY
are provided, the tool will write out the current enumeration state to the JSON or YAML file, once it receives SIGINT triggered by CTRL+C. The tool was made for
security professionals and CTF players. Illegal use is prohibited.
positional arguments:
host
options:
-h, --help show this help message and exit
-A Do all simple enumeration including nmblookup (-U -G -S -P -O -N -I -L). This option is enabled if you don't provide any other option.
-As Do all simple short enumeration without NetBIOS names lookup (-U -G -S -P -O -I -L)
-U Get users via RPC
-G Get groups via RPC
-Gm Get groups with group members via RPC
-S Get shares via RPC
-C Get services via RPC
-P Get password policy information via RPC
-O Get OS information via RPC
-L Get additional domain info via LDAP/LDAPS (for DCs only)
-I Get printer information via RPC
-R [BULK_SIZE] Enumerate users via RID cycling. Optionally, specifies lookup request size.
-N Do an NetBIOS names lookup (similar to nbtstat) and try to retrieve workgroup from output
-w DOMAIN Specify workgroup/domain manually (usually found automatically)
-u USER Specify username to use (default "")
-p PW Specify password to use (default "")
-K TICKET_FILE Try to authenticate with Kerberos, only useful in Active Directory environment (Note: DNS must be setup correctly for this option to work)
-H NTHASH Try to authenticate with hash
--local-auth Authenticate locally to target
-d Get detailed information for users and groups, applies to -U, -G and -R
-k USERS User(s) that exists on remote system (default: administrator,guest,krbtgt,domain admins,root,bin,none). Used to get sid with "lookupsids"
-r RANGES RID ranges to enumerate (default: 500-550,1000-1050)
-s SHARES_FILE Brute force guessing for shares
-t TIMEOUT Sets connection timeout in seconds (default: 10s)
-v Verbose, show full samba tools commands being run (net, rpcclient, etc.)
--keep Don't delete the Samba configuration file created during tool run after enumeration (useful with -v)
-oJ OUT_JSON_FILE Writes output to JSON file (extension is added automatically)
-oY OUT_YAML_FILE Writes output to YAML file (extension is added automatically)
-oA OUT_FILE Writes output to YAML and JSON file (extensions are added automatically)
Hay múltiples formas de instalar la herramienta. Ya sea que la herramienta venga como un paquete con su distribución Linux o necesite realizar una instalación manual.
apt install enum4linux-ng
pacman -S enum4linux-ng
(probado en NixOS 20.9)
nix-env -iA nixos.enum4linux-ng
Si su distribución Linux no ofrece un paquete, se pueden utilizar los siguientes métodos de instalación manual en su lugar.
La herramienta utiliza las herramientas cliente de samba, a saber:
Estas deberían estar disponibles para todas las distribuciones Linux. El paquete normalmente se llama smbclient, samba-client o algo similar.
Además, necesitará los siguientes paquetes de Python:
Para un procesamiento más rápido de YAML (opcional) también instale (debería venir como dependencia de PyYaml para la mayoría de las distribuciones Linux):
A continuación se enumeran algunos ejemplos de instalaciones para distribuciones Linux específicas. Alternativamente, son posibles métodos independientes de la distribución (python pip, entorno virtual python y Docker).
Para todos los ejemplos de distribución a continuación, LibYAML ya es una dependencia del paquete PyYaml correspondiente y, por lo tanto, se instalará automáticamente.
pacman -S smbclient python-ldap3 python-yaml impacket
(probado en Fedora Workstation 31)
dnf install samba-common-tools samba-client python3-ldap3 python3-pyyaml python3-impacket
(Para Ubuntu 18.04 o inferior, use la variante Docker o entorno virtual Python)
apt install smbclient python3-ldap3 python3-yaml python3-impacket
Dependiendo de la distribución Linux, se necesita pip3 o pip:
pip install pyyaml ldap3 impacket
Alternativa:
pip install -r requirements.txt
Recuerde que aún necesita instalar las herramientas de samba como se mencionó anteriormente.
git clone https://github.com/cddmp/enum4linux-ng
cd enum4linux-ng
python3 -m venv venv
source venv/bin/activate
pip install wheel
pip install -r requirements.txt
Luego ejecute mediante:
python3 enum4linux-ng.py -As <objetivo>
Recuerde que aún necesita instalar las herramientas de samba como se mencionó anteriormente. Además, asegúrese de ejecutar source venv/bin/activate cada vez que abra una nueva terminal. De lo contrario, se utilizará el intérprete de Python incorrecto con las bibliotecas incorrectas (el de su sistema en lugar del del entorno virtual).
git clone https://github.com/cddmp/enum4linux-ng
cd enum4linux-ng
docker build . --tag enum4linux-ng
Una vez finalizado, un ejemplo de ejecución podría verse así:
docker run -t enum4linux-ng -As <objetivo>
Ocasionalmente, la herramienta escupirá mensajes de error como este:
Could not <some text here>, please open a GitHub issue
En ese caso, vuelva a ejecutar la herramienta con las opciones -v y --keep. Esto le permitirá ver el comando exacto que causó el mensaje de error. Copie ese comando, ejecútelo en su terminal y redirija la salida a un archivo. Luego abra un issue en GitHub aquí, pegando el comando y adjuntando el archivo de salida del error. Eso ayuda a depurar el problema. Por supuesto, puede depurarlo usted mismo y hacer un pull request.
Si la herramienta le resulta útil, me alegrará que deje una estrella.