LDAP 攻防查询操作指南

admin 2024年12月15日23:34:39评论62 views字数 7037阅读23分27秒阅读模式

LDAP Queries for Offensive and Defensive Operations

LDAP 攻防查询操作指南

在 BloodHound 时代,许多红队顾问已经习惯于让这个强大的工具承担域枚举的大部分工作。BloodHound 集成了强大的可视化视角、安全描述符、入站和出站对象控制、漏洞利用信息、OPSEC 考虑因素等等。它既是防御工具,也是进攻工具。然而,某些场合下可能更倾向于红队顾问采取"低调缓慢"的方式,看看在不使用 BloodHound 的情况下能获取到关于目录及其对象的哪些有用信息。

这里列出的查询都不是什么新颖或突破性的信息。除了少数几个外,它们都是从网络上的多个资源中获取的,如下文所引用。事实上,最早的LDAP RFCs可以追溯到至少 1997 年的 LDAP 版本 3。有众多的博客、RFC 和技术规范,都在解释如何通过 LDAP 查询从 AD DS 收集信息。

本文的目的是提供用于渗透测试中的 AD DS 定向信息收集的基本查询。读者可以根据自己的喜好决定如何执行这些查询。一些执行方法示例包括 vbscript、powershell(即 adsi 和 adsisearcher 类型加速器)、dsquery、ADExplorer、AdsiEdit、javascript、win32API、.NET 语言、ldapsearch、adfind、adsearch 等等。同样,防御者可以使用这些查询来测试他们的检测能力(当可能不会产生大量流量峰值时),查看攻击者从环境中的各个角度会看到什么,并帮助修复来自受损主机的域权限提升和横向移动机会。

1. 查找关于当前用户的目录信息

例如:假设我的用户 samaccountname 是 ericazelic

dsquery * -filter "(&(objectCategory=person)(objectClass=user)(samaccountname=ericazelic))" -limit 0 -attr *
LDAP 攻防查询操作指南

2. 查找所有域控制器 (DC):

某些测试可能需要两个域控制器 (例如 zerologon 漏洞利用、通过第二个 DC 进行 LDAP 上的 NTLM 降级中继认证)。这些信息也可以从 DNS 客户端缓存或 klist 中获取。不过,拥有所有域控制器的列表可能会很有用。

(&(objectCategory=Computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))

3. 寻找横向移动的目标 (服务器)

传统的渗透测试通常依赖于 Nessus 和/或 nmap 扫描。通过 LDAP 枚举,你可以找到目录中所有非域控制器的服务器,以寻找信息收集和横向移动的机会:

(&(objectCategory=computer)(operatingSystem=*server*)(!(userAccountControl:1.2.840.113556.1.4.803:=8192)))
LDAP 攻防查询操作指南

4. 查找证书颁发机构和发布者:

(CN="Cert Publishers"*)

5. 查找所有组织单位 (OU):

不同的组织单位可能有不同的组策略、目标配置和管理员:

(objectCategory=organizationalUnit)

VBScript 示例:

ON Error Resume NextConst ADS_SCOPE_SUBTREE = 2Set objConnection = CreateObject("ADODB.Connection")Set objCommand = CreateObject("ADODB.Command")objConnection.Provider = "ADsDSOObject"objConnection.Open "Active Directory Provider"Set objCommand.ActiveConnection = objConnectionobjCommand.Properties("Page Size") = 1000objCommand.Properties("Searchscope") = 2objCmd.Properties("Timeout") = 30objCmd.Properties("Cache Results") = FalseobjCommand.CommandText = _"SELECT Name FROM 'LDAP://DC=ad,DC=yummy,DC=tacos' WHERE objectCategory='organizationalUnit'"Set objRecordSet = objCommand.ExecuteobjRecordSet.MoveFirstDoUntil objRecordSet.EOFWscript.Echo objRecordSet.Fields("Name").ValueobjRecordSet.MoveNextLoop

6. 查找所有容器:

查找非默认的 AD 容器。有时组织会有用于共享、身份验证和其他用途的容器。

(objectCategory=container)
LDAP 攻防查询操作指南

7. 查找具有服务主体名称 (SPN) 的账户:

查找具有 SPN 的账户可以帮助我们识别可以进行 Kerberoast 攻击的账户,同时也有助于我们了解环境中各种服务的运行位置。在某些情况下,如果我们有权限向目录中的对象写入数据,我们可以向对象添加服务主体名称,使其可以进行 Kerberoast 攻击。此查询还可以用于帮助我们确认是否已成功添加服务主体名称:

