基于资源的约束委派利用
2022-1-21 17:8:55 Author: mp.weixin.qq.com(查看原文) 阅读量:94 收藏

点击"蓝字"关注,获取更多技术内容!
在内网渗透中,当我们已经获取到一个账号,或者一个机器权限后,如何扩大自己的优势,又或者说除了用已知的密码去爆破其他机器以外,利用基于资源的委派攻击还能做到什么地步,这也是本文将要讨论的内容,本文也将教大家去编写去搜索内网中容易被进行基于资源的委派攻击(RBCD)的机器的代码。
基于资源的委派攻击的流程图如下:
简单的讲,也就是如果攻击者能够在Service B的机器上设置msDS-AllowedToActOnBehalfOfOtherIdentity属性为Service A,也就允许Service A利用s4u2self协议代表其他用户身份来访问Service B的话,那我们就可以做到提权等操作:
默认域用户可以添加10个机器账号:
而机器自身和把机器拉入域的域用户都有权限更改机器的msDS-AllowedToActOnBehalfOfOtherIdentity属性。那我们继续回到一开始的问题“当我们已经获取到一个账号,或者一个机器权限后,如何扩大自己的优势”,因此我们的思路有了:
  1. 寻找可控的账号都拉哪些机器入域(查询mS-DS-CreatorSID
  2. 寻找哪些机器的msDS-AllowedToActOnBehalfOfOtherIdentity属性值是可控账号

思路1

首先看看如何查询所有机器的mS-DS-CreatorSID,示例代码如下:
运行程序:

可以看出上面提示如win7、testtest、spnspnspn机器都是由win7user用户拉入域的,如果我们手上拥有win7user的账号密码,即可打上面的3台机器。我们尝试利用win7user攻击spnspnspn机器为例,首先spnspnspn机器并没有设置msDS-AllowedToActOnBehalfOfOtherIdentity属性:
我们尝试利用win7user修改spnspnspn$的msDS-AllowedToActOnBehalfOfOtherIdentity属性,首先添加一个机器账号:
然后利用笔者写的工具进行msDS-AllowedToActOnBehalfOfOtherIdentity属性更改:
https://github.com/Jumbo-WJB/SharpAllowedToAct-Modify
核心利用代码如下:
尝试修改:
可以成功看到msDS-AllowedToActOnBehalfOfOtherIdentity属性已被更改:
因此利用s4u2self也能成功的获取到票据:

思路2

思路1是寻找mS-DS-CreatorSID,然后修改对应机器的msDS-AllowedToActOnBehalfOfOtherIdentity,那我们可以直接跳过第一步,直接找msDS-AllowedToActOnBehalfOfOtherIdentity,如果里面已经被设置了,也就省去了添加的步骤。
首先我们用python代码来完成ldap搜索的步骤,我们使用ldap3模块进行ldap的连接和搜索操作:

然后利用ldap搜索语句搜索所有的computers:

然后获取对应的msDS-AllowedToActOnBehalfOfOtherIdentity,这里有个坑点,直接获取msDS-AllowedToActOnBehalfOfOtherIdentity不具备可读性,这里我用impacket里面的模块进行了可读展示:

得到了sid,还需要去搜索对应的samaccountname
最终程序运行结果如下:
根据上面结果,如果我们可控的账号是spntest的话,我们就可以攻击dcserver这台机器,事实也确实如此:

上面程序还有个坑点,python ldap3模块中,如果你使用了同一个ldapsession的话,每次ldap_session.entries的结果都会被覆盖,可以看下程序一开始的调试报错,上面的查询结果还是computers呢,下面的entries结果就被覆盖成了samaccountname:

因此程序中我把查询出来的第一次结果放到了一个列表中,后面的查询都从列表中查询,防止被覆盖:


python写完了,但是有个问题,在受害者机器上不一定有python环境,但是如果在本机执行,还需要走代理出来,代理有可能不稳定,因此弄个能内存加载的c#版本是必备的。
核心代码也很简单,就是连接ldap进行相关的搜索:
但是c#也有个坑点,和python一样,msDS-AllowedToActOnBehalfOfOtherIdentity查询出来的结果不是可读的,因此我根据StandIn代码,发现可以用RawSecurityDescriptor进行值可视化:


最终的效果如下:
程序代码:
https://github.com/Jumbo-WJB/search_rbcd/
和上面的python结果一致。
在渗透中,也经常可能会遇到一个低权限用户,如service权限,这个时候我们是否可以进行RBCD攻击呢?
当前用户是一个低权限用户:
首先监听获取来源用户:
发现实际上过来的用户是当前机器账号身份:
又或者dwm用户:
请求的网络身份也是当前机器账号身份:

我们以dwm用户为例,默认没权限看win10用户的文件夹:
那就依然可以进行机器账号的添加和RBCD攻击:
利用新增的机器账号申请win10票据获取administrator权限:

也能看上面不能看的win10用户文件夹:
本文介绍了基于资源的委派攻击的相关攻击手法,并且从代码层面解读相关的攻击原理,并且利用自动化工具搜索所有机器属性,查看自己可控的账号权限能攻击的机器数量,来达到可控机器范围的扩大。
更多实操,小伙伴们电脑端复制该链接开始吧
https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182014040817061200001&pk_campaign=weixin-wemedia#stu
“阅读原文”体验靶场实操

文章来源: http://mp.weixin.qq.com/s?__biz=MjM5MTYxNjQxOA==&mid=2652885186&idx=1&sn=b51a12420c0f68ac430ef7975763391e&chksm=bd59ac0f8a2e251979b1fbc3e91ea3c83134cab728acf421063bb946bbde2179e426253be0b7#rd
如有侵权请联系:admin#unsafe.sh