Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
AzureRedOps — Azure RedOpsは、Microsoft Entra IDのセキュリティ態勢を評価するためのオフェンシブセキュリティツールキットです。 | Kitploit
ツール/GitHubGitHub/mr-un1k0d3r/azureredops
フィッシングツール特権昇格偵察パスワード攻撃エクスプロイト情報収集ポストエクスプロイトペネトレーションテストクラウドセキュリティ認証レッドチーミング
GitHub
180181ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
mr-un1k0d3r/azureredops

AzureRedOps

Azure RedOpsは、Microsoft Entra IDのセキュリティ態勢を評価するためのオフェンシブセキュリティツールキットです。

リポジトリを見る

AzureRedOps

Azure / Entra ID レッドチーム運用のためのスイスアーミーナイフ的ツール。

作者: Mr.Un1k0d3r (TrueCyber Inc) バージョン: 0.1 言語: Python 3.12+


概要

AzureRedOps は、Microsoft Entra ID と Azure テナントのセキュリティ態勢を評価するためのオフェンシブセキュリティツールキットです。認証、トークン管理、ディレクトリ列挙、特権チェック、パスワードスプレー、Microsoft Graph に対する侵害後アクションといった、よく使われるレッドチームワークフローを、一貫した --activity 駆動の CLI の背後にまとめています。

すべての操作は -a/--activity で選択します。認証中に取得したトークンはローカルにキャッシュされ(.azure_creds)、-l/--load-access-token で名前を指定して再利用できるため、生の JWT を貼り付ける必要はほとんどありません。

このツールの詳細は CYPFER ブログ をご覧ください。

特徴

  • トークン管理 — ローカル資格情報ストア(.azure_creds)でアクセストークン/更新トークンを保存、一覧表示、デコード/表示、削除します。どのフローでも -s/--save と -n/--name を使うと、トークンを自動的に永続化できます。
  • 複数の認証フロー:
    • ROPC (auth) — ユーザー名/パスワードによる直接認証。
    • デバイスコードフィッシング (phish-start / phish-capture) — OAuth デバイス認可グラントを悪用し、ターゲットが microsoft.com/devicelogin でユーザーコードを入力したときに発行されるトークンを取得します。デフォルトで自動キャプチャされます。
    • サードパーティアプリの同意 (auth-app) — カスタムアプリケーション登録に対する完全な Authorization Code + PKCE フロー。組み込みのローカル HTTPS リスナーがリダイレクトを受信して提供します。
    • 対話型ブラウザキャプチャ (auth-interactive) — 実際のブラウザ(Playwright。デフォルトは Firefox、-br で切替)を操作し(MFA / 条件付きアクセス / SSO に対応)、記録されたセッション HAR からすべてのトークンを収穫します。
    • 更新トークン交換 (refresh) — 更新トークンを新しいアクセストークンと交換します。
    • On-Behalf-Of グラント (obo) — 発行済みのアクセストークンを、下流リソースにスコープされた新しいトークンと交換します(OAuth 2.0 jwt-bearer / OBO)。
    • トークンからブラウザへの SSO (browser-sso) — 対象の Web アプリ(Outlook on the web、Teams、SharePoint、Azure ポータルなど)に対して、実際のブラウザを直接開きます。 を使用すると、更新トークンから Cookie を自動的に生成し(デバイス登録 → PRT → )、新しいブラウザで手動ログインなしにシングルサインオンを完了します。
  • Microsoft Graph 経由のディレクトリ列挙 — ユーザー、アプリケーション、サービスプリンシパル、認可ポリシー、および一括収集する gather-all コレクター。
  • 既知の Microsoft ファーストパーティアプリ ID に対するパスワードスプレー(spray)と、クロスアプリ更新トークンスプレー(spray-refresh)。
  • 侵害後(ポストエクスプロイテーション) — アプリケーションの登録、グループの作成、ディレクトリロールの割り当て、外部(ゲスト)ユーザーの招待、OneDrive へのファイルアップロード。
  • 偵察ヘルパー — magic-app は AllPrincipals 同意を持つ公開リダイレクト可能なアプリを検出します。既知/注目すべき Microsoft アプリ ID の組み込みリストも含みます。
  • 利便性(QoL) — ベータエンドポイント切り替え、カスタムヘッダー、カスタムユーザーエージェント/スコープ/オーディエンス、属性フィルタリング、拡張出力、デバッグ/詳細 HTTP ログ、ファイルへの出力リダイレクト。

要件

  • Python 3.12 以降(コードは PEP 701 の f-string 構文に依存しています)。
  • Python パッケージ(requirements.txt を参照):
    • PyJWT
    • requests
    • playwright
    • cryptography (browser-sso -aprt、つまり自動 PRT フローの場合のみ必要)
  • ブラウザフロー(auth-interactive、browser-sso)用の Playwright ブラウザランタイム。 Firefox がデフォルトのエンジンです(-br/--browser)。次のコマンドでインストールしてください: python -m playwright install firefox。
  • TLS 証明書とキーを includes/web/cert.pem および includes/web/key.pem に配置します (auth-app PKCE フローの場合のみ必要 — を参照)。

