在内部渗透测试期间,域控制器上安装了Cortex EDR。在获得域管理员权限后,EDR阻止了所有已知的提取NTDS哈希的尝试。因此,我不得不考虑替代方法来获取哈希值。
TL;DR:
要提取哈希,我们需要:
- SYSTEM注册表单元,我使用Magnet DumpIt转储了整个服务器内存,然后通过Volatility提取了注册表单元。
- NTDS.dit文件,该文件受操作系统保护并被EDR监控,我使用了FTK Imager以原始状态读取C:\驱动器,从而避免了触发常规系统调用。
- 最后使用impacket-secretdump在本地解密文件。
详细过程:
我之前写过一篇关于类似方法转储Lsass的文章 medium.com/@0xcc00/byp…
所有使用的工具都经过签名,并且蓝队有合法使用的场景,这给了攻击者利用它们而不被拦截的优势。
要手动提取哈希,我们需要两样东西:SYSTEM注册表单元和系统中的ntds.dit文件。
提取SYSTEM注册表单元:
我通过转储整个服务器内存来提取它,使用Magnet DumpIt (www.magnetforensics.com/resources/m…) 花费了大约30分钟。
接下来,我们可以使用Volatility从原始内存转储中提取注册表单元。我将结合使用Volatility2和Volatility3,因为某些模块在不同版本中表现更好。
首先,使用Volatility3 (github.com/volatilityf…) 列出所有注册表单元及其位置:
vol -f test.raw windows.registry.printkey.PrintKey
(此处为操作截图示意)
为了转储注册表单元,我们将使用Volatility2 (github.com/volatilityf…
/opt/volatility_2.6_lin64_standalone/volatility_2.6_lin64_standalone --profile=Win10x64_14393 dumpregistry -o 0xaf0287e41000 -D output_vol -f test.raw
(此处为操作截图示意)
提取NTDS.dit文件:
此文件受操作系统保护,直接复制非常困难。这就是为什么存在卷影拷贝攻击的原因,但EDR会阻止这些尝试,并且很可能监控涉及该文件的所有系统调用。为了绕过这个限制,我使用了FTK Imager。FTK Imager通常用于取证,创建和分析硬盘转储,它还有一个功能允许读取和分析连接的驱动器。
这种方法允许我们以原始状态读取C:\驱动器,并在不触发常规系统调用的情况下访问其上的任何文件。通过这种方式,我们不仅可以读取ntds.dit,还可以读取系统中任何受保护、被监控或被运行进程锁定的文件。
FTK Imager本身不是便携的,虽然有一个名为FTK Imager Lite的便携版本,但是付费的。因此,我们需要创建自己的便携版本(因为在评估期间没人愿意在域控制器上安装软件)。
以下是创建便携版本的步骤:
- 在您的Windows机器上下载并安装FTK Imager:(www.exterro.com/digital-for…
- 将
C:\Program Files\AccessData\FTK Imager的内容复制到一个新文件夹中。 - 从
C:\Windows\System32中将以下DLL文件复制到新文件夹: — mfc100* — mfc110* — mfc120* — mfc140* — mfc140u.dll — msvcp140.dll — vcruntime140.dll
现在,您可以共享此文件夹并从域控制器访问它。
要打开当前驱动器:
- 转到 File -> Add Evidence Item -> Physical Drive -> 选择C盘。
- 导出 C:\Windows\NTDS\ntds.dit。 (此处为操作截图示意)
现在我们可以使用impacket-secretdump解密NTDS.dit文件:
secretsdump.py LOCAL -system output_vol/registry.0xaf0287e41000.SYSTEM.reg -ntds ntds.dit
(此处为操作截图示意) CSD0tFqvECLokhw9aBeRqv2FsLdINop9u2a1bq3Xlo5ejzZY1j6gp4HS2kVKCrZ5whLvQ6iaeWllCvaindtKGUCEex+/kzH4R8GJa2jSQ2F9pwUG2pcLukUqA8yGqDUP