
Eine nächste Generation von enum4linux (einem Windows/Samba-Erkundungstool) mit zusätzlichen Funktionen wie JSON/YAML-Export. Richtet sich an Sicherheitsexperten und CTF-Spieler.
Eine nächste Generation von enum4linux
enum4linux-ng.py ist eine Neuimplementierung von Mark Lowe's (ehemals Portcullis Labs, heute Cisco CX Security Labs) enum4linux.pl, einem Tool zur Informationssammlung von Windows- und Samba-Systemen, das für Sicherheitsexperten und CTF-Spieler gedacht ist. Das Tool ist hauptsächlich ein Wrapper um die Samba-Werkzeuge nmblookup, net, rpcclient und smbclient.
Ich habe es zu Lernzwecken für mich selbst erstellt und um Probleme mit enum4linux.pl zu beheben. Es bietet dieselbe Funktionalität wie das ursprüngliche Tool (allerdings erledigt es einige Dinge anders). Im Gegensatz zum Originaltool analysiert es die gesamte Ausgabe der Samba-Werkzeuge und erlaubt den Export aller Ergebnisse als YAML- oder JSON-Datei. Der Grundgedanke dahinter ist, anderen Tools den Import der Ergebnisse und deren Weiterverarbeitung zu ermöglichen. Es ist geplant, in Zukunft neue Funktionen hinzuzufügen.
Einige Dinge sind im Vergleich zum ursprünglichen enum4linux anders implementiert. Dies sind die wichtigen Unterschiede:
-Gm aktiviert werden-A), kann aber mit -R aktiviert werden-A anstelle von -a)Ich möchte den Leuten von den ehemaligen Portcullis Labs (heute Cisco CX Security Labs) danken und ihnen Anerkennung zollen, insbesondere:
Zusätzlich möchte ich danken und Anerkennung zollen:
Es hat großen Spaß gemacht, euren Code zu lesen! :)
Nicht zuletzt möchte ich den verschiedenen Leuten danken, die Code beigetragen, Probleme gemeldet und hilfreiche Vorschläge zur Verbesserung des Tools gemacht haben.
Wenn Sie das Tool verwenden: Verwenden Sie es nicht für illegale Zwecke.
Eine Beispielausführung könnte so aussehen:
enum4linux-ng.py -As <target> -oY out
Dies demonstriert eine Ausführung gegen eine Windows Server 2012 R2 Standardinstallation. Der folgende Befehl wird verwendet:
enum4linux-ng.py 192.168.125.131 -u Tester -p 'Start123!' -oY out
Ein Benutzer 'Tester' mit Passwort 'Start123!' wurde erstellt. Der Firewall-Zugriff wurde erlaubt. Sobald die Aufzählung abgeschlossen ist, scrolle ich nach oben, damit die Ergebnisse klarer werden. Da keine andere Aufzählungsoption angegeben ist, nimmt das Tool -A an, das sich ähnlich wie die Option -a von enum4linux verhält. Benutzer und Passwort werden übergeben. Die Option -oY exportiert alle aufgezählten Daten als YAML-Datei zur weiteren Verarbeitung in out.yaml. Das Tool erkennt automatisch zu Beginn, dass LDAP auf dem entfernten Host nicht läuft. Es überspringt daher alle weiteren LDAP-Prüfungen, die normalerweise Teil der Standardaufzählung wären.