インストール```bash

Clone the repository

git clone AzureRedOps cd AzureRedOps

Create and activate a virtual environment

python3 -m venv AzureRedOps source AzureRedOps/bin/activate # Linux / macOS

.\AzureRedOps\Scripts\Activate.ps1 # Windows PowerShell

Install dependencies

pip install -r requirements.txt

Install the browser used by the browser flows (one-time).

Firefox is the default engine; install the one(s) you plan to use with -br.

python -m playwright install firefox

python -m playwright install chromium webkit # optional, for -br chromium/webkit

python -m playwright install-deps # Linux/WSL: pull system libs

root@kitploit:~
ツールを実行してください:```bash
python3 AzureRedOps.py -a <activity> [options]

使い方

一般的な呼び出しパターンは次のとおりです:```bash python3 AzureRedOps.py -a [authentication] [activity options] [global options]

root@kitploit:~
### トークンの提供

Microsoft Graph を呼び出すアクティビティにはアクセス トークンが必要です。指定方法は 2 つあります:

| 方法 | フラグ | 例 |
|--------|------|---------|
| 生のトークンを渡す | `-ac, --access-token` | `-ac eyJ0eXAi...` |
| 名前でキャッシュされたトークンを読み込む | `-l, --load-access-token` | `-l mytoken` |

`-l` を使用すると、一致する `access_token` (および、該当する場合は `refresh_token`
と `tenant`) が `.azure_creds` ストアから読み取られます。

### トークンのファイルへの保存 (`-s` / `-n`)

トークンを取得するアクティビティ(`auth`、`auth-app`、`auth-interactive`、
`phish-start`/`phish-capture`、`refresh`)は、`-s/--save` を `-n/--name` と
一緒に追加することで、ローカル資格情報ストア (`.azure_creds`) に
**自動的に永続化**できます:```bash
# Authenticate and save the resulting tokens under the name "victim1"
python3 AzureRedOps.py -a auth -u [email protected] -p 'P@ssw0rd!' -tid <tenant-guid> -s -n victim1
  • -s/--save は自動保存を有効にします。-n/--name が必要です — -n がない場合、ツールはエラーで終了します。
  • -n/--name は、トークンが保存されるキーです。後で、生の JWT を貼り付ける代わりに -l victim1 で再利用したり、-a view -n victim1 で表示したり、-a delete -n victim1 で削除したりできます。
  • auth-interactive アクティビティは常に自動保存され、-n が指定されていない場合は対話的に名前の入力を求められます。

アクティビティの出力をファイルに保存する(-j)

