Resource-based Constrained Delegation
最后更新于
最后更新于
这类似于基本的受限委派,但不是给予一个对象对服务进行任意用户模拟的权限。基于资源的受限委派设置了能够对其进行任意用户模拟的用户。
在这种情况下,受限对象将具有一个名为_msDS-AllowedToActOnBehalfOfOtherIdentity_的属性,其中包含可以对其进行任意用户模拟的用户的名称。
与其他委派形式的另一个重要区别是,任何具有对计算机帐户的写入权限(GenericAll/GenericWrite/WriteDacl/WriteProperty等)的用户都可以设置msDS-AllowedToActOnBehalfOfOtherIdentity_(在其他形式的委派中,您需要域管理员权限)。
在受限委派中曾提到,用户的_userAccountControl_值中的**TrustedToAuthForDelegation
标志是执行S4U2Self所需的。但这并不完全正确。
事实是,即使没有该值,如果您是一个服务**(具有SPN),您也可以对任何用户执行S4U2Self,但是,如果您具有TrustedToAuthForDelegation
,返回的TGS将是可转发的,如果您没有该标志,则返回的TGS将不会是可转发的。
然而,如果在S4U2Proxy中使用的TGS是不可转发的,尝试滥用基本受限委派将不起作用。但是,如果您试图利用基于资源的受限委派,它将起作用(这不是一个漏洞,显然是一个功能)。
如果您对计算机帐户具有写等效权限,则可以在该计算机中获得特权访问。
假设攻击者已经对受害者计算机具有写等效权限。
攻击者入侵具有SPN的帐户或创建一个(“服务A”)。请注意,任何管理员用户,即使没有其他特殊权限,也可以创建多达10个计算机对象(MachineAccountQuota**)**并设置它们的SPN。因此,攻击者可以只需创建一个计算机对象并设置一个SPN。
攻击者滥用其对受害计算机(ServiceB)的写权限,配置基于资源的受限委派以允许ServiceA对该受害计算机(ServiceB)进行任意用户模拟。
攻击者使用Rubeus执行完整的S4U攻击(S4U2Self和S4U2Proxy),从Service A到Service B请求具有对Service B的特权访问权限的用户。
S4U2Self(从受损/创建的帐户的SPN):请求管理员到我的TGS(不可转发)。
S4U2Proxy:使用前一步的不可转发TGS请求管理员到受害主机的TGS。
即使您使用的是不可转发的TGS,由于您正在利用基于资源的受限委派,它也会起作用。
攻击者可以传递票据并模拟用户以获得对受害ServiceB的访问权限。
要检查域的_MachineAccountQuota_,您可以使用:
您可以使用powermad在域内创建计算机对象**:**
使用activedirectory PowerShell模块
使用powerview
首先,我们创建了具有密码123456
的新计算机对象,因此我们需要该密码的哈希值:
这将打印该账户的RC4和AES哈希。 现在,可以执行攻击:
您可以使用Rubeus 的 /altservice
参数一次性请求生成更多的票据:
请注意,用户具有一个名为 "Cannot be delegated" 的属性。如果用户的此属性设置为 True,您将无法冒充他。此属性可以在 bloodhound 中查看。
最后一个命令将执行完整的 S4U 攻击,并将 TGS 注入 从管理员到受害主机的 内存 中。 在此示例中,请求了管理员的 CIFS 服务的 TGS,因此您将能够访问 C$:
了解这里可用的服务票证。
KDC_ERR_ETYPE_NOTSUPP
: 这意味着Kerberos配置为不使用DES或RC4,而您提供的只是RC4哈希。在Rubeus中至少提供AES256哈希(或只提供rc4、aes128和aes256哈希)。示例:[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())
KRB_AP_ERR_SKEW
: 这意味着当前计算机的时间与DC的时间不同,Kerberos无法正常工作。
preauth_failed
: 这意味着给定的用户名+哈希无法用于登录。在生成哈希时,您可能忘记在用户名中加入"$"(.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
)
KDC_ERR_BADOPTION
: 这可能意味着:
您尝试模拟的用户无法访问所需的服务(因为您无法模拟它或因为它没有足够的特权)
所请求的服务不存在(如果您请求winrm的票证,但winrm未运行)
创建的fakecomputer在易受攻击的服务器上失去了特权,您需要将其还回去。