
Une version de nouvelle génération d'enum4linux (un outil d'énumération Windows/Samba) avec des fonctionnalités supplémentaires comme l'export JSON/YAML. Destiné aux professionnels de la sécurité et aux joueurs de CTF.
Une version de nouvelle génération d'enum4linux
enum4linux-ng.py est une réécriture du enum4linux.pl de Mark Lowe (anciennement Portcullis Labs, maintenant Cisco CX Security Labs), un outil pour énumérer les informations des systèmes Windows et Samba, destiné aux professionnels de la sécurité et aux joueurs de CTF. L'outil est principalement un wrapper autour des outils Samba nmblookup, net, rpcclient et smbclient.
Je l'ai créé à des fins éducatives pour moi-même et pour surmonter les problèmes de enum4linux.pl. Il a les mêmes fonctionnalités que l'outil original (bien qu'il fasse certaines choses différemment). Contrairement à l'outil original, il parse toutes les sorties des outils Samba et permet d'exporter tous les résultats en fichier YAML ou JSON. L'idée derrière cela est de permettre à d'autres outils d'importer les résultats et de les traiter plus en profondeur. Il est prévu d'ajouter de nouvelles fonctionnalités à l'avenir.
Certaines choses sont implémentées différemment par rapport à l'enum4linux original. Voici les différences importantes :
-Gm-A) mais peut être activé avec -R-A au lieu de -a)Je tiens à remercier et à créditer les personnes de l'ancien Portcullis Labs (maintenant Cisco CX Security Labs), à savoir :
De plus, je tiens à remercier et créditer :
C'était très amusant de lire votre code ! :)
Enfin et surtout, je tiens à remercier les nombreuses personnes qui ont contribué au code, signalé des problèmes et fourni des suggestions utiles sur la façon d'améliorer l'outil.
Si vous utilisez l'outil : Ne l'utilisez pas à des fins illégales.
Un exemple d'exécution pourrait ressembler à ceci :
enum4linux-ng.py -As <target> -oY out
Ceci montre une exécution contre une installation standard de Windows Server 2012 R2. La commande suivante est utilisée :
enum4linux-ng.py 192.168.125.131 -u Tester -p 'Start123!' -oY out
Un utilisateur 'Tester' avec le mot de passe 'Start123!' a été créé. L'accès au pare-feu a été autorisé. Une fois l'énumération terminée, je fais défiler vers le haut pour que les résultats deviennent plus clairs. Comme aucune autre option d'énumération n'est spécifiée, l'outil supposera -A qui se comporte de manière similaire à l'option -a d'enum4linux. L'utilisateur et le mot de passe sont fournis. L'option -oY exportera toutes les données énumérées en fichier YAML pour un traitement ultérieur dans out.yaml. L'outil détecte automatiquement au début que LDAP n'est pas en cours d'exécution sur l'hôte distant. Il sautera donc toutes les vérifications LDAP supplémentaires qui feraient normalement partie de l'énumération par défaut.

La deuxième démo montre une exécution contre Metasploitable 2. La commande suivante est utilisée :
enum4linux-ng.py 192.168.125.145 -A -C
Cette fois, les options -A et -C sont utilisées. Alors que la première se comporte de manière similaire à l'option -a d'enum4linux, la seconde activera l'énumération des services. Cette fois, aucun identifiant n'a été fourni. L'outil détecte automatiquement qu'il doit utiliser SMBv1. Aucun fichier YAML ou JSON n'est écrit. Je fais à nouveau défiler vers le haut pour que les résultats deviennent plus clairs.

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)
Il existe plusieurs façons d'installer l'outil. Soit l'outil est fourni en tant que paquet avec votre distribution Linux, soit vous devez effectuer une installation manuelle.
apt install enum4linux-ng
pacman -S enum4linux-ng
(testé sur NixOS 20.9)
nix-env -iA nixos.enum4linux-ng
Si votre distribution Linux ne propose pas de paquet, les méthodes d'installation manuelle suivantes peuvent être utilisées à la place.
L'outil utilise les outils clients samba, à savoir :
Ceux-ci devraient être disponibles pour toutes les distributions Linux. Le paquet s'appelle généralement smbclient, samba-client ou quelque chose de similaire.
De plus, vous aurez besoin des paquets Python suivants :
Pour un traitement plus rapide du YAML (optionnel !), installez également (devrait venir comme dépendance de PyYaml pour la plupart des distributions Linux) :
Quelques exemples d'installations pour des distributions Linux spécifiques sont listés ci-dessous. Alternativement, des méthodes indépendantes de la distribution (python pip, environnement virtuel python et Docker) sont possibles.
Pour tous les exemples de distribution ci-dessous, LibYAML est déjà une dépendance du paquet PyYaml correspondant et sera donc installé automatiquement.
pacman -S smbclient python-ldap3 python-yaml impacket
(testé sur Fedora Workstation 31)
dnf install samba-common-tools samba-client python3-ldap3 python3-pyyaml python3-impacket
(Pour Ubuntu 18.04 ou inférieur, utilisez la variante Docker ou environnement virtuel Python)
apt install smbclient python3-ldap3 python3-yaml python3-impacket
Selon la distribution Linux, pip3 ou pip est nécessaire :
pip install pyyaml ldap3 impacket
Alternative :
pip install -r requirements.txt
N'oubliez pas que vous devez toujours installer les outils samba comme mentionné ci-dessus.
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
Exécutez ensuite via :
python3 enum4linux-ng.py -As <target>
N'oubliez pas que vous devez toujours installer les outils samba comme mentionné ci-dessus. De plus, assurez-vous d'exécuter source venv/bin/activate à chaque fois que vous ouvrez un nouveau shell. Sinon, le mauvais interpréteur Python avec les mauvaises bibliothèques sera utilisé (celui de votre système plutôt que celui de l'environnement virtuel).
git clone https://github.com/cddmp/enum4linux-ng
cd enum4linux-ng
docker build . --tag enum4linux-ng
Une fois terminé, un exemple d'exécution pourrait ressembler à ceci :
docker run -t enum4linux-ng -As <target>
Occasionnellement, l'outil peut afficher des messages d'erreur comme celui-ci :
Could not <some text here>, please open a GitHub issue
Dans ce cas, veuillez réexécuter l'outil avec les options -v et --keep. Cela vous permettra de voir la commande exacte qui a provoqué le message d'erreur. Copiez cette commande, exécutez-la dans votre terminal et redirigez la sortie vers un fichier. Ensuite, ouvrez un problème GitHub ici, en collant la commande et en joignant le fichier de sortie d'erreur. Cela aide à déboguer le problème. Bien sûr, vous pouvez le déboguer vous-même et faire une pull request.
Si l'outil vous est utile, je suis content si vous laissez une étoile !