Az - Unauthenticated Enum & Initial Entry

htARTE(HackTricks AWS Red Team Expert)を使用して、ゼロからヒーローまでAWSハッキングを学びましょう!

HackTricksをサポートする他の方法:

Azureテナント

テナント列挙

テナントのドメインを知っているだけで、攻撃者はより多くの情報を収集するためにクエリできる一部の公開Azure APIがあります。 APIに直接クエリを実行するか、PowerShellライブラリAADInternalsを使用できます:

API情報AADInternals関数

login.microsoftonline.com/<domain>/.well-known/openid-configuration

テナントIDを含むログイン情報

Get-AADIntTenantID -Domain <domain>

autodiscover-s.outlook.com/autodiscover/autodiscover.svc

テナントのすべてのドメイン

Get-AADIntTenantDomains -Domain <domain>

login.microsoftonline.com/GetUserRealm.srf?login=<UserName>

テナントのログイン情報、テナント名およびドメインを含む認証タイプNameSpaceTypeManagedである場合、AzureADが使用されていることを意味します。

Get-AADIntLoginInformation -UserName <UserName>

login.microsoftonline.com/common/GetCredentialType

デスクトップSSO情報を含むログイン情報

Get-AADIntLoginInformation -UserName <UserName>

AADInternalsライブラリの1つのコマンドでAzureテナントのすべての情報をクエリできます:

Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table

Azureテナント情報の出力例:

Tenant brand:       Company Ltd
Tenant name:        company
Tenant id:          1937e3ab-38de-a735-a830-3075ea7e5b39
DesktopSSO enabled: True

Name                           DNS   MX    SPF  Type      STS
----                           ---   --    ---  ----      ---
company.com                   True  True  True  Federated sts.company.com
company.mail.onmicrosoft.com  True  True  True  Managed
company.onmicrosoft.com       True  True  True  Managed
int.company.com              False False False  Managed

テナントの名前、ID、および「ブランド」名の詳細を観察することが可能です。さらに、デスクトップシングルサインオン(SSO)の状態、別名Seamless SSOも表示されます。この機能が有効になっている場合、特定のユーザーが対象組織内に存在するかどうかを判別するのを容易にします。

さらに、出力には、対象テナントに関連付けられたすべての検証済みドメインの名前とそれぞれの識別タイプが表示されます。連携ドメインの場合、通常はADFSサーバーである識別プロバイダーの完全修飾ドメイン名(FQDN)も開示されます。"MX"列は、メールがExchange Onlineにルーティングされているかどうかを指定し、"SPF"列はExchange Onlineがメール送信者としてリストされていることを示します。現在の偵察機能は、SPFレコード内の「include」ステートメントを解析しないため、誤検知が発生する可能性があることに注意することが重要です。

ユーザー列挙

テナント内にユーザー名が存在するかどうかをチェックすることが可能です。これには、フォーマットが次のようなゲストユーザーも含まれます:

<email>#EXT#@<tenant name>.onmicrosoft.com

以下は、ユーザーのメールアドレスで、「@」がアンダースコア「_」に置き換えられています。

AADInternalsを使用すると、ユーザーが存在するかどうかを簡単に確認できます:

# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"

認証されていない列挙と初期エントリ

このスキャンは、Azureのアプリケーションに対する認証されていない列挙と初期エントリを行います。これにより、機密情報や脆弱性が漏洩する可能性があります。

手順

  1. 列挙: アプリケーションのURL、エンドポイント、ファイル、ディレクトリなどを列挙します。

  2. 初期エントリ: 列挙された情報を使用して、アプリケーションに初期エントリを試みます。

ツール

  • DirBuster: ファイルやディレクトリを列挙するためのツール。

  • Nmap: ポートスキャンやサービスバージョンの検出に使用されるツール。

注意事項

  • このスキャンは、許可を得た場合にのみ実行してください。

  • 取得した情報を機密情報として扱い、適切に保護してください。

UserName         Exists
--------         ------
user@company.com True

あなたは1行に1つの電子メールアドレスが記載されたテキストファイルも使用できます:

user@company.com
user2@company.com
admin@company.com
admin2@company.com
external.user_gmail.com#EXT#@company.onmicrosoft.com
external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal

以下は3つの異なる列挙方法から選択できます:

方法説明

通常

これは上記で言及されたGetCredentialType APIを指します。デフォルトの方法です。

ログイン

この方法はユーザーとしてログインしようとします。 注意: クエリはサインインログに記録されます。

自動ログオン

この方法は自動ログオンエンドポイントを介してユーザーとしてログインしようとします。 クエリはサインインログには記録されません!そのため、パスワードスプレーおよびブルートフォース攻撃にも適しています。

有効なユーザー名を発見した後、ユーザーに関する情報を取得できます。

Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com

スクリプトo365creeperは、メールが有効かどうかを特定することもできます。

# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt

Microsoft Teamsを介したユーザー列挙

もう1つの情報源はMicrosoft Teamsです。

Microsoft TeamsのAPIを使用すると、ユーザーを検索できます。特に、「user search」エンドポイントのexternalsearchv3searchUsersを使用して、Teamsに登録されたユーザーアカウントに関する一般情報をリクエストできます。

APIの応答に応じて、存在しないユーザーと有効なTeamsサブスクリプションを持つ既存のユーザーを区別することが可能です。

