### 说说域内委派

1. 基础知识：委派的类型

首先，我们需要理解域内委派的两种主要类型，因为它们的攻击方法截然不同

a. 非约束性委派

这是最古老、也最危险的一种委派方式

- 工作原理：当一个用户访问配置了非约束性委派的服务（比如一个 Web 服务器）时，域控制器会把该用户的票据授予票据（TGT）发送给这个服务。这个服务会把用户的 TGT 缓存到内存中，以便后续代表用户去访问其他任何服务
- 渗透利用点：
  1. 票据窃取（TGT Stealing）：非约束性委派的关键漏洞在于，服务会在内存中缓存所有访问过它的用户的 TGT
  2. 伪造身份：如果一个渗透测试人员能够控制这个服务账户（例如通过弱密码、令牌窃取等），他就可以从内存中导出所有缓存的 TGT，包括域管理员的 TGT
  3. 万能钥匙：拿到域管理员的 TGT 后，攻击者就拥有了完全的域管理员权限，可以代表该管理员去访问域内任何一台机器或服务，实现了最高级别的权限提升

攻击思路：

1. 侦察：使用工具（如 PowerView、SharpHound）枚举所有配置了非约束性委派的机器账户或用户账户。
   - PowerView 命令：`Get-DomainUser -UnconstrainedDelegation` 或 `Get-DomainComputer -UnconstrainedDelegation`
2. 等待和诱骗：找到一个目标后，我们需要等待或诱骗一个高权限用户（如域管理员）来访问这台机器上的服务
3. 票据导出：一旦高权限用户访问了，我们立即使用 `Mimikatz` 或 `Rubeus` 等工具，在被控机器上从内存中导出所有 TGT 票据
4. 票据复用：拿到域管理员的 TGT 后，我们可以使用 `Mimikatz` 的 `kerberos::ptt`（Pass The Ticket）功能，将票据注入到当前会话中，然后以域管理员的身份访问域内任何资源，比如 `net use \\DC01\c$ /y`

b. 约束性委派

这是为了解决非约束性委派的风险而引入的更安全的委派方式，它限制了服务可以代表用户访问的范围。但它依然存在攻击点

- 工作原理：与非约束性委派不同，约束性委派不会把用户的 TGT 传给服务。它利用 Kerberos 协议的扩展（S4U2Self 和 S4U2Proxy）来完成委派
  - S4U2Self：服务向 KDC（Key Distribution Center）证明它代表用户，并请求一个服务票据（ST）
  - S4U2Proxy：服务用这个 ST 去请求另一个服务的 ST，但这个过程是严格受限的
- 渗透利用点：
  1. 滥用 S4U2Proxy：如果攻击者能够控制一个配置了约束性委派的服务账户，他可以滥用 S4U2Proxy 协议，冒充域内任何一个普通用户（甚至不存在的用户）去请求访问被委派的特定服务
  2. 横向移动：这使得攻击者可以以任意用户的身份访问特定服务，即使该用户并没有访问权限，从而实现横向移动

攻击思路：

1. 侦察：找到配置了约束性委派的账户
   - PowerView 命令：`Get-DomainUser -Properties * | Where {$_.msds-allowedtodelegateto}`
2. 控制服务账户：通过密码喷洒、弱密码或凭证窃取等方式，获取一个配置了约束性委派的服务账户的权限
3. 执行 S4U2Proxy 攻击：使用 `Rubeus` 或 `Kekeo` 等工具，冒充一个域内用户（如 `Administrator`），向 KDC 请求访问目标服务的票据
   - Rubeus 命令示例：`Rubeus.exe s4u /user:victim-user /rc4:victim-user-hash /impersonateuser:administrator /altservice:HTTP/webservice.contoso.com /dc:DC01.contoso.com /ptt`
4. 票据复用：成功后，会将伪造的票据注入到当前会话，攻击者即可用管理员身份访问 `webservice.contoso.com`

c. 基于资源的约束性委派

这是 Windows Server 2012 引入的更精细的委派方式，它将委派配置在被访问的资源上，而不是服务账户上

- 渗透利用点：
  1. ACL 滥用：如果攻击者控制了一台机器（例如，通过普通用户权限），并且该机器的ACL（访问控制列表）允许某个低权限账户进行委派配置，那么攻击者就可以将该机器配置为允许某个低权限账户进行委派
  2. 权限提升：攻击者可以利用这个漏洞，将一个低权限服务账户配置为可以代表任何用户访问这台机器，从而实现权限提升