
Active Directory Informations-Dumper über LDAP
Active Directory Informationsausleser über LDAP
In einer Active Directory-Domäne können über LDAP von jedem authentifizierten Benutzer (oder Rechner) viele interessante Informationen abgerufen werden. Dies macht LDAP zu einem nützlichen Protokoll für die Informationssammlung in der Erkundungsphase eines Penetrationstests eines internen Netzwerks. Ein Problem ist, dass Daten aus LDAP oft nicht in einem einfach lesbaren Format vorliegen.
ldapdomaindump ist ein Tool, das dieses Problem lösen soll, indem es über LDAP verfügbare Informationen sammelt, parst und sowohl in einem menschenlesbaren HTML-Format als auch in maschinenlesbaren JSON- und CSV/TSV/greppable-Dateien ausgibt.
Das Tool wurde mit folgenden Zielen entwickelt:
Das Tool erzeugt mehrere Dateien mit einer Übersicht der Objekte in der Domäne:
Sowie zwei gruppierte Dateien:
Erfordert ldap3 > 2.0 und dnspython. ldapdomaindump benötigt Python 3.6 oder höher.
Abhängigkeiten können manuell mit pip install ldap3 dnspython future installiert werden, sollten aber in den meisten Fällen von pip verwaltet werden, wenn Sie das Hauptpaket entweder aus Git oder von PyPI installieren.
Das ldapdomaindump-Paket kann mit python setup.py install aus dem Git-Quellcode oder für die neueste Version mit pip install ldapdomaindump installiert werden.
Es gibt 3 Möglichkeiten, das Tool zu nutzen:
python ldapdomaindump.py ausführenpython -m ldapdomaindump ausführenldapdomaindump ausführenHilfe kann mit dem Schalter -h abgerufen werden:
usage: ldapdomaindump.py [-h] [-u USERNAME] [-p PASSWORD] [-at {NTLM,SIMPLE}]
[-o DIRECTORY] [--no-html] [--no-json] [--no-grep]
[--grouped-json] [-d DELIMITER] [-r] [-n DNS_SERVER]
[-m]
HOSTNAME
Domain information dumper via LDAP. Dumps users/computers/groups and
OS/membership information to HTML/JSON/greppable output.
Required options:
HOSTNAME Hostname/ip or ldap://host:port connection string to
connect to (use ldaps:// to use SSL)
Main options:
-h, --help show this help message and exit
-u USERNAME, --user USERNAME
DOMAIN\username for authentication, leave empty for
anonymous authentication
-p PASSWORD, --password PASSWORD
Password or LM:NTLM hash, will prompt if not specified
-at {NTLM,SIMPLE}, --authtype {NTLM,SIMPLE}
Authentication type (NTLM or SIMPLE, default: NTLM)
Output options:
-o DIRECTORY, --outdir DIRECTORY
Directory in which the dump will be saved (default:
current)
--no-html Disable HTML output
--no-json Disable JSON output
--no-grep Disable Greppable output
--grouped-json Also write json files for grouped files (default:
disabled)
-d DELIMITER, --delimiter DELIMITER
Field delimiter for greppable output (default: tab)
Misc options:
-r, --resolve Resolve computer hostnames (might take a while and
cause high traffic on large networks)
-n DNS_SERVER, --dns-server DNS_SERVER
Use custom DNS resolver instead of system DNS (try a
domain controller IP)
-m, --minimal Only query minimal set of attributes to limit memmory
usage
Die meisten AD-Server unterstützen NTLM-Authentifizierung. Falls dies ausnahmsweise nicht der Fall ist, verwenden Sie --authtype SIMPLE.
Standardmäßig gibt das Tool alle Dateien in HTML, JSON und tabulatorgetrennter Ausgabe (greppable) aus. Es gibt außerdem zwei gruppierte Dateien (users_by_group und computers_by_os) für die Übersichtlichkeit. Diese haben keine greppable Ausgabe. Die JSON-Ausgabe für gruppierte Dateien ist standardmäßig deaktiviert, da sie sehr große Dateien erzeugt, die keine Daten enthalten, die nicht bereits in den anderen Dateien vorhanden sind.
Eine wichtige Option ist die -r-Option, die entscheidet, ob das DNSHostName-Attribut eines Computers in eine IPv4-Adresse aufgelöst werden soll. Dies kann zwar sehr nützlich sein, aber das DNSHostName-Attribut wird nicht automatisch aktualisiert. Wenn die AD-Domäne Unterdomänen für Computer-Hostnamen verwendet, ist der DNSHostName oft falsch und wird nicht aufgelöst. Beachten Sie auch, dass die Auflösung aller Hostnamen in der Domäne zu einer hohen Last auf dem Domänencontroller führen kann.
Standardmäßig versucht ldapdomaindump jedes einzelne Attribut, das es lesen kann, in den .json-Dateien auf die Festplatte zu schreiben. In großen Netzwerken verbraucht dies viel Speicher (da Gruppenbeziehungen derzeit im Speicher berechnet werden, bevor sie auf die Festplatte geschrieben werden). Um nur die minimal erforderlichen Attribute (die standardmäßig in den .html- und .grep-Dateien angezeigt werden) zu sichern, verwenden Sie den Schalter --minimal.
LDAPDomainDump enthält ein Dienstprogramm, mit dem die .json-Dateien von ldapdomaindump in CSV-Dateien konvertiert werden können, die für BloodHound geeignet sind. Das Dienstprogramm heißt ldd2bloodhound und wird bei der Installation zum Pfad hinzugefügt. Alternativ können Sie es mit python -m ldapdomaindump.convert oder mit python ldapdomaindump/convert.py ausführen, wenn Sie es aus dem Quellcode ausführen.
Das Konvertierungstool nimmt die Benutzer-/Gruppen-/Computer-/Vertrauensstellungen-.json-Dateien und konvertiert sie in group_membership.csv und trust.csv, die Sie zu BloodHound hinzufügen können. Beachten Sie, dass diese Dateien nur mit BloodHound 1.x kompatibel sind, was recht alt ist. Es gibt keine Pläne, die neueste Version zu unterstützen, da das BloodHound.py-Projekt dafür entwickelt wurde. Mit der DCOnly-Erfassungsmethode spricht dieses Tool außerdem nur mit LDAP und sammelt mehr Informationen als ldapdomaindump.
LDAPDomainDump enthält ein Dienstprogramm, mit dem die .json-Dateien von ldapdomaindump in eine enum4linux-ähnliche Ausgabe ausgegeben werden können. Das Dienstprogramm heißt ldd2pretty und wird bei der Installation zum Pfad hinzugefügt. Alternativ können Sie es mit python -m ldapdomaindump.pretty oder mit python ldapdomaindump/pretty.py ausführen, wenn Sie es aus dem Quellcode ausführen.
MIT