
優れたTokenTacticsのフォークであり、CAEとtoken endpoint v2をサポートしています。
______ __ __ __ _ ___
/_ __/___ / /_____ ____ / /_____ ______/ /_(_)_________ _ __ |__ \
/ / / __ \/ //_/ _ \/ __ \ / __/ __ `/ ___/ __/ / ___/ ___/ | | / / __/ /
/ / / /_/ / ,< / __/ / / / / /_/ /_/ / /__/ /_/ / /__(__ ) | |/ / / __/
/_/ \____/_/|_|\___/_/ /_/ \__/\__,_/\___/\__/_/\___/____/ |___(_)____/
これは、元々Stephan Borosh @rvrsh3ll & Bobby Cooke @0xBoku によって書かれた TokenTactics の更新版です。
Azure アクセストークンを使用すると、デバイスコードでサインインしたユーザーとして特定のエンドポイントに認証できます。FOCI(Family of Client IDs) 対応のリフレッシュトークンを所有している場合、それを使用して既知のすべての FOCI 対応エンドポイント へのアクセストークンを取得できます。リフレッシュトークンにはユーザーが多要素認証を実行したかどうかの情報も含まれているため、これを利用できます。ユーザーのアクセストークンを取得したら、Outlook、SharePoint、OneDrive、MSTeams などの特定のアプリにアクセスできる場合があります。
例えば、Graph または MSGraph のリフレッシュトークンがある場合、Azure に接続してユーザーやグループなどをダンプできます。その後、条件付きアクセスポリシーに応じて、Azure Core Management トークンに切り替えて AzureHound を実行できます。さらに、Outlook アクセストークンを取得してメールの読み取り/送信、または MS Teams でチームメッセージの読み取り/送信も可能です!
Azure トークンの種類の詳細については、Microsoft ID プラットフォームのアクセストークン を参照してください。
リソースフォルダにはエンドポイントへのリクエスト例がいくつか含まれています。また、デバイスコードフィッシング用のフィッシングテンプレート例もあります。
これらのトークンは AAD Internals でも使用できます。この素晴らしいツールをぜひご確認ください。
Import-Module .\TokenTactics.psd1
Get-Help Get-EntraIDToken
Invoke-RefreshToSubstrateToken -Domain "myclient.org"
テストスイートには PowerShell 7 と Pester 5.7.1 が必要です。モック化された HTTP 応答を使用するため、Entra ID の資格情報やネットワークアクセスは必要ありません。
Install-Module Pester -RequiredVersion 5.7.1 -Scope CurrentUser
pwsh ./tests/Invoke-Tests.ps1
同じスイートは、すべてのプルリクエストに対して Linux、macOS、Windows で実行されます。
Get-EntraIDToken -Client MSGraph
ユーザーがログインすると、JWT が表示され、$response 変数に保存されます。アクセストークンにアクセスするには、PowerShell ウィンドウで $response.access_token を使用してトークンを表示します。リフレッシュトークンは $response.refresh_token で表示することもできます。ヒント:新しいトークンへのリフレッシュを続けるにはリフレッシュトークンが必要です!
Get-EntraIDToken -Client DODMSGraph
[!IMPORTANT] この機能は v0.2.20 で導入され、PowerShell 7.0 が必要です。
KeePassXC、Bitwarden、1Password などのサードパーティプロバイダでパスキーを作成した場合、秘密鍵の素材をエクスポートできます。
[!CAUTION] 秘密鍵の素材をエクスポートすることは非常に危険です。続行する前にリスクを理解してください。
KeePassXC のパスキーファイル形式はネイティブでサポートされており、コマンドレットでファイルを直接指定できます。初期サインインプロシージャでは必要な ESTSAUTH Cookie のみを取得し、Get-EntraIDTokenFromESTSCookie を使用してこの Cookie をベアラートークン(アクセストークン、リフレッシュトークン、IDトークン)と交換する必要があります。
# ESTSAUTH Cookie の値を取得
Invoke-EntraIDPasskeyLogin -Verbose -KeyFilePath "C:\Users\Fabian\Microsoft.passkey"
# ESTSAUTH Cookie をベアラートークンと交換
Get-EntraIDTokenFromESTSCookie -CookieValue $Global:ESTSAUTH
サポートされていないファイル形式の場合は、必要な値を手動で指定して同じ目標を達成できます。
Invoke-EntraIDPasskeyLogin -Verbose -UserPrincipalName "[email protected]" -UserHandle "XYZ" -CredentialId "9e9c8297-0cde-4726-8852-16c141e15bd3" -PrivateKey $PrivateKey
Get-EntraIDTokenFromESTSCookie -CookieValue $Global:ESTSAUTH
security.microsoft.com の認証済みセッションから sccauth Cookie を取得した場合(例:Evilginx やブラウザの DevTools 経由)、Microsoft Defender XDR ポータルを通じて幅広いリソースの Entra ID アクセストークンを取得できます。
# sccauth Cookie を使用して Microsoft Graph トークンを取得
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -ResourceName MicrosoftGraph
# XSRF トークンを明示的に指定してブートストラップリクエストをスキップ
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -XSRF "your_xsrf_value" -ResourceName Azure
# カスタムリソース URL を使用
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -Resource "https://management.core.windows.net/"
サポートされている -ResourceName の値:Azure、LogAnalytics、MATP、MCAS、MicrosoftGraph、MicrosoftOffice、Purview、PurviewACC、ThreatIntelligencePortal。
Get-EntraIDTokenFromESTSCookie -ESTSAuthCookie "0.AbcApTk..."
このモジュールは、認可コードフローを使用して ESTSAuth(または ESTSAuthPersistent)Cookie からアクセストークンとリフレッシュトークンを取得します。Evilginx 経由でセッションをフィッシングした場合や、その他の方法でこの Cookie を入手した場合に便利です。
正しい Cookie を使用してください! ESTSAuthPersistent は、CA ポリシーが実際に永続セッションを許可している場合にのみ有用です。それ以外の場合は ESTSAuth を使用してください。通常、どちらを使用すべきかは長さで判断でき、長い Cookie が目的のものです:)
注:ユーザー操作が必要な場合があるため、すべての場合に機能するとは限りません。その場合は、上記の Device Code フローを使用するか、roadtx interactiveauth --estscookie を試してください。
この機能は、元のリポジトリの rotarydrone による プルリクエスト からバックポートされました。
この OAuth2 フロー の最も顕著な例の1つ(少なくとも2025年初頭時点)は Intune カンパニーポータルであり、一部のリソースに対してデバイスコンプライアンス要件をバイパスできます。
この情報は最初に @dirkjan によって公開され、その後 Black Hat Europe で @TEMP43487580 によって広くリリースされました。
JumpsecLabs は ブログ記事 と TokenSmith の形式の POC を直後に公開しました。
現在、同じ機能が TokenTacticsV2 で利用可能です。
Get-AzureAuthorizationCode は認証に使用できる URL を作成します。
Get-EntraIDTokenFromAuthorizationCode は、完全なURLを使用するか、パラメータ AuthorizationCode と RedirectUrl を使用して認可コードをアクセストークンとリフレッシュトークンと交換します。その後、通常どおり他のリソースへのアクセスを試みることができます。