ほとんどの列挙アクティビティ(list-users、list-applications、list-principals、gather-all、raw-url)は、-j/--json <filename> を受け付け、生の API レスポンスを印刷する代わりに(または印刷に加えて)JSON ファイルに書き込みます。```bash

Dump every user to users.json

python3 AzureRedOps.py -a list-users -l victim1 -j users.json

root@kitploit:~
For `gather-all`, 指定されたファイル名はサフィックスとして使用され、Graph エンドポイントごとに 1 つのファイルが書き込まれます
(例: `users-<name>`、`groups-<name>`、...)。

> ヒント: `-j` は構造化された JSON エクスポートを制御し、`-re/--redirect-to-file` は
> 整形されたコンソール出力を `output.txt` にミラーリングします。これら 2 つは独立しています。

### テナント識別子

- `-t, --tenant` は**ドメイン名**(例: `contoso.com`)を指定し、`id` アクティビティで使用されます。
- `-tid, --tenant-id` は**テナント GUID** または `common` を指定し、認証アクティビティで使用されます。

---

## コマンドラインオプション

| 短縮形 | 長い形式 | デフォルト | 説明 |
|-------|------|---------|-------------|
| `-a` | `--activity` | `id` | **(必須)** 実行するアクティビティ([アクティビティ](#activities) を参照)。 |
| `-ac` | `--access-token` | | Azure アクセストークン。 |
| `-n` | `--name` | | トークンの保存/読み込みに使用する名前、または `register-app`/`new-group`/`invite` の表示名。 |
| `-t` | `--tenant` | | Azure テナントの**ドメイン**名(`id` で使用)。 |
| `-c` | `--devicecode` | | デバイスコード(`phish-capture` で使用)。 |
| `-tid` | `--tenant-id` | | Azure テナント **ID**(GUID)または `common`。 |
| `-app` | `--appid` | `d3590ed6-52b3-4102-aeff-aad2292ab01c` | アプリケーション(クライアント)ID。 |
| `-e` | `--endpoint` | `microsoftonline.com` | 対象とするログインエンドポイントのドメイン。 |
| `-r` | `--refresh-token` | | 認証用リフレッシュトークン。 |
| `-as` | `--auto-start` | `True` | `phish-start` の後にデバイスコードのキャプチャを自動的に開始する。 |
| `-l` | `--load-access-token` | | `.azure_creds` から名前を指定してキャッシュされたトークンを読み込む。 |
| `-j` | `--json` | | アクティビティの出力を指定した JSON ファイルに保存する。 |
| `-fl` | `--filter` | | キーがこれらのいずれかに一致する属性のみを出力する(カンマ区切り)。 |
| `-u` | `--username` | | ユーザープリンシパル名(メールアドレス)。 |
| `-p` | `--password` | | ユーザーパスワード。 |
| `-s` | `--save` | `False` | 取得したトークンを `.azure_creds` に自動保存する(**`-n` が必要**)。 |
| `-cp` | `--check-privileges` | `False` | スプレー攻撃によるログインが成功した後、ユーザー/アプリを列挙できるかどうかを調べる。 |
| `-uid` | `--uid` | | Azure ユーザーオブジェクト ID(`add-group` で使用)。 |
| `-headers` | `--headers` | | 追加の HTTP ヘッダーを JSON で指定。例: `{"X-Foo": "bar"}`。 |
| `-gid` | `--gid` | `62e90394-69f5-4237-91f9-056ad24d70a7` | ディレクトリロール / グループ ID(デフォルト = **グローバル管理者**)。 |
| `-i` | `--id` | `False` | `interest` の場合: アプリケーション ID のみを出力する。 |
| `-ty` | `--type` | | `interest` の場合: 特定のカテゴリに絞り込む。 |
| `-fp` | `--filepath` | | アップロードするファイル(`push-file`)、またはスプレー用のカスタムアプリリスト。 |
| `-v` | `--version` | `v2.0` | 認証 API のバージョン: `v0` または `v2.0`。 |
| `-ua` | `--user-agent` | *(Chrome UA 文字列)* | HTTP `User-Agent` を上書きする。 |
| `-au` | `--audience` | `https://graph.microsoft.com` | トークンのオーディエンス / リソース。 |
| `-sc` | `--scope` | `openid offline_access` | OAuth2 スコープ。Graph には `https://graph.microsoft.com/.default`、スプレーには `openid` を使用。 |
| `-url` | `--url` | | `raw-url`/`invite` のターゲット URL。`auth-interactive` では URL のカンマ区切りリスト。 |
| `-beta` | `--beta` | `False` | `list-users`/`list-applications` で Microsoft Graph の **beta** エンドポイントを使用する。 |
| `-exp` | `--expand` | `False` | 出力内のネストされたリスト/辞書を人間が読みやすい形式に展開する。 |
| `-k` | `--keep` | `False` | `auth-interactive` / `browser-sso` の後に `session.har` ファイルを保持する。 |
| `-cs` | `--client-secret` | | `obo`(On-Behalf-Of)フローで使用する機密クライアントシークレット。 |
| `-prt` | `--prt-cookie` | | `browser-sso` でブラウザ SSO を初期化するための PRT クッキー値(`x-ms-RefreshTokenCredential`)。 |
| `-br` | `--browser` | `firefox` | ブラウザフロー(`auth-interactive`、`browser-sso`)で使用する Playwright ブラウザエンジン。`firefox`、`chromium`、`webkit` のいずれか。 |
| `-aprt` | `--auto-prt` | `False` | `browser-sso` の場合: リフレッシュトークンから PRT クッキーを自動生成し(デバイス登録 → PRT → `x-ms-RefreshTokenCredential`)、ブラウザが**認証済み**の状態で開くようにする。`cryptography` と FOCI/ブローカー リフレッシュ トークンが必要。 |
| `-d` | `--debug` | `False` | デバッグログを有効にする。 |
| `-dd` | `--verbose-debug` | `False` | 詳細な HTTP リクエスト/レスポンスログを有効にする。 |
| `-re` | `--redirect-to-file` | `False` | すべてのコンソール出力を `output.txt` にミラーリングする。 |

---

## アクティビティ

以下では、各アクティビティの**必須**引数と*オプション*引数を示しています。
"トークン" は、`-ac` または `-l` のいずれかが必須であることを意味します。

### トークン管理

