
Dump d'informations Active Directory via LDAP
Extracteur d'informations Active Directory via LDAP
Dans un domaine Active Directory, beaucoup d'informations intéressantes peuvent être récupérées via LDAP par tout utilisateur (ou machine) authentifié. Cela fait de LDAP un protocole intéressant pour la collecte d'informations lors de la phase de reconnaissance d'un test d'intrusion sur un réseau interne. Un problème est que les données LDAP ne sont souvent pas disponibles dans un format facile à lire.
ldapdomaindump est un outil qui vise à résoudre ce problème en collectant et analysant les informations disponibles via LDAP et en les produisant dans un format HTML lisible par l'homme, ainsi que dans des fichiers json et csv/tsv/greppable lisibles par machine.
L'outil a été conçu avec les objectifs suivants en tête :
L'outil produit plusieurs fichiers contenant un aperçu des objets du domaine :
Ainsi que deux fichiers groupés :
Nécessite ldap3 > 2.0 et dnspython. ldapdomaindump nécessite Python 3.6 ou supérieur.
Les dépendances peuvent être installées manuellement avec pip install ldap3 dnspython future, mais devraient dans la plupart des cas être gérées par pip lors de l'installation du paquet principal depuis git ou pypi.
Le paquet ldapdomaindump peut être installé avec python setup.py install à partir de la source git, ou pour la dernière version avec pip install ldapdomaindump.
Il y a 3 façons d'utiliser l'outil :
python ldapdomaindump.pypython -m ldapdomaindumpldapdomaindumpL'aide peut être obtenue avec l'option -h :
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
La plupart des serveurs AD prennent en charge l'authentification NTLM. Dans le rare cas contraire, utilisez --authtype SIMPLE.
Par défaut, l'outil produit tous les fichiers en HTML, JSON et en sortie délimitée par des tabulations (greppable). Il existe également deux fichiers groupés (users_by_group et computers_by_os) pour plus de commodité. Ceux-ci n'ont pas de sortie greppable. La sortie JSON pour les fichiers groupés est désactivée par défaut car elle crée des fichiers très volumineux sans données qui ne sont pas déjà présentes dans les autres fichiers.
Une option importante est l'option -r, qui détermine si l'attribut DNSHostName d'un ordinateur doit être résolu en adresse IPv4. Bien que cela puisse être très utile, l'attribut DNSHostName n'est pas automatiquement mis à jour. Lorsque le domaine AD utilise des sous-domaines pour les noms d'hôte des ordinateurs, le DNSHostName sera souvent incorrect et ne se résoudra pas. Gardez également à l'esprit que la résolution de chaque nom d'hôte du domaine pourrait provoquer une charge importante sur le contrôleur de domaine.
Par défaut, ldapdomaindump essaiera d'écrire sur le disque chaque attribut qu'il peut lire dans les fichiers .json. Dans les grands réseaux, cela utilise beaucoup de mémoire (car les relations de groupe sont actuellement calculées en mémoire avant d'être écrites sur le disque). Pour ne vider que les attributs minimaux requis (ceux affichés par défaut dans les fichiers .html et .grep), utilisez l'option --minimal.
LDAPDomainDump inclut un utilitaire qui peut être utilisé pour convertir les fichiers .json de ldapdomaindump en fichiers CSV adaptés à BloodHound. L'utilitaire s'appelle ldd2bloodhound et est ajouté à votre chemin lors de l'installation. Vous pouvez également l'exécuter avec python -m ldapdomaindump.convert ou avec python ldapdomaindump/convert.py si vous l'exécutez à partir de la source.
L'outil de conversion prendra les fichiers .json des utilisateurs/groupes/ordinateurs/approbations et les convertira en group_membership.csv et trust.csv que vous pouvez ajouter à BloodHound. Notez que ces fichiers ne sont compatibles qu'avec BloodHound 1.x qui est assez ancien. Il n'est pas prévu de prendre en charge la dernière version car le projet BloodHound.py a été créé pour cela. Avec la méthode de collecte DCOnly, cet outil ne communiquera également qu'avec LDAP et collectera plus d'informations que ldapdomaindump ne le ferait.
LDAPDomainDump inclut un utilitaire qui peut être utilisé pour produire les fichiers .json de ldapdomaindump dans une sortie de type enum4linux. L'utilitaire s'appelle ldd2pretty et est ajouté à votre chemin lors de l'installation. Vous pouvez également l'exécuter avec python -m ldapdomaindump.pretty ou avec python ldapdomaindump/pretty.py si vous l'exécutez à partir de la source.
MIT