スクリプトTeamsEnumを使用して、指定されたユーザー名のセットをTeams APIに対して検証できます。

python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json

認証されていない列挙と初期エントリ

このスキャンは、Azureのサービスに対して認証されていない列挙を実行し、初期エントリを見つけるための情報を提供します。

ツール

  • nmap - ポートスキャンとサービスバージョンの検出に使用されます。

  • enum4linux - SMB共有からの情報収集に使用されます。

  • ldapsearch - LDAPサーバーからの情報収集に使用されます。

  • searchsploit - 既知の脆弱性を検索するために使用されます。

ステップ

  1. ポートスキャン - nmapを使用して、ターゲットAzureサービスのオープンポートを特定します。

  2. SMB共有の列挙 - enum4linuxを使用して、SMB共有から情報を収集します。

  3. LDAPサーバーの列挙 - ldapsearchを使用して、LDAPサーバーから情報を収集します。

  4. 既知の脆弱性の検索 - searchsploitを使用して、見つかったサービスやバージョンに対する既知の脆弱性を検索します。

これらのステップに従うことで、Azureサービスに対して認証されていない列挙を実行し、初期エントリを見つけることができます。

[-] user1@domain - Target user not found. Either the user does not exist, is not Teams-enrolled or is configured to not appear in search results (personal accounts only)
[+] user2@domain - User2 | Company (Away, Mobile)
[+] user3@domain - User3 | Company (Available, Desktop)

さらに、次のような既存ユーザーの利用状況情報を列挙することが可能です:

  • 利用可能

  • 離席中

  • 邪魔しないで

  • 予定あり

  • オフライン

オフィス外メッセージが設定されている場合、TeamsEnumを使用してメッセージを取得することも可能です。出力ファイルが指定されている場合、オフィス外メッセージは自動的にJSONファイル内に保存されます:

jq . teamsenum-output.json

認証されていない列挙と初期エントリ

このスキャンは、Azureのアプリケーションに対する認証されていない列挙と初期エントリを行います。これにより、潜在的な脆弱性や攻撃経路を特定することができます。

使用法

  1. az-cliを使用してAzureアカウントにログインします。

  2. enum.shスクリプトを実行して、認証されていない列挙を開始します。

  3. スクリプトが見つけた情報を使用して、初期エントリを試みます。

注意事項

  • このスキャンは、適切な許可を得ずに実行すると法的な問題を引き起こす可能性があります。必ず適切な許可を取得してから実行してください。

  • スクリプトを実行する前に、Azureアカウントの所有者と相談してください。

{
"email": "user2@domain",
"exists": true,
"info": [
{
"tenantId": "[REDACTED]",
"isShortProfile": false,
"accountEnabled": true,
"featureSettings": {
"coExistenceMode": "TeamsOnly"
},
"userPrincipalName": "user2@domain",
"givenName": "user2@domain",
"surname": "",
"email": "user2@domain",
"tenantName": "Company",
"displayName": "User2",
"type": "Federated",
"mri": "8:orgid:[REDACTED]",
"objectId": "[REDACTED]"
}
],
"presence": [
{
"mri": "8:orgid:[REDACTED]",
"presence": {
"sourceNetwork": "Federated",
"calendarData": {
"outOfOfficeNote": {
"message": "Dear sender. I am out of the office until March 23rd with limited access to my email. I will respond after my return.Kind regards, User2",
"publishTime": "2023-03-15T21:44:42.0649385Z",
"expiry": "2023-04-05T14:00:00Z"
},
"isOutOfOffice": true
},
"capabilities": [
"Audio",
"Video"
],
"availability": "Away",
"activity": "Away",
"deviceType": "Mobile"
},
"etagMatch": false,
"etag": "[REDACTED]",
"status": 20000
}
]
}

Azureサービス

Azureテナントが使用しているドメインを知っているので、公開されているAzureサービスを見つけてみましょう。

この目標を達成するために、MicroBustからのメソッドを使用できます。この機能は、いくつかのAzureサービスドメインでベースドメイン名(およびいくつかの順列)を検索します。

Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose

オープンストレージ

InvokeEnumerateAzureBlobs.ps1などのツールを使用してオープンストレージを発見できます。このツールは、**Microburst/Misc/permitations.txt**というファイルを使用してパーミュテーション(非常に単純なもの)を生成し、オープンストレージアカウントを見つけようとします

Import-Module .\MicroBurst\MicroBurst.psm1
Invoke-EnumerateAzureBlobs -Base corp
[...]
https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
[...]

# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
# Check: <Name>ssh_info.json</Name>
# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json

SAS URLs

共有アクセス署名 (SAS) URL は、ストレージアカウントの特定の部分 (フルコンテナ、ファイルなど) に特定の権限 (読み取り、書き込みなど) を提供する URL です。もし漏洩しているものを見つけた場合、機密情報にアクセスできるかもしれません。以下はその例です (これはコンテナにアクセスするためのもので、ファイルにアクセスする場合は URL のパスにそのファイルも含まれます):

https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D

Storage Explorer を使用してデータにアクセスします

資格情報の侵害

フィッシング

パスワードスプレー / ブルートフォース

pageAz - Password Spraying

参考文献

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE (HackTricks AWS Red Team Expert)!

HackTricks をサポートする他の方法:

最終更新