| アクティビティ | 必須 | オプション | 説明 |
|----------|----------|----------|-------------|
| `save` | `-ac`, `-n` | `-tid`, `-r` | アクセス(およびオプションのリフレッシュ)トークンを `.azure_creds` に保存します。 |
| `list-token` | — | — | 保存されているすべてのトークンの名前を一覧表示します。 |
| `view` | `-n` | — | 保存されたトークンの JWT クレームをデコードして表示します。 |
| `delete` | `-n` | — | ストアから保存されたトークンを削除します。 |```bash
# Save a token under the name "mytoken"
python3 AzureRedOps.py -a save -n mytoken -ac eyJ0eXAi... -r 0.AReAB... -tid <tenant-guid>

# List, view, delete
python3 AzureRedOps.py -a list-token
python3 AzureRedOps.py -a view -n mytoken
python3 AzureRedOps.py -a delete -n mytoken

テナント探索と認証

Resolve a tenant ID from a domain

python3 AzureRedOps.py -a id -t contoso.com

Device-code phishing (auto-capture is on by default)

python3 AzureRedOps.py -a phish-start -tid common -app d3590ed6-52b3-4102-aeff-aad2292ab01c

Capture later with a previously issued device code

python3 AzureRedOps.py -a phish-capture -c -tid common

Username / password (ROPC)

python3 AzureRedOps.py -a auth -u [email protected] -p 'P@ssw0rd!' -tid

Interactive browser capture, saving tokens automatically

python3 AzureRedOps.py -a auth-interactive -url https://portal.azure.com -s -n harvested

Refresh a saved token

python3 AzureRedOps.py -a refresh -l mytoken -app d3590ed6-52b3-4102-aeff-aad2292ab01c

On-Behalf-Of: exchange an issued token for a Graph-scoped token

python3 AzureRedOps.py -a obo -l mytoken -tid -app -cs -au https://graph.microsoft.com

Convert an issued token into an Outlook-on-the-web session and open it in a browser

python3 AzureRedOps.py -a browser-sso -l mytoken -url outlook -prt

root@kitploit:~
#### 認証フローの仕組み

AzureRedOps は、トークンを取得するための複数の異なる方法を実装しています。エンゲージメントに合ったものを選択してください。いずれの方法も `-s/-n` に対応し、結果を自動保存します。

##### デバイスコードフィッシング (`phish-start` / `phish-capture`)

OAuth 2.0 の **デバイス認可グラント** は、入力制約のあるデバイス向けに設計されており、強力なフィッシングプリミティブとなります。つまり、ファーストパーティの Microsoft アプリケーションに代わってコードを要求し、その後、ソーシャルエンジニアリングによって標的を誘導し、自身のアカウントにサインインしたまま `https://microsoft.com/devicelogin` でそのコードを入力させます。そうすると、トークンは **あなたに** 発行されます。

- `phish-start` はデバイスコードを要求し、**ユーザーコード**、ログイン URL、および生の **デバイスコード** を表示します。`-as/--auto-start` がデフォルトで `True` のため、その後すぐにトークンのポーリングを開始します。つまり、通常は `phish-start` を実行してユーザーコードを標的に渡すだけで十分です。
- `phish-capture` は手動操作版です。以前 `-c/--devicecode` で取得したデバイスコードを渡すと、被害者がログインを完了するまでトークンエンドポイントをポーリングします(承認が保留中の間、ツールは静かに再試行します)。
- 特定のファーストパーティクライアントを偽装するには `-app/--appid` を使用し、テナントにスコープを限定するには `-tid/--tenant-id` を使用します(デフォルトは `common`)。ヒント: スコープを `'https://graph.microsoft.com/.default offline_access openid'` に設定すると、更新トークン付きの Graph 対応トークンを取得できます。```bash
# Start a device-code session (auto-captures the token once the victim logs in)
python3 AzureRedOps.py -a phish-start -tid common -s -n phished

# Or capture against a code you generated separately
python3 AzureRedOps.py -a phish-capture -c <device-code> -tid common -s -n phished
サードパーティアプリケーションの同意(auth-app)

auth-app は、サードパーティ(非デフォルト)のアプリケーション登録に対して、完全な PKCE を使用した Authorization Code フロー を実行します。このツールはローカルの HTTPS リスナー(includes/Webserver.py、https://localhost:2342 上)を起動し、これが OAuth リダイレクト URI として機能します。PKCE の code_verifier/code_challenge ペアを生成し、ブラウザで開くための認可 URL を出力します。同意後、Azure は認可コードをローカルリスナーにリダイレクトし、ツールはそれをトークンと交換します。

これは、アプリケーションを制御している(または登録している)場合に、実際のブラウザセッションを通じて同意を操作したいときに使用するフローです。不正同意(illicit-consent)スタイルのシナリオや、ROPC がブロックされている場合に役立ちます。

  • includes/web/cert.pem と includes/web/key.pem に TLS 証明書/秘密鍵のペアが必要です(生成方法については ノート を参照)。
  • このフローのデフォルトのクライアント ID は 8545b2fc-a69c-4851-9206-0f74a519fe5f です。```bash python3 AzureRedOps.py -a auth-app -tid -s -n consented
root@kitploit:~
##### 対話式ブラウザ認証 (`auth-interactive`)

