nikaiw/VMkatz

GitHub: nikaiw/VMkatz

一款用于从虚拟机内存快照与虚拟磁盘直接提取 Windows 凭据的离线取证工具。

Stars: 962 | Forks: 97

# VMkatz [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Build](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/38f54fa679010418.svg)](https://github.com/nikaiw/VMkatz/actions/workflows/release.yml) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ee1c31d049010419.svg)](https://github.com/nikaiw/VMkatz/actions/workflows/clippy.yml) [![Platform](https://img.shields.io/badge/platform-linux%20|%20windows%20|%20macos%20|%20esxi-lightgrey)]() ## 庞大到无法窃取 你已经进入红队任务三周。你的流量通过 VPN,然后经过四个 SOCKS 代理链跳转到被攻陷的跳板机,最后才触达目标网络。每一个数据包都走的是“风景优美”的路线。 经过数天的横向移动,你登陆了一台挂载在虚拟化集群上的 NAS,目录列表看起来大不相同:成排的 `.vmdk`、`.vmsn`、`.sav`。数百 GB 的虚拟机——域控制器、管理员工作站、核心资产——就静静地躺在那里。 但你的链路每秒只能吞吐 200 KB。提取一个 100 GB 的磁盘镜像需要 **六天**,而每小时的持续外传都是 SOC 发现异常、烧毁你的隧道、导致整个链条崩溃的机会。 VMkatz 的存在是因为你不必提取那些本可以就地读取的内容。它直接从虚拟机内存快照和虚拟磁盘中提取 Windows 机密——NTLM 哈希、DPAPI 主密钥、Kerberos 票据、缓存的域凭据、LSA 秘密、NTDS.dit、BitLocker 密钥——**在 NAS、Hypervisor、或任何 VM 文件所在之处**。 一个单一静态二进制文件,约 3 MB。丢到 ESXi 主机、Proxmox 节点或 NAS 上。指向一个 `.vmsn`、`.vmdk` 或整个 VM 文件夹。带走的是凭据,而不是磁盘镜像。 ## 提取内容 ### 从内存快照(LSASS) 所有 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 令牌 | 通常对仅本地登录为空 | 此外:**从内存中(池标签扫描 `FVEc`/`Cngb`)提取 BitLocker FVEK**。 ### 从虚拟磁盘(离线) - **SAM 哈希**:本地账户的 NT/LM 哈希及账户状态(禁用、空密码) - **LSA 秘密**:服务账户密码、自动登录凭据、机器账户密钥 - **缓存的域凭据**:DCC2 哈希(最近 N 次域登录) - **DPAPI 主密钥**:Hashcat 友好哈希(`$DPAPImk$` — 模式 15300/15310/15900/15910) - **NTDS.dit**:从域控制器磁盘提取完整的 Active Directory 哈希(原生 ESE 解析器) - **BitLocker 解密**:使用从内存提取的 FVEK 进行透明磁盘解密 ## 支持的输入格式 | 格式 | 扩展名 | 来源 | 状态 | | --- | --- | --- | --- | | VMware 快照 | `.vmsn` + `.vmem` | Workstation、ESXi | 已测试 | | VMware 嵌入式快照 | `.vmsn`(无 `.vmem`) | ESXi 挂起 | 已测试 | | VirtualBox 保存状态 | `.sav` | VirtualBox | 已测试 | | QEMU/KVM 保存状态 | 自动识别 | Proxmox、QEMU | 已测试 | | QEMU/KVM ELF 核心转储 | `.elf` | `virsh dump` | 已测试 | | Hyper-V 保存状态 | `.vmrs` | Hyper-V 2016+ | 未测试 | | VMware 虚拟磁盘 | `.vmdk`(稀疏 + flat) | 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)。 ## 快速开始 ``` # 从 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/ # 从原始注册表 hive 中提取 ./vmkatz SAM SYSTEM SECURITY # 输出为 hashcat 格式的哈希 ./vmkatz --format hashcat snapshot.vmsn # 导出 Kerberos 票据 ./vmkatz --kirbi snapshot.vmsn # .kirbi files ./vmkatz --ccache snapshot.vmsn # .ccache file # 导出 BitLocker FVEK 以用于 dislocker ./vmkatz --bitlocker-fvek /tmp/keys snapshot.vmsn # 递归扫描路径下的所有 VM ./vmkatz -r /vmfs/volumes/datastore1/ # 解析 LSASS 小转储 ./vmkatz lsass.dmp ``` ## 输出格式 | 格式 | 标志 | 描述 | | --- | --- | --- | | `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` | 机器可读,包含所有字段 | ## 在 ESXi 上的部署 ``` # 为 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 ``` 有关 VIB 绕过、VMFS 原始设备访问和自动发现的详细信息,请参阅 [docs/esxi.md](docs/esxi.md)。 ## 构建特性 VMkatz 是模块化的。特性可以在编译时启用/禁用: | 特性 | 描述 | 默认 | | --- | --- | --- | | `vmware` | VMware `.vmsn`/`.vmem` 快照支持 | 是 | | `vbox` | VirtualBox `.sav` 保存状态支持 | 是 | | `qemu` | QEMU/KVM ELF 核心转储 + Proxmox 保存状态 | 是 | | `hyperv` | Hyper-V `.vmrs`/`.bin`/`.raw` 转储支持 | 是 | | `sam` | 磁盘提取(SAM/LSA/DCC2)+ 磁盘格式处理器 | 是 | | `ntds.dit` | NTDS.dit AD 提取。需要 `sam` | 是 | | `carve` | 从不完整/截断的内存中降级提取 | 是 | | `dump` | 将进程内存转储为小型转储 | 是 | | `vmfs` | VMFS-5/6 原始解析器(用于 ESXi SCSI 设备)。需要 `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 ``` ## 文档 - [ESXi 部署、VIB 绕过、VMFS 原始访问](docs/esxi.md) - [示例输出](docs/examples.md) - [架构与模块布局](docs/architecture.md) - [已测试的目标与已知限制](docs/tested-targets.md) ## 感谢 - [**mimikatz**](https://github.com/gentilkiwi/mimikatz) 由 Benjamin Delpy ([@gentilkiwi](https://twitter.com/gentilkiwi) 提供)——LSASS 内部机制与 Windows 凭据解密的权威参考。 - [**pypykatz**](https://github.com/skelsec/pypykatz) 由 Tamás Jós ([@skelsec](https://twitter.com/skelsec) 提供)——纯 Python 实现的 mimikatz,作为 SAM/LSA/DCC2 提取的交叉参考。 - [**Impacket**](https://github.com/fortra/impacket) 由 Fortra(最初由 Alberto Solino [@agsolino](https://twitter.com/agsolino) 提供)——NTDS.dit 提取和 pwdump 输出格式的参考实现。 - [**Vergilius Project**](https://www.vergiliusproject.com/)——用于验证所有支持构建(XP 至 Win11 24H2)的 EPROCESS 字段偏移的 Windows 内核结构文档。 - [**dissect.vmfs**](https://github.com/fox-it/dissect.vmfs) 由 Fox-IT(NCC 集团)提供——Dissect DFIR 框架中的 Python VMFS 解析器,用于参考 VMFS 磁盘结构。 - [**vmfs-tools**](https://github.com/glandium/vmfs-tools) 由 Mike Hommey 提供——开源的 VMFS3/5 实现,记录了核心磁盘结构和地址类型。 - [**volatility-kerberos**](https://github.com/airbus-cert/volatility-kerberos) 由 Sylvain Peyrefitte ([@citronneur](https://twitter.com/citronneur), Airbus CERT) 提供——Volatility 3 Kerberos 插件,启发了对已释放 LSASS 内存中孤立票据的提取方法。
标签:BitLocker 密钥, DPAPI, Hypervisor, Kerberos 票据, LSASS, LSA 机密, Mimikatz, NAS, NTDS.dit, NTLM 哈希, T1003, VMDK, VMkatz, VMSN, VMware, Windows 凭证提取, 内存镜像, 凭证盗窃, 可视化界面, 域控制器, 就地取证, 敏感数据, 数据展示, 红队, 虚拟磁盘, 通知系统