Die zweite Demo zeigt eine Ausführung gegen Metasploitable 2. Der folgende Befehl wird verwendet:
enum4linux-ng.py 192.168.125.145 -A -C
Diesmal werden die Optionen -A und -C verwendet. Während sich die erste ähnlich wie die Option -a von enum4linux verhält, aktiviert die zweite die Aufzählung der Dienste. Diesmal wurden keine Anmeldeinformationen bereitgestellt. Das Tool erkennt automatisch, dass es SMBv1 verwenden muss. Es wird keine YAML- oder JSON-Datei geschrieben. Wieder scrolle ich nach oben, damit die Ergebnisse klarer werden.

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
Dieses Tool ist eine Neuimplementierung von Mark Lowe's enum4linux.pl, einem Tool zur Informationssammlung von Windows- und Samba-Systemen. Es ist hauptsächlich ein Wrapper um die Samba-Werkzeuge nmblookup, net, rpcclient und smbclient. Im Gegensatz zum Originaltool ermöglicht es den Export der Aufzählungsergebnisse als YAML- oder JSON-Datei, sodass sie mit anderen Tools weiterverarbeitet werden können. Das Tool versucht eine 'intelligente' Aufzählung durchzuführen. Es prüft zuerst, ob SMB oder LDAP auf dem Ziel erreichbar ist. Abhängig vom Ergebnis dieser Prüfung überspringt es dynamisch Prüfungen (z. B. LDAP-Prüfungen, wenn LDAP nicht läuft). Wenn SMB erreichbar ist, wird immer geprüft, ob eine Sitzung aufgebaut werden kann oder nicht. Wenn keine Sitzung aufgebaut werden kann, stoppt das Tool die Aufzählung. Der Aufzählungsprozess kann mit STRG+C unterbrochen werden. Wenn die Optionen -oJ oder -oY angegeben werden, schreibt das Tool den aktuellen Aufzählungszustand in die JSON- oder YAML-Datei, sobald es ein SIGINT durch STRG+C empfängt. Das Tool wurde für Sicherheitsexperten und CTF-Spieler entwickelt. Die illegale Nutzung ist untersagt.
positionale Argumente:
host
Optionen:
-h, --help Zeigt diese Hilfemeldung an und beendet das Programm
-A Führt alle einfachen Aufzählungen einschließlich nmblookup durch (-U -G -S -P -O -N -I -L). Diese Option ist aktiviert, wenn Sie keine andere Option angeben.
-As Führt alle einfachen kurzen Aufzählungen ohne NetBIOS-Namensauflösung durch (-U -G -S -P -O -I -L)
-U Holt Benutzer über RPC
-G Holt Gruppen über RPC
-Gm Holt Gruppen mit Gruppenmitgliedern über RPC
-S Holt Freigaben über RPC
-C Holt Dienste über RPC
-P Holt Informationen zur Kennwortrichtlinie über RPC
-O Holt Betriebssysteminformationen über RPC
-L Holt zusätzliche Domäneninformationen über LDAP/LDAPS (nur für DCs)
-I Holt Druckerinformationen über RPC
-R [BULK_SIZE] Zählt Benutzer über RID-Cycling auf. Optional kann die Größe der Lookup-Anfrage angegeben werden.
-N Führt eine NetBIOS-Namensauflösung durch (ähnlich nbtstat) und versucht, die Arbeitsgruppe aus der Ausgabe zu ermitteln
-w DOMAIN Arbeitsgruppe/Domäne manuell angeben (normalerweise automatisch gefunden)
-u USER Benutzername zur Verwendung angeben (Standard "")
-p PW Passwort zur Verwendung angeben (Standard "")
-K TICKET_FILE Versuchen, sich mit Kerberos zu authentifizieren, nur nützlich in Active-Directory-Umgebungen (Hinweis: DNS muss korrekt konfiguriert sein, damit diese Option funktioniert)
-H NTHASH Versuchen, sich mit Hash zu authentifizieren
--local-auth Lokal am Ziel authentifizieren
-d Detaillierte Informationen für Benutzer und Gruppen abrufen, gilt für -U, -G und -R
-k USERS Benutzer, die auf dem entfernten System existieren (Standard: administrator,guest,krbtgt,domain admins,root,bin,none). Wird verwendet, um die SID mit "lookupsids" zu erhalten
-r RANGES RID-Bereiche zum Aufzählen (Standard: 500-550,1000-1050)
-s SHARES_FILE Brute-Force-Erraten für Freigaben
-t TIMEOUT Legt das Verbindungs-Timeout in Sekunden fest (Standard: 10s)
-v Ausführlich, zeigt die vollständigen ausgeführten Samba-Tool-Befehle (net, rpcclient, etc.)
--keep Die während des Tool-Laufs erstellte Samba-Konfigurationsdatei nach der Aufzählung nicht löschen (nützlich mit -v)
-oJ OUT_JSON_FILE Schreibt die Ausgabe in eine JSON-Datei (Erweiterung wird automatisch hinzugefügt)
-oY OUT_YAML_FILE Schreibt die Ausgabe in eine YAML-Datei (Erweiterung wird automatisch hinzugefügt)
-oA OUT_FILE Schreibt die Ausgabe in eine YAML- und JSON-Datei (Erweiterungen werden automatisch hinzugefügt)
Es gibt mehrere Möglichkeiten, das Tool zu installieren. Entweder kommt das Tool als Paket mit Ihrer Linux-Distribution mitgeliefert oder Sie müssen eine manuelle Installation durchführen.
apt install enum4linux-ng
pacman -S enum4linux-ng
(getestet auf NixOS 20.9)
nix-env -iA nixos.enum4linux-ng
Wenn Ihre Linux-Distribution kein Paket anbietet, können stattdessen die folgenden manuellen Installationsmethoden verwendet werden.
Das Tool verwendet die Samba-Client-Werkzeuge, nämlich:
Diese sollten für alle Linux-Distributionen verfügbar sein. Das Paket heißt typischerweise smbclient, samba-client oder ähnlich.
Darüber hinaus benötigen Sie die folgenden Python-Pakete:
Für eine schnellere Verarbeitung von YAML (optional!) installieren Sie auch (sollte bei den meisten Linux-Distributionen als Abhängigkeit von PyYaml kommen):
Einige Beispiele für spezifische Linux-Distributionen sind unten aufgeführt. Alternativ sind distributionsunabhängige Wege (Python pip, Python Virtual Environment und Docker) möglich.
Bei allen unten aufgeführten Distributionsbeispielen ist LibYAML bereits eine Abhängigkeit des entsprechenden PyYaml-Pakets und wird daher automatisch installiert.
pacman -S smbclient python-ldap3 python-yaml impacket
(getestet auf Fedora Workstation 31)
dnf install samba-common-tools samba-client python3-ldap3 python3-pyyaml python3-impacket
(Für Ubuntu 18.04 oder niedriger verwenden Sie die Docker- oder Python-Virtual-Environment-Variante)
apt install smbclient python3-ldap3 python3-yaml python3-impacket
Abhängig von der Linux-Distribution wird entweder pip3 oder pip benötigt:
pip install pyyaml ldap3 impacket
Alternative:
pip install -r requirements.txt
Denken Sie daran, dass Sie dennoch die oben genannten Samba-Werkzeuge installieren müssen.
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
Dann ausführen mit:
python3 enum4linux-ng.py -As <target>
Denken Sie daran, dass Sie dennoch die oben genannten Samba-Werkzeuge installieren müssen. Stellen Sie außerdem sicher, dass Sie jedes Mal, wenn Sie eine neue Shell öffnen, source venv/bin/activate ausführen. Andernfalls wird der falsche Python-Interpreter mit den falschen Bibliotheken verwendet (Ihr System-Interpreter anstelle des der virtuellen Umgebung).
git clone https://github.com/cddmp/enum4linux-ng
cd enum4linux-ng
docker build . --tag enum4linux-ng
Nach Abschluss könnte eine Beispielausführung so aussehen:
docker run -t enum4linux-ng -As <target>
Gelegentlich gibt das Tool Fehlermeldungen wie diese aus:
Could not <some text here>, please open a GitHub issue
In diesem Fall führen Sie das Tool bitte erneut mit der Option -v und --keep aus. Dadurch können Sie den genauen Befehl sehen, der die Fehlermeldung verursacht hat. Kopieren Sie diesen Befehl, führen Sie ihn in Ihrem Terminal aus und leiten Sie die Ausgabe in eine Datei um. Erstellen Sie dann hier ein GitHub-Issue, fügen Sie den Befehl ein und hängen Sie die Fehlerausgabedatei an. Das hilft bei der Fehlerbehebung. Natürlich können Sie den Fehler auch selbst beheben und einen Pull-Request erstellen.
Wenn das Tool für Sie hilfreich ist, freue ich mich, wenn Sie einen Stern hinterlassen!