DSQuery 命令:

* -filter "(&(objectClass=User)(serviceprincipalname=*)(samaccountname=*))" -limit 0 -attr samaccountname serviceprincipalname
LDAP 攻防查询操作指南

PowerShell 命令:

([adsisearcher]'(servicePrincipalName=*)').FindAll()
LDAP 攻防查询操作指南

8. 受限委派:

具有受限委派权限的账户允许你模拟任何域用户账户,只要该账户未被标记为"账户敏感且不能被委派"或不是受保护用户组的成员:

(&(objectClass=User)(msDS-AllowedToDelegateTo=*))
LDAP 攻防查询操作指南

9. 无约束委派 (包括域控制器):

除非账户被标记为"账户敏感且不能被委派"或是受保护用户组的成员,否则你可以强制身份验证并转储存储在内存中的可提取的 TGT 票据:

(userAccountControl:1.2.840.113556.1.4.803:=524288)
LDAP 攻防查询操作指南

10. 基于资源的受限委派 (RBCD):

寻找 RBCD 可以帮助我们识别潜在攻击路径中的目标,同时也允许我们在设置对象属性时进行检查。虽然 RBCD 的详细讨论超出了本文的范围,但 Elad Shamir 的Wagging the Dog博客文章是一个很好的参考。

(msDS-AllowedToActOnBehalfOfOtherIdentity=*)

例如,如果 machineaccountquota 大于 0,我们可以使用 powermad 添加一个机器账户:

LDAP 攻防查询操作指南

使用 dsquery 检查机器账户是否已创建并列出 SID:

LDAP 攻防查询操作指南

向 msds-allowedtoactonbehalfofotheridentity 添加原始安全描述符,并使用 dsquery 检查是否添加成功:

LDAP 攻防查询操作指南

现在我们可以使用 NT 哈希作为 RC4 密钥来获取 Kerberos 票据,并模拟其他域用户来完成攻击。

11. 不被信任进行委派的账户:

如果设置了此属性,则这些账户不能用于上述讨论的委派操作。

(&(samaccountname=*)(userAccountControl:1.2.840.113556.1.4.803:=1048576))
LDAP 攻防查询操作指南
LDAP 攻防查询操作指南

12. 影子凭据:

在使用 Active Directory 证书服务 (AD CS) 且启用了 PKINIT 的 2016 年或更新版本的域控制器 (DC) 的域中,我们可能可以修改此属性来接管用户和计算机账户。一旦我们生成了证书并写入该属性,我们就可以使用这个 LDAP 查询来确认修改。关于影子凭据的更多信息可以在这里找到。

(msDS-KeyCredentialLink=*)

13. 禁用 Kerberos 预身份验证:

虽然很少见,但具有此属性的账户意味着它可以被 AS-REP roasting 攻击。

(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=4194304))
LDAP 攻防查询操作指南

14. 可 Kerberoast 的用户:

此查询将帮助我们找到可以进行 Kerberoast 攻击的用户账户。这意味着我们可能可以离线破解密码并伪造银票据,或仅使用这些凭据进行横向移动。

(&(objectClass=user)(servicePrincipalName=*)(!(cn=krbtgt))(!(samaccounttype=805306369)))
LDAP 攻防查询操作指南

15. 通过嵌套的组成员:

许多目录中的用户可能不是某个组的直接成员,但由于组嵌套的原因而拥有该组的权限。

(memberOf:1.2.840.113556.1.4.1941:=cn=Test,ou=East,dc=Domain,dc=com)
LDAP 攻防查询操作指南

16. 不需要密码的用户:

这有助于我们寻找横向移动的机会。根据微软的说法,即使组策略 (GP) 要求设置密码,此设置也会覆盖组策略。

(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=32))
LDAP 攻防查询操作指南
LDAP 攻防查询操作指南

17. 组:

这使您能够查看目录中的所有组,并识别可能具有管理权限的组作为潜在目标,以及有关技术栈的其他信息和环境的其他有用信息。

(objectCategory=group)
LDAP 攻防查询操作指南

18. Protected Users 组:

此组的成员只能使用 Kerberos 进行登录。如果一个账户在 Protected Users 组中,委派和 NTLM 传递哈希攻击将无法生效。此外,Kerberos 预认证中的 DES 或 RC4 加密类型将失败,Kerberos TGT 无法续期超过其初始 4 小时期限,并且密码将不会被缓存。

