nmht3t/RawHive

GitHub: nmht3t/RawHive

RawHive 是一个 Cobalt Strike BOF,通过解析原始 NTFS 卷的元数据直接从磁盘提取 Windows 注册表配置单元和 ntds.dit 文件,绕过常规文件 API 以规避安全监控。

Stars: 22 | Forks: 3

# RawHive RawHive 是一个 Cobalt Strike BOF,用于直接从原始 NTFS 卷中提取选定的 Windows 注册表配置单元。它跳过了常规的文件 API,通过解析 NTFS 元数据来查找目标文件记录,并直接从磁盘复制字节数据。 它目前会查找: - `C:\Windows\System32\config\SAM` - `C:\Windows\System32\config\SYSTEM` - `C:\Windows\System32\config\SECURITY` - `C:\Windows\NTDS\ntds.dit`,前提是该主机是域控制器 默认情况下,它会读取 `C:`,但你也可以将其指向另一个本地驱动器号。 ## 工作原理 1. 打开选定的本地卷,例如 `\\.\C:`。 2. 读取 NTFS 引导扇区并查找 `$MFT`。 3. 遍历 `Windows`、`System32`、`config` 以及目标文件的目录索引。 4. 如果索引查找遗漏了某些内容,则回退到有边界的 MFT 扫描。 5. 从常驻数据或 cluster runlist 中读取目标文件数据。 6. 将恢复的字节数据作为 `.tmp` 文件写入输出目录。 ## 环境要求 - 以本地管理员或 SYSTEM 权限运行的 64 位 Beacon。 - 用于构建的 `x86_64-w64-mingw32-gcc` 和 `make`。 ## 构建 ``` make ``` 构建内容如下: ``` dist/rawhive.x64.o ``` `rawhive.cna` 会从 `dist/` 加载对象,因此在更改 `rawhive.c` 后需要重新构建。 ## 使用方法 ``` rawhive C:\Windows\Temp ``` 显式读取 `C:`: ``` rawhive C C:\Windows\Temp ``` 读取 `D:` 并将输出写入 `C:\Temp`: ``` rawhive d C:\Temp ``` 卷可以写为 `C`、`c` 或 `C:`。输出目录必须已经存在。 ## 输出 ``` __sam.tmp __system.tmp __security.tmp __ntds.tmp ``` 只有在选定的卷上存在 `C:\Windows\NTDS\ntds.dit` 且 RawHive 能够读取它时,才会写入 `ntds.tmp`。 ## 注意事项 - 回退的 MFT 扫描上限为 500,000 条记录。 - Runlist 的上限为 128 个区段。如果文件碎片过多,它会直接失败,而不是假装部分文件是完整的。 - 解析器会拒绝格式错误或不支持的 NTFS 结构,而不是在不安全的偏移量下继续运行。 - 只有当写入了完整的预期数据大小时,才会报告该文件已被提取。 ## 故障排除 `outdir does not exist` 你传递的目录在目标上不存在,或者它不是一个目录。 `open \\.\C: failed` Beacon 可能没有足够的权限,或者原始卷访问被阻止。 `not NTFS` 选定的卷似乎不是 NTFS。 `$mft runlist malformed` 或 `unsupported NTFS geometry` 卷布局不受支持或已损坏 `output path too long` 请使用较短的输出目录路径。 ## 概念验证 ![RawHive 概念验证](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7bb95d51d4041537.png)
标签:BOF, Cobalt Strike, Gophish, NTFS解析, SCP, 凭证提取, 攻击诱捕, 欺骗防御