`auth-interactive` は **Playwright 経由で実際のブラウザ** (デフォルトでは Firefox。エンジンは `-br/--browser` で選択) を起動し、オペレーター(または共有セッション上のターゲット)が対話式ログインを完了できるようにします。スクリプト化されたフローでは対応できない MFA、Conditional Access、フェデレーション/SSO リダイレクトも含まれます。ブラウザセッション全体は HAR ファイル (`session.har`) に記録され、ツールはそのキャプチャを解析して `/oauth2/v2.0/token` エンドポイントで見られた **すべての** アクセストークン/リフレッシュトークンのペアを抽出し、各 JWT をデコードして、保存するトークンを選択できます。

- `-url/--url` は、ログインページ読み込み後に移動するページを設定します。**カンマ区切りリスト** の URL を受け付けます(例: `https://portal.azure.com,https://outlook.office.com`)
  これにより、1回のセッションで複数のリソースのトークンを収集できます。デフォルトは
  `https://portal.azure.com` です。
- このアクティビティは **常に自動保存** されます。収集後、保持するトークンインデックスと保存名を選択するプロンプトが表示されます。
- オフライン解析用に `session.har` を保持するには `-k/--keep` を追加します(デフォルトでは削除されます)。```bash
# Log in interactively and harvest tokens for two resources
python3 AzureRedOps.py -a auth-interactive -url https://portal.azure.com,https://outlook.office.com -k
On-Behalf-Of トークン交換(obo)

obo は、OAuth 2.0 の On-Behalf-Of フロー(grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer)を実装します。 既に発行されたアクセス トークン をアサーションとして受け取り、ユーザーを再認証することなく、 別のダウンストリーム リソースにスコープされた新しいトークンと交換します。

  • アサーション トークンは、-ac/--access-token または -l/--load-access-token によるキャッシュ トークンで指定します。
  • -app/--appid + -cs/--client-secret は、交換を実行する 機密クライアント を識別します。Entra ID では、このクライアントがアサーション トークンの 対象者(aud) である必要があります。不一致の場合は AADSTS500131/AADSTS50013 で失敗します。
  • ターゲット リソースは、-au/--audience(デフォルトは https://graph.microsoft.com。<audience>/.default に変換されます)または -sc/--scope による完全なスコープで設定します。
  • 結果のトークン(および返された場合の更新トークン)は出力され、-s/-n が尊重されます。```bash

Exchange an issued token for a Microsoft Graph token on behalf of the user

python3 AzureRedOps.py -a obo -l mytoken -tid
-app -cs -au https://graph.microsoft.com -s -n obo-graph

root@kitploit:~
##### トークンからブラウザへのシングルサインオン(`browser-sso`)

`browser-sso` は、**ユーザーとしてすでに認証済みの実際のブラウザ**を開きます。何もクリックせずに、たとえば **Outlook on the web** に直接入ることができます。これは「ブラウザを開くだけで有効なセッションを取得する」フローです。ブラウザは、以下の3つの方法(優先順位順)のいずれかでセッションを取得します。

**1. `-aprt/--auto-prt` — PRT Cookie を自動生成(推奨)。**
リフレッシュトークンは、ツールによって完全に **Primary Refresh Token(PRT)** とそのブラウザ Cookie に変換され、Entra の ESTS が手動ログインなしで SSO を完了できるようにシードされます。そのチェーン(`includes/PRT.py` 内の ROADtoken / roadtx / AADInternals プロトコル)は次のとおりです。

1. リフレッシュトークンを **デバイス登録(DRS)** トークンと交換します。
2. Azure AD に**デバイスを登録**します → デバイス証明書 + トランスポートキー。
3. リフレッシュトークンを使用して **PRT + セッションキー**を要求します(デバイス証明書で署名)。
4. **`x-ms-RefreshTokenCredential` Cookie を導出**し(KDFv2: `SHA256(ctx‖decoded-payload-bytes)` に対する SP800-108 KDF → HS256 署名の JWT。KDFv1 → `AADSTS5000611`、バイト誤り → `AADSTS50058`)、
   新しいブラウザコンテキストにシードします。

Cookie は `SameSite=None` でシードされ、**トップレベルの ESTS `/authorize` ウォームアップ**(Office `landingv2` クライアント)を介して消費されるため、`ESTSAUTH` セッション Cookie はファーストパーティとして発行されます。その後、ターゲットアプリはログイン済みの状態で開きます。Cookie はナビゲーションの直前に新しい nonce で導出され、1回再試行されます。それでも SSO が完了しない場合、ツールは `prompt=none` をプローブし、正確な `AADSTS` の理由(例: 準拠/管理デバイスを要求する Conditional Access、または MFA — どちらも新しく登録したデバイスではバイパスできません)を出力します。

PRT、セッションキー、Cookie は(そのまま貼り付け可能な `-prt "<value>"` ヒント付きで)出力されるため、チェーンを再実行せずに後で再利用できます。

