
LDAP-Abfragen ohne den Nervfaktor
Dieses Tool wurde entwickelt, um viele der Probleme zu lösen, die ich mit ldapsearch und der AD-Interaktion im Allgemeinen hatte. Insbesondere adressiert dieses Tool die folgenden Probleme:
Unfähigkeit, mehr als tausend Ergebnisse von AD zurückzugeben. Dieses Tool unterstützt LDAP-Record-Paging und umgeht andere AD-Fehler, um eine beliebige Anzahl von Datensätzen abrufen zu können.
Unfähigkeit, NTLM-Anmeldeinformationen intuitiv zur Authentifizierung zu verwenden. Sie können den NETBIOS-Domänennamen, Benutzernamen und das Passwort angeben, um sich an einem Windows-DC zu authentifizieren.
Unfähigkeit, die Anzahl der zurückgegebenen Datensätze, die Geschwindigkeit, mit der sie zurückgegeben werden, und die Anzahl der jeweils abgerufenen Datensätze präzise zu steuern. Dieses Tool ermöglicht Ihnen die Kontrolle über alle diese Parameter, einschließlich der Einfügung von Verzögerungen zwischen den einzelnen paginierten Aufrufen. Zudem können mehrere DCs für Round-Robin-Abfragen angegeben werden.
Unfähigkeit, die Ergebnisse in leicht verständlichen Formaten zurückzugeben. Dieses Tool unterstützt derzeit drei Formate:
Unfähigkeit, nur die Attribute zurückzugeben, die Sie interessieren. Dieses Tool ermöglicht es Ihnen, entweder alle Attribute zurückzugeben oder nur die gewünschten.
Unfähigkeit, eine Liste vorgefertigter, häufig verwendeter Abfragen zu speichern.
git clone ...
pip install -r requirements.txt
# python3 ldapper.py
usage: ldapper.py [-h] --domain DOMAIN --user USER --password PASSWORD
--server SERVER [--basedn BASEDN] --search SEARCH
[--maxrecords MAXRECORDS] [--pagesize PAGESIZE]
[--delay DELAY] [--format {plain,json,json_tiny}]
[--encryption {1,2,3}]
[--advanced [ADVANCED [ADVANCED ...]]] [--outfile OUTFILE]
[--engine {ldap3,impacket}]
[attribute [attribute ...]]
AD LDAP Kommandozeilen-Suche, die nicht nervt.
positional arguments:
attribute Rückzugebende Attribute (Standard: alle bei benutzerdefinierter Abfrage. Bei vorgefertigten Abfragen übergeben Sie "*", um alle Attribute statt der Standardattribute zu erhalten.)
optional arguments:
-h, --help show this help message and exit
--domain DOMAIN, -D DOMAIN
Domäne
--user USER, -U USER Benutzername
--password PASSWORD, -P PASSWORD
Passwort oder LM:NTLM-Hash
--server SERVER, -S SERVER
DC-IP oder auflösbarer Name
--basedn BASEDN, -b BASEDN
Base DN sollte normalerweise "dc=" sein, gefolgt vom vollständigen Domänennamen mit Punkten, die durch ",dc=" ersetzt werden. Bei Nichtangabe wird versucht, es vom LDAP-Server abzuleiten.
--search SEARCH, -s SEARCH
LDAP-Suchstring oder Zahl, die eine benutzerdefinierte Suche aus der Liste "Custom Searches" angibt. Verwenden Sie "-" für das Lesen von stdin.
--maxrecords MAXRECORDS, -m MAXRECORDS
Maximale Anzahl zurückzugebender Datensätze (Standard: 100), 0 bedeutet alle.
--pagesize PAGESIZE, -p PAGESIZE
Anzahl der Datensätze, die pro Abruf zurückgegeben werden (Standard: 10). Sollte <= max records sein.
--delay DELAY, -d DELAY
Verzögerung in Millisekunden zwischen Paging-Anfragen (Standard: 0).
--format {plain,json,json_tiny}, -f {plain,json,json_tiny}
Ausgabeformat (Standard: "plain"), mögliche Werte: plain, json, json_tiny
--encryption {1,2,3}, -n {1,2,3}
3) Verbindung zu 636 TLS (Standard); 2) Verbindung zu 389 ohne TLS, aber versuche STARTTLS mit Fallback (bei impacket nicht verfügbar); 1) Verbindung zu 389, Erzwinge Klartext
--advanced [ADVANCED [ADVANCED ...]], -a [ADVANCED [ADVANCED ...]]
Erweiterte Möglichkeit, Optionen für vorgefertigte Suchvorgänge zu übergeben, die nach zusätzlichen Eingaben fragen (bei mehreren Eingabeaufforderungen die Argumente in der Reihenfolge der Aufforderung übergeben)
--outfile OUTFILE, -o OUTFILE
Ausgabedatei (falls angegeben, wird die Ausgabe hierhin umgeleitet statt nach stdout [kann Kodierungsfehler unter Windows verhindern])
--engine {ldap3,impacket}, -e {ldap3,impacket}
Wählen Sie die zu verwendende Engine (Standard: "ldap3"). BEACHTEN SIE DIE OPSEC-HINWEISE!
Custom Searches:
1) Alle Benutzer abrufen
1.1) Bestimmten Benutzer abrufen (Sie werden nach dem Benutzernamen gefragt)
2) Alle Gruppen (und deren Mitglieder) abrufen
2.1) Bestimmte Gruppe abrufen (Sie werden nach dem Gruppennamen gefragt)
3) Alle Drucker abrufen
4) Alle Computer abrufen
4.1) Bestimmten Computer abrufen (Sie werden nach dem Computernamen gefragt)
5) Domänen-/Enterprise-Administratoren abrufen
6) Domänenvertrauensstellungen abrufen
7) Nach uneingeschränkten SPN-Delegationen suchen (Potentielle Privilegienausweitung)
8) Nach Konten suchen, bei denen PreAuth nicht erforderlich ist (ASREPROAST)
9) Nach Benutzer-SPNs suchen (KERBEROAST)
9.1) Nach einem bestimmten Benutzer-SPN suchen (Sie werden nach dem User Principal Name gefragt)
10) Alle sichtbaren LAPS-LA-Passwörter anzeigen
10.1) Nach einem bestimmten Workstation-LAPS-Passwort suchen (Sie werden nach dem Workstation-Namen gefragt)
*11) Nach häufigen Klartext-Passwort-Attributen suchen (UserPassword, UnixUserPassword, unicodePwd und msSFU30Password)
12) Alle Quest-Zwei-Faktor-Seeds anzeigen (falls Zugriff vorhanden)
13) Oracle "orclCommonAttribute" SSO-Passwort-Hash
*14) Oracle "userPassword" SSO-Passwort-Hash
15) SCCM-Server abrufen
16) Nach Konten suchen, bei denen kein Passwort erforderlich ist (PasswordNotRequired)
Mit Sternchen markierte Einträge wurden noch nie in einer Umgebung getestet, in der sie verifiziert werden konnten. Bitte teilen Sie mir mit, ob sie funktionieren.
Für diese Beispiele gehen wir von Folgendem aus:
NETBIOS NAME: EMP
FULL DOMAIN NAME: EXAMPLE.LOCAL
DC IPs: 10.0.0.2, 10.0.0.3
USERNAME: bob
PASSWORD: password
Alle Datensätze abrufen und nur das cn-Attribut zurückgeben:
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s '(cn=*)' cn
Details zu einem bestimmten Benutzer abrufen (Sie werden nach dem Benutzernamen gefragt):
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s '1.1'
Details zu einem bestimmten Benutzer abrufen (Benutzername übergeben, damit keine Eingabeaufforderung erscheint):
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s '1.1' -a 'alice'
Die ersten 100 Benutzer-Kerberos-SPNs abrufen, maximal fünf gleichzeitig, mit zwei Sekunden Verzögerung zwischen den Seitenanfragen im kompakten JSON-Format:
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 100 -p 5 -d 2000 -f json_tiny -s '(&(objectcategory=user)(serviceprincipalname=*))' serviceprincipalname userprincipalname
Manuell alle Datensätze für Drucker abrufen und alle zugehörigen Attribute anzeigen:
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s '(objectClass=printQueue)'
Mühelos nach uneingeschränkten SPN-Delegationen suchen:
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s 4
Bei Verwendung der Impacket-Engine und ohne Angabe einer baseDN versucht das Tool eine SMB-Authentifizierung und -Verbindung zum Domänencontroller, um den NETBIOS-Namen der Domäne zu ermitteln und daraus die baseDN abzuleiten. Dieses Verhalten kann in einer stark überwachten Umgebung zu einer Erkennung führen. Verwenden Sie Impacket in einer solchen Umgebung entweder nicht, oder geben Sie immer die baseDN an.
Impacket führt entweder eine vollständige LDAPS-Verbindung oder eine vollständig unverschlüsselte Verbindung durch. Es kann derzeit kein STARTTLS verwenden. Wenn also eine unverschlüsselte LDAP-Verbindung erkannt würde, versuchen Sie entweder nur eine vollständige TLS-Verbindung oder verwenden Sie nicht die Impacket-Engine.
Impacket bietet nicht die meiste Kontrolle darüber, wie schnell Datensätze abgerufen werden. Daher ist die Option "--delay" nur teilweise implementiert. Wenn die Verzögerung des Datensatzabrufs entscheidend ist, verwenden Sie nicht die Impacket-Engine.
Kerberoast: https://adsecurity.org/?p=2293
ASREPRoast: http://www.harmj0y.net/blog/activedirectory/roasting-as-reps/
Unconstrained Delegation Abuse: http://www.harmj0y.net/blog/activedirectory/the-most-dangerous-user-right-you-probably-have-never-heard-of/
Oracle nonsense: https://blogs.oracle.com/mwilcox/entry/clarifying_ovd-ad_eus_password and http://onlineappsdba.com/index.php/2014/03/03/what-hashing-algorithm-oid-uses-to-store-user-password-ssha-or-md5/
Qwest/Defender/Oneidentity 2nd Factor Token Data: http://support-public.cfm.quest.com/43565_Defender_5.9_AdminGuide.pdf
Common plaintext passwords: https://www.blackhillsinfosec.com/domain-goodness-learned-love-ad-explorer/
Impacket als Alternative zu LDAP3 hinzugefügt, da LDAP3 nicht immer funktioniert (und Impacket auch nicht).
Mehrfach-LDAP-Serverauswahl entfernt, da diese Funktion nicht wirklich benötigt wird und in Impacket nicht existiert.
Alles überarbeitet.
SCCM-Suchfunktion hinzugefügt.
Option für Ausgabedatei hinzugefügt.
Einige Formatierungsausgaben behoben.
Möglichkeit hinzugefügt, LDAP-Abfragen von stdin zu lesen.
Abfrage automatisch in Klammern setzen, falls der Benutzer dies nicht bereits getan hat.
Python-2-Unterstützungsfehler behoben.
Wenn Sie häufig verwendete Suchen/Enumerationen haben, lassen Sie es mich wissen, damit ich sie zur Liste hinzufügen kann.
...
Geschrieben von Shelby Spencer (shellster). Kontaktieren Sie mich bei Fehlern oder Feature-Wünschen.