リフレッシュトークンを指定しない場合、コマンドレットはデフォルトで $response.refresh_token を使用します。
Invoke-RefreshToOutlookToken -domain "myclient.org"
$OutlookToken.access_token
Connect-AzureAD -AadAccessToken $response.access_token -AccountId [email protected]
Invoke-RefreshToMSGraphToken -Domain "myclient.org"
Connect-MgGraph -AccessToken $MSGraphToken.access_token -Scopes "User.Read.All","Group.ReadWrite.All"
これにより、すべてのトークン変数が削除されます。
Clear-Token -Token All
継続的アクセス評価 により、Microsoft は追加のセキュリティ対策を実装すると同時に、アクセストークンの最大有効期間を24時間に延長します。MSGraph、Exchange、Teams、SharePoint などの特定の CAE 対応サービスは、Azure AD によってトリガーされる特定のイベントに基づいてアクセストークンをブロックできます。現在、これらの重大なイベントは次のとおりです。
Invoke-RefreshToMSGraphToken -Domain "myclient.org" -UseCAE
if ((Parse-JWTtoken $MSGraphToken.access_token).ValidForHours -gt 23) { "MSGraph token is CAE capable" }
AADInternals もインストールされている場合、作成したアクセストークンを使用できます。
Invoke-RefreshToMSTeamsToken -UseCAE -Domain "myclient.org"
Set-AADIntTeamsStatusMessage -Message "My cool status message" -AccessToken $MSTeamsToken.access_token -Verbose
Get-Command -Module TokenTactics
サポートされているユーザー向けコマンドのみがエクスポートされます。解析、PKCE、汎用リフレッシュ、FIDO 暗号化ヘルパーは内部実装の詳細として非公開のままです。
TokenTactic の手法は、Dr Nestori Syynimaa の https://o365blog.com/ における優れた研究に大きく影響を受けています。
Get-EntraIDTokenFromSCCAUTHCookie を追加。security.microsoft.com の sccauth Cookie を使用して、さまざまなリソース(Azure、MicrosoftGraph、MATP、MCAS、Purview など)の Entra ID アクセストークンを取得します。オプションで XSRF トークンを受け入れます。省略した場合は自動的にブートストラップします。ヘッダーインジェクションおよび PurviewACC リソース構築のためのオプションの TenantId パラメータをサポートします。Get-Azure コマンドレットの名前を Get-EntraID に変更Invoke-EntraIDPasskeyLogin を追加してパスキーサインインフローを自動化。ESTSAUTH Cookie と Web セッションをグローバル変数として保存し、Get-EntraIDTokenFromESTSCookie などの他のコマンドレットで再利用可能Invoke-EntraIDPasskeyLogin、Get-EntraIDTokenFromCookie、Get-EntraIDTokenFromRefreshTokenCredentialCookie、Get-EntraIDTokenFromESTSCookie にプロキシサポートを追加Get-AzureAuthorizationCode にパラメータ -Username を追加して login_hint パラメータを事前入力可能にGet-AzureAuthorizationCode にパラメータ -CopyToClipboard を追加Foreach-Object -parallel 内)の出力を最小化-CustomUserAgent プロパティを使用して任意の UserAgent を自由に定義する機能を追加。Pri3st に感謝Get-EntraIDToken に ResourceTenant を追加UseCodeVerifier を追加UseV1Endpoint を追加Get-AzureTokenFromRefreshTokenCredentialCookie("x-ms-RefreshTokenCredential")を追加し、モジュール化された Get-AzureTokenFromCookie を追加Get-AzureTokenFromESTSCookie に Cookie タイプ(ESTSAuth、ESTSAUTHPERSISTENT)を選択するパラメータを追加Get-AzureAuthorizationCode の出力に Get-AzureTokenFromAuthorizationCode のサンプル出力を追加Get-AzureTokenFromESTSCookie を拡張して appverify エンドポイントをサポートGet-AzureTokenFromESTSCookie の Cookie 管理を改善Get-AzureAuthorizationCode および Get-AzureTokenFromAuthorizationCode のカスタムスコープのバグを修正Get-AzureAuthorizationCode のデフォルトリダイレクト URI を変更Get-AzureAuthorizationCode および Get-AzureTokenFromAuthorizationCode を追加 Invoke-RefreshToDeviceRegistrationToken を追加。これは AADInternals のコマンドレット Get-AccessTokenForAADJoin の TokenTactics 版です。Invoke-RefreshToToken に UseV1Endpoint を使用した v1 エンドポイントサポートを追加。これは Invoke-RefreshToDeviceRegistrationToken を追加するために必要でした。ConvertFrom-JWTtoken にパイプラインサポートを追加Get-ForgedUserAgent にデフォルト値を追加v2.0 に切り替え-UseCAE スイッチを使用した継続的アクセス評価のサポートClientId をパラメータ化client_id を変更ConvertFrom-JWTtoken の出力に IssuedAt、NotBefore、ExpirationDate、ValidForHours を人間が読める形式で追加