> **`-aprt` の要件と OPSEC:**
> - **`cryptography`** パッケージが必要です(`pip install cryptography`。これは
>   `requirements.txt` に含まれています)。
> - リフレッシュトークンは **FOCI / ブローカークライアント**に属している必要があります。
>   例: **Microsoft Authentication Broker へのデバイスコードフィッシング**
>   (`29d9ed98-a469-4536-ade2-f981bc1d605e`)で取得したもの。これは SharePoint/OneDrive
>   のデバイスコードルアーがまさに生成するものです。デフォルトの `-app`
>   (Microsoft Office FOCI クライアント)でも機能します。
> - **デバイス登録はテナント内にデバイスオブジェクトを作成します** — これは静かに実行されるものではなく、
>   痕跡(アーティファクト)を残します(また、ユーザーがデバイスの参加/登録を許可されている必要があります)。

**2. `-prt/--prt-cookie` — 既に保持している PRT Cookie をシードします。**
既に `x-ms-RefreshTokenCredential` の値(以前の `-aprt` の実行、または侵害されたホストから `ROADtoken`/`browsercore` や `Mimikatz` 経由で取得したもの)を保持している場合は、それを直接渡してミントチェーンをスキップします。

**3. どちらでもない場合 — トークンを変換して手動でログイン(フォールバック)。**
PRT Cookie がない場合、リフレッシュトークンはリソーススコープのアクセス/リフレッシュトークン(`-s/-n` で出力・保存されます)と交換され、手動でログインを完了できるようにブラウザがターゲットで開かれます。

**PRT / セッション Cookie の収穫。** ブラウザセッションが終了すると(自動クローズのタイムアウトまたはウィンドウを閉じたとき)、`browser-sso` はライブブラウザコンテキストを読み取り、**発行された再利用可能なすべての SSO Cookie** — PRT Cookie(`x-ms-RefreshTokenCredential`)と ESTS セッション Cookie(`ESTSAUTH`、`ESTSAUTHPERSISTENT`、...)— を、次回リプレイできるようそれぞれ貼り付け可能な `-prt` ヒント付きで出力します。Cookie はセッションがライブの間ポーリングされるため、ウィンドウを早めに閉じても値はキャプチャされます。同じ収穫処理は `auth-interactive` の最後にも実行されます。

- `-url/--url` はターゲットを選択します。使いやすいプリセット — `outlook`、`office`、`teams`、
  `sharepoint`、`onedrive`、`portal`、`graph` — または1つ以上の生の `https://` URL
  (カンマ区切り)を渡します。デフォルトは `outlook` です。
- `-r/--refresh-token` + `-tid`(またはキャッシュされた `-l`)でリフレッシュトークンを指定します。
  `-app/--appid` はデフォルトで Microsoft Office FOCI クライアントになります。
- `-br/--browser` は Playwright エンジンを選択します(デフォルトは Firefox)。
- `-k/--keep` はブラウザセッションの `session.har` 記録を保持します。```bash
# BEST: auto-mint a PRT from a device-code-phished (broker) token and drop straight
# into an authenticated Outlook on the web — no manual login.
python3 AzureRedOps.py -a browser-sso -l phished -url outlook -aprt

# Seed a PRT cookie you already have
python3 AzureRedOps.py -a browser-sso -l mytoken -url outlook -prt <x-ms-RefreshTokenCredential>

# Target Teams from a raw refresh token, auto-mint the PRT, keep the session recording
python3 AzureRedOps.py -a browser-sso -r 0.AReAB... -tid <tenant-guid> -url teams -aprt -k

Microsoft Graph 操作

Who am I?

python3 AzureRedOps.py -a self -l mytoken

Enumerate users (beta endpoint, save to JSON, only show some fields)

python3 AzureRedOps.py -a list-users -l mytoken -beta -j users.json -fl displayName,userPrincipalName

Register an application

python3 AzureRedOps.py -a register-app -n EvilApp -l mytoken

Assign Global Admin to a user

python3 AzureRedOps.py -a add-group -uid -l mytoken

Upload a file to OneDrive

python3 AzureRedOps.py -a push-file -fp ./payload.docx -n payload.docx -l mytoken

Query an arbitrary Graph URL

python3 AzureRedOps.py -a raw-url -url "https://graph.microsoft.com/beta/users" -l mytoken

Invite an external user

python3 AzureRedOps.py -a invite -n [email protected] -url https://example.com/invite -l mytoken

Hunt for exploitable public apps

python3 AzureRedOps.py -a magic-app -l mytoken

root@kitploit:~
### パスワードスプレー攻撃

| アクティビティ | 必須 | 任意 | 説明 |
|----------|----------|----------|-------------|
| `spray` | `-u`, `-p`, `-tid` | `-fp`, `-cp` | 既知のファーストパーティアプリID(v0 + v2.0 API)に対して資格情報をスプレーします。 |
| `spray-refresh` | `-v`、および (`-l`) **または** (`-r` + `-tid`) | `-fp`, `-cp` | 複数のアプリIDにわたって更新トークンをリプレイします。 |

デフォルトでは、両方のアクティビティはアプリソースとして `includes/auth_apps.json` を使用します。`-fp` で上書きできます。`-cp` を追加すると、各ログインの成功がユーザー/アプリを列挙できるかどうかをテストできます。```bash
# Spray a single credential across first-party apps
python3 AzureRedOps.py -a spray -u [email protected] -p 'P@ssw0rd!' -tid <tenant-guid> -cp

