5-8

说说域内委派

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

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

a. 非约束性委派

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

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

攻击思路

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

b. 约束性委派

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

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