一、S4U2协议(Service for User)
-
两种扩展协议:
- S4U2Self:
服务代表用户向KDC申请访问自身的票据(无需用户密码),适用于服务需验证用户身份的场景(如Web应用)。- 触发条件:服务配置了约束委派(Constrained Delegation)。
- S4U2Proxy:
服务将用户的票据转发给其他服务(代理),实现跨服务身份传递(如数据库访问后端API)。- 依赖条件:服务需被信任可委派(TrustedToAuthForDelegation)。
- S4U2Self:
-
在无法直接接触域控时,通过控制一个具有委派权限的服务账户(如SQL Server),转发用户请求获取高权限票据。
二、S4U2Self 利用步骤
服务代表用户向KDC申请访问自身的票据(无需用户密码),适用于服务需验证用户身份(如Web应用)。
前提条件:
- 服务账户已配置 约束委派(Constrained Delegation) 或 基于资源的约束委派(RBCD)。
-
获取服务账户的哈希或密码
-
请求S4U2Self票据
- 使用服务账户的哈希,向KDC请求一个可转发的TGS(Service Ticket)给目标用户(如
administrator
)
- 使用服务账户的哈希,向KDC请求一个可转发的TGS(Service Ticket)给目标用户(如
-
验证票据
- 查看缓存的票据是否包含目标用户的身份
三、S4U2Proxy 利用步骤
服务将用户的票据转发给其他服务(代理),实现跨服务身份传递(如数据库访问后端API)。
前提条件:
- 服务账户配置了 信任委派(TrustedToAuthForDelegation) 或 基于资源的约束委派(RBCD)。
-
控制具有委派权限的服务账户
- 通过漏洞(如PrivExchange)获取可委派的服务账户权限。
- 查询域内配置了委派的服务账户
-
获取用户的可转发TGS
- 利用S4U2Self生成可转发的TGS。
-
转发票据到目标服务
- 使用S4U2Proxy将TGS转发到目标服务(如域控的LDAP服务)
- 票据将自动注入内存,可直接访问目标服务。
四、基于资源的约束委派(RBCD)利用
当服务账户无法直接配置传统委派时,通过RBCD劫持。
-
获取对目标服务的写权限
- 通过ACL滥用或漏洞(如ADCS ESC1)获取修改目标服务(如域控)
msDS-AllowedToActOnBehalfOfOtherIdentity
属性的权限。
- 通过ACL滥用或漏洞(如ADCS ESC1)获取修改目标服务(如域控)
-
配置RBCD
- 添加服务账户到目标服务的委派列表
-
利用S4U2Proxy提权
- 使用服务账户申请访问目标服务的票据
以下是关于 2021年两个Kerberos漏洞(名称伪装与KDC欺骗)的联合利用分析,结合Active Directory(AD)的机制展开说明
CVE-2021-42278(名称伪装漏洞)漏洞原理
-
名称伪装(SAM-Account-Name Spoofing)
- Active Directory(AD)允许计算机账户的
sAMAccountName
属性包含多个$
符号(如DC01$$
),但Kerberos协议在验证时可能错误地将此类名称解析为合法域控账户(如DC01$
)。 - 关键缺陷:KDC(密钥分发中心)未严格校验计算机账户名称的唯一性,导致攻击者可伪造高权限账户(如域控)的身份。
- Active Directory(AD)允许计算机账户的
-
与CVE-2021-42287的关联
- 需结合 CVE-2021-42287(KDC欺骗漏洞) 完成攻击链:
- 名称伪装:创建伪装成域控的计算机账户(如
DC01$$
)。 - KDC欺骗:诱导服务或用户向伪造的KDC请求票据,生成高权限ST(服务票据)。
- 名称伪装:创建伪装成域控的计算机账户(如
- 需结合 CVE-2021-42287(KDC欺骗漏洞) 完成攻击链:
漏洞复现步骤
noPac.exe -domain htb.local -user domain_user -pass 'Password123!' /dc dc02.htb.local /mAccount demo123 /mPassword Password123! /service cifs /ptt
参数 | 说明 |
---|---|
-domain htb.local | 目标域名。 |
-user domain_user | 普通域用户账号(需具备创建计算机账户的权限)。 |
-pass 'Password123!' | 对应用户的密码。 |
/dc dc02.htb.local | 指定域控制器的主机名。 |
/mAccount demo123 | 攻击者创建的恶意计算机账户名称(用于名称伪装)。 |
/mPassword Password123! | 恶意计算机账户的密码。 |
/service cifs | 目标服务(通常为 cifs 以访问文件共享)。 |
/ptt | 将生成的票据注入当前会话(Pass-the-Ticket)。 |
创建恶意计算机账户
- 绕过机制:AD默认允许
$
符号重复,且部分工具(如nltest
)会误判FAKEDC$$
为合法域控。
请求伪造的TGT
- 结果:KDC返回一个看似合法的TGT,但实际由攻击者控制的账户签发。
结合S4U2Self获取高权限ST
- 关键点:KDC因名称解析错误,误认为
FAKEDC$$
是域控,从而签发域管理员权限的ST。
漏洞影响
- 权限提升:普通域用户可伪造域控账户,获取域管理员权限。
- 隐蔽性:攻击无需直接接触域控,且日志中可能仅记录为普通计算机账户活动。