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`
请使用较短的输出目录路径。
## 概念验证

标签:BOF, Cobalt Strike, Gophish, NTFS解析, SCP, 凭证提取, 攻击诱捕, 欺骗防御