# Cross-app refresh spraying from a saved token
python3 AzureRedOps.py -a spray-refresh -l mytoken -v v2.0

インテリジェンスと発見

root@kitploit:~
---

## 出力と生成ファイル

| ファイル | 作成元 | 説明 |
|------|-----------|-------------|
| `.azure_creds` | トークン保存アクティビティ | アクセストークン/リフレッシュトークンを名前でキー付けしたローカルJSONキャッシュ。 |
| `output.txt` | `-re` フラグ | すべてのコンソール出力のタイムスタンプ付きミラー。 |
| `session.har` | `auth-interactive` / `browser-sso` | ブラウザセッションの記録(`-k` が設定されていない限り削除されます)。 |
| `<name>.json` | `-j` フラグ / `gather-all` | 保存されたAPIレスポンス。 |

### 同梱データファイル

| ファイル | 説明 |
|------|-------------|
| `includes/auth_apps.json` | スプレー攻撃と `interest` リストに使用されるターゲットアプリケーションID。 |
| `includes/apps.json` | `knownids` 用の既知のMicrosoftアプリIDとメタデータ。 |
| `includes/Webserver.py` | `auth-app` のPKCEリダイレクトを実装するローカルHTTPSリスナー。 |
| `includes/PRT.py` | `browser-sso -aprt` で使用されるPRT発行チェーン(デバイス登録 → PRT → `x-ms-RefreshTokenCredential` クッキー)。 |
| `includes/web/cert.pem`, `includes/web/key.pem` | ローカルリスナー用のTLS素材。 |

---

## 注意点とヒント

- **既定のアプリID**(`d3590ed6-52b3-4102-aeff-aad2292ab01c`)は、ほとんどのフローで動作するMicrosoft Office
  ファーストパーティクライアントです。一部のアクティビティが出力するヒントは、より広いアクセスを得るために
  **Microsoft Azure CLI** アプリ(`04b07795-8ddb-461a-bbee-02f9e1bf7b46`)へのトークン拡張を推奨しています。
- **スコープの指針:** パスワードスプレーには `-sc openid` を使用し、
  Graph操作には `-sc 'https://graph.microsoft.com/.default'` を使用します。
- **`--beta`** は `list-users` / `list-applications` をGraphベータエンドポイントに切り替え、
  追加情報(例: オンプレミス同期属性)を明らかにできます。
