域渗透-DCsync
0x1 概念
在域中,不同的DC之间,每隔15分钟会进行一次域数据的同步。当一个DC(辅助DC)想从其他DC(主DC)获取数据时,辅助DC会向主DC发起一个GetNCChanges请求。请求的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。DCSync就是利用的这个原理,通过Directory Replication Service(DRS)服务的GetNCChanges接口向域控发起数据同步请求。
在DCSync功能出现之前,要想获得域用户的哈希,需要登录域控制器,在域控制器上执行代码才能获得域用户的哈希。2015年8月,新版的mimikatz增加了DCSync的功能,该功能可以模仿一个域控DC,从真实的域控中请求数据,如用户的哈希。该功能最大的特点就是可以实现不登录到域控而获取域控上的数据。
0x2 利用条件
所需权限:
- 复制目录更改
- 复制目录全部更改
- 在筛选集中复制目录更改(非必要)
默认拥有上述权限的用户如下
|
|
DCSync 攻击的对象如果是只读域控制器 (RODC),则会失效,因为 RODC 是不能参与复制同步数据到其他 DC 的
0x3 利用方法
1.使用mimikatz
切换到debug权限
|
|
导出域内所有用户的hash:
|
|
导出域内administrator帐户的hash:
|
|
下面开始实验使用Domain Admins内用户zs,登录到域内主机上,使用mimikatz来读取hash
2.powershell实现
通过Invoke-ReflectivePEinjection调用mimikatz.dll中的dcsync功能
Invoke-DCSync.ps1导出域内所有用户的hash:
|
|
导出域内administrator帐户的hash:
|
|
0x4 DCSync在域内维持权限
利用条件:
获得以下任一用户的权限:
- Domain Admins组内的用户
- Enterprise Admins组内的用户
利用原理:
向域内的一个普通用户添加如下三条ACE(Access Control Entries):
- DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes(GUID:89e95b76-444d-4c62-991a-0facbeda640c)
该用户即可获得利用DCSync导出域内所有用户hash的权限
利用方法:
PowerView.ps1添加ACE的命令:
|
|
删除ACE的命令:
|
|
开始实验,我们在一台域内主机登录liu普通域用户,使用mimikatz导出hash,失败
在另一台域内主机登录Domain Admins内用户zs,执行ps1,成功添加
回到liu这台主机,再次导出hash,成功导出数据
0x5 检测DCSync后门
具有高权限但不在高权限组的用户被称之为Shadow Admin,例如0x03中的域用户test1,仅通过查询高权限组的成员无法发现域内的Shadow Admin
检测原理:
枚举Active Directory中所有用户的ACL,标记出特权帐户
利用条件:
ACLight- Powershell v3.0
- 域内普通用户权限
要求Powershell v3.0,增加一台win10来执行Execute-ACLight2.bat,登录域内普通用户ls
生成result文件夹查看结果,排查到liu用户为Shadow Admin