(&(objectCategory=CN=group,CN=Schema,CN=configuration,DC=yourDomainName,DC=yourDomainExtension)(samaccountname=Protect*)(member=*))
LDAP 攻防查询操作指南
LDAP 攻防查询操作指南

19. 带描述的用户对象:

用户目录对象的描述属性有时会包含密码或其他有用的用户信息。

(&(objectCategory=user)(description=*))

20. 带描述的计算机对象:

计算机对象的描述属性有时会揭示无法从 NetBIOS 名称中获得的系统及其用途的额外信息。

(&(objectCategory=computer)(description=*))

21. 密码永不过期:

具有旧密码的账户可能更容易受到攻击。例如,我们可以查看泄露信息,为低速慢速的暴力破解攻击创建更精确的列表(虽然这不是理想的方式),同时确保不会锁定用户账户。

(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))
LDAP 攻防查询操作指南

22. 用户下次登录时必须更改密码:

一些组织在更改密码时可能会使用脚本化密码。假设我们使用Snaffler 在共享文件夹中找到了该密码。我们可能可以使用smbpasswd 或rpcclient 等工具从 Linux 系统中更改它。在渗透测试中,如果不事先询问客户,这样做可能是一个糟糕的主意。除非你有能力在用户注意到之前将密码改回,并且在咨询时获得客户的许可,否则更改用户密码通常都是一个不好的做法。

关于 pwdlastset=0 属性,根据Microsoft 的说明,你可能会在以下 3 种情况下看到此属性设置为零:

  • 账户已创建但尚未分配密码。
  • 账户已创建,管理员已分配密码但选择了下次登录时更改密码的选项。
  • 管理员在管理用户账户时选择了要求用户在下次登录时更改密码的选项,例如在密码重置之后。
&(objectCategory=person)(objectClass=user)(pwdLastSet=0)(!(useraccountcontrol:1.2.840.113556.1.4.803:=2)))
LDAP 攻防查询操作指南

23. 具有提升域权限的用户对象:

通常,如果一个对象设置了此属性,它就是具有提升域权限的受保护组的成员,或者曾经是。已知启用域权限提升的安全组示例包括备份操作员、账户操作员、服务器操作员、打印操作员、域管理员、企业管理员、架构管理员、DNS 管理员,有时还包括只读域控制器。如果一个账户直接或间接地属于这些组中的任何一个,我们就可以获得域的控制权。了解哪些目录对象设置了此属性有助于我们创建目标列表。看到具有此属性值的可 Kerberoast 的服务账户并不罕见,尽管由于高价值服务账户使用更强的密码,近年来服务账户的密码在离线状态下变得更难破解。

(&(objectClass=user)(admincount=1)(!(samaccountname=krbtgt))(!(samaccountname=administrator)))
LDAP 攻防查询操作指南

24. 具有 SID 历史记录的用户账户:

具有 SID 历史记录的账户可能在其他域中具有访问权限。

(&(objectCategory=Person)(objectClass=User)(sidHistory=*))

25. 生成用户账户 samaccountname 列表:

(&(objectCategory=Person)(objectClass=User)(samaccountname=*))

26. 生成计算机对象名称列表:

(&(objectClass=Computer)(samaccountname=*))

参考资料

https://qa.social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx

https://ldap.com/ldap-related-rfcs/

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/d2435927-0999-4c62-8c6d-13ba31a52e1a

https://blogs.uw.edu/kool/2016/10/26/kerberos-delegation-in-active-directory/

https://rootdse.org/posts/active-directory-security-2/

https://learn.microsoft.com/en-us/windows/win32/adsi/active-directory-service-interfaces-adsi

https://www.ired.team/

https://book.hacktricks.xyz/welcome/readme

https://www.thehacker.recipes/

https://learn.microsoft.com/en-us/azure/active-directory-domain-services/create-ou

https://learn.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group

https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab

https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html

https://snovvcrash.rocks/2020/10/31/pretending-to-be-smbpasswd-with-impacket.html

https://www.youtube.com/watch?v=IfCysW0Od8w

https://github.com/SnaffCon/Snaffler

https://learn.microsoft.com/en-us/services-hub/health/remediation-steps-ad/review-accounts-whose-attribute-pwdlastset-has-a-zero-value

https://www.youtube.com/watch?v=VxbC03xmS60&t=1080s

原文始发于微信公众号(securitainment):LDAP 攻防查询操作指南

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月15日23:34:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   LDAP 攻防查询操作指南https://cn-sec.com/archives/3509784.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息