- **`auth-app` TLS:** ローカルPKCEリスナーには、`includes/web/cert.pem` と
  `includes/web/key.pem` の証明書/鍵ペアが必要です。それらがない場合は、
  自己署名ペアを生成してください。例:  ```bash
  openssl req -x509 -newkey rsa:2048 -nodes \
    -keyout includes/web/key.pem -out includes/web/cert.pem -days 365 -subj "/CN=localhost"
  • デバッグ: -d は高レベルのデバッグ情報を出力します。-dd は完全な HTTP リクエストと レスポンス(ヘッダーとボディ)をダンプします。トークン交換の失敗を診断する際に役立ちます。
  • ブラウザエンジン (-br/--browser)。 ブラウザフロー (auth-interactive, browser-sso) は ヘッド付き Playwright ブラウザを実行します。エンジンのデフォルトは firefox (WSLg で最も信頼性の高いヘッド付きエンジン) です。-br chromium または -br webkit で切り替えます。 選択したエンジンを一度インストールしてください: python -m playwright install <engine>。
  • WSL 上の Playwright — 空白のウィンドウ / マシン全体のフリーズ。 WSL/WSLg では、ヘッド付き ブラウザが 空のまま開き、ホスト全体がロックアップする間に描画されない ことがあります。根本原因: WSLg は 仮想化された GPU (/dev/dxg、d3d12 Mesa ドライバー駆動) を公開しており、 ブラウザの GPU/コンポジタプロセスがそれを使おうとします。一方、WSL VM のデフォルトの /dev/shm は 非常に小さい(多くの場合 64 MB)です。この2つが組み合わさると — GPU プロセスが駆動できないデバイス上でスピンし、 共有メモリコンポジタが /dev/shm を使い果たす — ため、何も描画されず VM が肥大化して Windows ホストがスラッシングするまでに至ります。副次的な要因として がありました。Microsoft のログインページはロングポーリングを行うため、 は発火せず、タイムアウトまでナビゲーションが空白ページでブロックされます。

クレジット

作成者: Mr.Un1k0d3r — TrueCyber Inc.

ツールをダウンロード
ユーザーとして認証済みの
-aprt/--auto-prt
Primary Refresh Token (PRT)
x-ms-RefreshTokenCredential
注記
アクティビティ必須オプション説明
id-t—指定されたメールドメインのテナント ID を解決します。
phish-start—-app、-tid、-as、-s、-nデバイスコードフローを開始し、ユーザーコードを表示して(デフォルトでは)自動的にキャプチャします。
phish-capture-c-app、-tid、-s、-n以前に発行されたデバイスコードを使用してトークンをポーリングします。
auth-u、-p、-tid、-app、-v-s、-nユーザー名/パスワードで認証します(ROPC)。
auth-app-tid-s、-nローカル HTTPS リスナーを介した Authorization-Code + PKCE フロー。
auth-interactive—-url、-k、-nブラウザ(Playwright)を起動してユーザーにログインさせ、セッション HAR からトークンを取得します。常に自動保存されます。
refresh-v、-app、および (-l) または (-r + -tid)-s、-nリフレッシュトークンを新しいアクセストークンと交換します。
obo-tid、-app、および (-ac) または (-l)-cs、-au、-sc、-s、-nOn-Behalf-Of: 発行されたアクセストークンを、別のリソースにスコープされたトークンと交換します。
browser-sso-app、および (-l) または (-r + -tid)-aprt、-url、-prt、-v、-k、-s、-nユーザーとして認証済みのブラウザを開きます。-aprt を追加すると、リフレッシュトークンから PRT クッキーを自動生成します。-prt で準備済みのものをシードするか、トークン変換 + 手動ログインにフォールバックします。
アクティビティ必須オプション説明
selfToken—現在のユーザーのプロフィール(/me)を表示します。
emailToken, -fl—サインイン中のユーザーのメールボックスからキーワードを検索します。
permissionToken—テナントの認可ポリシー(ベータ版)を表示します。
list-usersToken-j, -beta, -fl, -expすべてのユーザーを列挙します。
list-applicationsToken-j, -beta, -fl, -expすべてのアプリケーションを列挙します。
list-principalsToken-j, -fl, -expすべてのサービスプリンシパルを列挙します。
register-appToken, -n—新しいアプリケーションを登録します(1年間有効なクライアントシークレット付き)。
new-groupToken, -n—新しいセキュリティグループを作成します。
add-groupToken, -uid-gidプリンシパルにディレクトリロールを割り当てます(既定ロール = グローバル管理者)。
push-fileToken, -fp, -n—ローカルファイルをユーザーのOneDriveにアップロードします。
gather-allToken-jユーザー、グループ、アプリ、SP、ロール、ポリシー、権限付与を一括収集します。
raw-urlToken, -url-j, -fl, -exp任意のGraph/REST URLに対して生のGETを実行します(@odata.nextLink のページングに対応)。
inviteToken, -n-url外部(ゲスト)ユーザーを招待します。-n は招待先のメールアドレスです。
magic-appToken—AllPrincipals の同意、appRoleAssignmentRequired=false、パブリックリダイレクトURIを持つアプリを検索します。
アクティビティ必須オプション説明
knownids—-fl, -exp既知のMicrosoftアプリケーションIDを一覧表示します(includes/apps.json)。
list-interest——includes/auth_apps.json で定義されたアプリカテゴリを一覧表示します。
interest—-i, -ty注目のアプリIDを一覧表示します。-i はIDのみを出力し、-ty はカテゴリでフィルタリングします。
python3 AzureRedOps.py -a knownids
python3 AzureRedOps.py -a list-interest
python3 AzureRedOps.py -a interest -ty all_users
python3 AzureRedOps.py -a interest -i # IDs only
page.goto(..., wait_until="networkidle")
networkidle
  • ツール内での修正: AzureRedOps は WSL を自動検出し、使用するエンジンに関係なくハードウェアアクセラレーションを無効にします。 Chromium には --no-sandbox --disable-gpu --disable-dev-shm-usage が、Firefox には gfx.webrender.force-disabled / layers.acceleration.disabled が設定され、CPU(ソフトウェア)レンダリングにフォールバックしてページが描画され、完全に操作可能になります。 すべてのナビゲーションは networkidle ではなく domcontentloaded を待つようになりました。動作するブラウザが表示されるはずです。
  • それでも問題が発生する場合は、/dev/shm を増やし (sudo mount -o remount,size=1g /dev/shm)、 WSL 2 + WSLg を使用していることを確認し (wsl --update; echo $DISPLAY が空でないこと)、 ブラウザランタイムが venv にインストールされていることを確認してください (python -m playwright install firefox および python -m playwright install-deps)。