
Ein Fork des großartigen TokenTactics mit Unterstützung für CAE und Token-Endpunkt v2
/_ /_ / /_____ ____ / /_____ / /()___ _ __ |__
/ / / __ / /// _ / __ \ / __/ __ `/ / __/ / __/ __/ | | / / __/ /
/ / / // / ,< / __/ / / / / // // / // // / /( ) | |/ / / /
// _//||_// // _/_,_/_/_//___/__/ |()____/
Dies ist eine aktualisierte Version von TokenTactics, die ursprünglich von Stephan Borosh @rvrsh3ll & Bobby Cooke @0xBoku geschrieben wurde.
Azure-Zugriffstoken ermöglichen es Ihnen, sich als Benutzer, der sich mit einem Gerätecode anmeldet, bei bestimmten Endpunkten zu authentifizieren. Wenn Sie ein FOCI (Family of Client IDs) fähiges Aktualisierungstoken besitzen, können Sie es verwenden, um Zugriffstoken für alle bekannten FOCI-fähigen Endpunkte zu erhalten. Da das Aktualisierungstoken auch die Information enthält, ob der Benutzer eine Multi-Faktor-Authentifizierung durchgeführt hat, können Sie dies nutzen. Sobald Sie das Zugriffstoken eines Benutzers haben, ist es möglicherweise möglich, auf bestimmte Apps wie Outlook, SharePoint, OneDrive, MSTeams und mehr zuzugreifen.
Wenn Sie beispielsweise ein Graph- oder MSGraph-Aktualisierungstoken haben, können Sie eine Verbindung zu Azure herstellen und Benutzer, Gruppen usw. auslesen. Dann könnten Sie, abhängig von den Richtlinien für bedingten Zugriff, zu einem Azure Core Management-Token wechseln und AzureHound ausführen. Anschließend ein Outlook-Zugriffstoken abrufen und E-Mails lesen/senden oder MS Teams und Teams-Nachrichten lesen/senden!
Weitere Informationen zu Azure-Tokentypen finden Sie unter Microsoft identity platform access tokens
Es gibt einige Beispielanfragen an Endpunkte im Ordner 'resources'. Es gibt auch eine Beispiel-Phishing-Vorlage für Gerätecode-Phishing.
Sie können diese Token auch mit AAD Internals verwenden. Wir empfehlen dringend, sich dieses großartige Tool anzusehen.
Import-Module .\TokenTactics.psd1
Get-Help Get-EntraIDToken
Invoke-RefreshToSubstrateToken -Domain "myclient.org"
Die Testsuite erfordert PowerShell 7 und Pester 5.7.1. Sie verwendet simulierte HTTP-Antworten und benötigt keine Entra ID-Anmeldeinformationen oder Netzwerkzugriff.
Install-Module Pester -RequiredVersion 5.7.1 -Scope CurrentUser
pwsh ./tests/Invoke-Tests.ps1
Dieselbe Testsuite wird bei jedem Pull Request unter Linux, macOS und Windows ausgeführt.
Get-EntraIDToken -Client MSGraph
Sobald sich der Benutzer angemeldet hat, wird Ihnen das JWT angezeigt und es in der Variable $response gespeichert. Um auf das Zugriffstoken zuzugreifen, verwenden Sie $response.access_token in Ihrem PowerShell-Fenster, um das Token anzuzeigen. Sie können das Aktualisierungstoken auch mit $response.refresh_token anzeigen. Hinweis: Sie benötigen das Aktualisierungstoken, um es weiterhin gegen neue Token einzutauschen!
Get-EntraIDToken -Client DODMSGraph
[!IMPORTANT] Diese Funktion wurde in v0.2.20 eingeführt und erfordert PowerShell 7.0
Wenn Sie einen Passkey bei einem Drittanbieter wie KeePassXC, Bitwarden, 1Password oder ähnlichem erstellt haben, können Sie das private Schlüsselmaterial exportieren.
[!CAUTION] Das Exportieren Ihres privaten Schlüsselmaterials ist äußerst gefährlich. Stellen Sie sicher, dass Sie das Risiko verstanden haben, bevor Sie fortfahren.
Das KeePassXC-Passkey-Dateiformat wird nativ unterstützt, und Sie können das Cmdlet direkt auf die Datei verweisen. Die anfängliche Anmeldeprozedur ruft nur das erforderliche ESTSAUTH-Cookie ab, und Sie müssen Get-EntraIDTokenFromESTSCookie verwenden, um dieses Cookie gegen ein Bearer-Token (Zugriffstoken, Aktualisierungstoken und ID-Token) auszutauschen.
# Retrieve the ESTSAUTH cookie value
Invoke-EntraIDPasskeyLogin -Verbose -KeyFilePath "C:\Users\Fabian\Microsoft.passkey"
# Exchange the ESTSAUTH cookie for bearer tokens
Get-EntraIDTokenFromESTSCookie -CookieValue $Global:ESTSAUTH
Wenn Sie ein nicht unterstütztes Dateiformat haben, können Sie die erforderlichen Werte manuell angeben und dasselbe Ziel erreichen.
Invoke-EntraIDPasskeyLogin -Verbose -UserPrincipalName "[email protected]" -UserHandle "XYZ" -CredentialId "9e9c8297-0cde-4726-8852-16c141e15bd3" -PrivateKey $PrivateKey
Get-EntraIDTokenFromESTSCookie -CookieValue $Global:ESTSAUTH
Wenn Sie ein sccauth-Cookie aus einer authentifizierten Sitzung auf security.microsoft.com (z. B. über Evilginx oder Browser-DevTools) erlangt haben, können Sie es verwenden, um Entra ID-Zugriffstoken für eine breite Palette von Ressourcen über das Microsoft Defender XDR-Portal abzurufen.
# Retrieve a Microsoft Graph token using the sccauth cookie
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -ResourceName MicrosoftGraph
# Provide an XSRF token explicitly to skip the bootstrapping request
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -XSRF "your_xsrf_value" -ResourceName Azure
# Use a custom resource URL
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -Resource "https://management.core.windows.net/"
Unterstützte -ResourceName-Werte: Azure, LogAnalytics, MATP, MCAS, MicrosoftGraph, MicrosoftOffice, Purview, PurviewACC, ThreatIntelligencePortal.
Get-EntraIDTokenFromESTSCookie -ESTSAuthCookie "0.AbcApTk..."
Dieses Modul verwendet den Autorisierungscode-Flow, um mit dem ESTSAuth- (oder ESTSAuthPersistent-)Cookie ein Zugriffstoken und ein Aktualisierungstoken zu erhalten. Nützlich, wenn Sie eine Sitzung über Evilginx ge-phisht haben oder anderweitig dieses Cookie erhalten haben.
Achten Sie darauf, das richtige Cookie zu verwenden! ESTSAuthPersistent ist nur nützlich, wenn eine CA-Richtlinie tatsächlich eine persistente Sitzung gewährt. Andernfalls sollten Sie ESTSAuth verwenden. Sie können normalerweise anhand der Länge erkennen, welches Sie verwenden sollten – das längere Cookie ist das, das Sie verwenden möchten :)
Hinweis: Dies funktioniert möglicherweise nicht in allen Fällen, da es Benutzerinteraktion erfordern kann. Verwenden Sie in diesem Fall entweder den Gerätecode-Flow oben oder versuchen Sie roadtx interactiveauth --estscookie
Diese Funktion wurde aus dem Pull Request von rotarydrone im ursprünglichen Repository zurückportiert.
Eines der bekanntesten Beispiele für diesen OAuth2-Flow (zumindest Anfang 2025) ist das Intune-Unternehmensportal, das es für einige Ressourcen ermöglicht, Gerätekonformitätsanforderungen zu umgehen.
Diese Informationen wurden zuerst von @dirkjan veröffentlicht und dann auf der Black Hat Europe von @TEMP43487580 einem breiteren Publikum zugänglich gemacht.
JumpsecLabs veröffentlichte kurz darauf einen Blogartikel und einen POC in Form von TokenSmith.
Jetzt sind dieselben Funktionen in TokenTacticsV2 verfügbar.
Get-AzureAuthorizationCode erstellt eine URL, die Sie dann zur Authentifizierung verwenden können.
Get-EntraIDTokenFromAuthorizationCode verwendet entweder die vollständige URL oder kann mit den Parametern AuthorizationCode und RedirectUrl verwendet werden, um den Autorisierungscode gegen ein Zugriffs- und Aktualisierungstoken auszutauschen. Danach können Sie wie gewohnt versuchen, auf andere Ressourcen zuzugreifen.

Wenn Sie kein Aktualisierungstoken angeben, verwenden die Cmdlets standardmäßig $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"
Dies entfernt alle Tokenvariablen.
Clear-Token -Token All
Mit der kontinuierlichen Zugriffsbewertung implementiert Microsoft zusätzliche Sicherheitsmaßnahmen, verlängert aber auch die maximale Lebensdauer eines Zugriffstokens auf 24 Stunden. Bestimmte CAE-fähige Dienste wie MSGraph, Exchange, Teams und SharePoint können Zugriffstoken basierend auf bestimmten Ereignissen blockieren, die von Azure AD ausgelöst werden. Derzeit sind dies die kritischen Ereignisse:
Invoke-RefreshToMSGraphToken -Domain "myclient.org" -UseCAE
if ((Parse-JWTtoken $MSGraphToken.access_token).ValidForHours -gt 23) { "MSGraph token is CAE capable" }
Wenn Sie ebenfalls AADInternals installiert haben, können Sie die erstellten Zugriffstoken verwenden.
Invoke-RefreshToMSTeamsToken -UseCAE -Domain "myclient.org"
Set-AADIntTeamsStatusMessage -Message "My cool status message" -AccessToken $MSTeamsToken.access_token -Verbose
Get-Command -Module TokenTactics
Nur unterstützte benutzerseitige Befehle werden exportiert; Analyse-, PKCE-, generische Aktualisierungs- und FIDO-Kryptografie-Hilfskräfte bleiben private Implementierungsdetails.
Die Methoden von TokenTactics sind stark von der großartigen Forschung von Dr. Nestori Syynimaa unter https://o365blog.com/ beeinflusst.
Get-EntraIDTokenFromSCCAUTHCookie, um Entra ID-Zugriffstoken für verschiedene Ressourcen (Azure, MicrosoftGraph, MATP, MCAS, Purview usw.) mit einem sccauth-Cookie von security.microsoft.com abzurufen. Akzeptiert optional ein XSRF-Token; wird es weggelassen, erfolgt ein automatisches Bootstrapping. Unterstützt einen optionalen TenantId-Parameter für Header-Injektion und PurviewACC-Ressourcenkonstruktion.Get-Azure-Cmdlets in Get-EntraIDInvoke-EntraIDPasskeyLogin zur Automatisierung von Passkey-Anmeldevorgängen. Speichert das ESTSAUTH-Cookie und die Websession als globale Variablen zur Wiederverwendung in anderen Cmdlets wie Get-EntraIDTokenFromESTSCookieInvoke-EntraIDPasskeyLogin, Get-EntraIDTokenFromCookie, Get-EntraIDTokenFromRefreshTokenCredentialCookie und Get-EntraIDTokenFromESTSCookie-Username zum Vorausfüllen des login_hint-Parameters im Cmdlet Get-AzureAuthorizationCode-CopyToClipboard im Cmdlet Get-AzureAuthorizationCodeForeach-Object -parallel ausgeführt)-CustomUserAgent-Eigenschaft einen beliebigen UserAgent zu definieren. Danke an Pri3stResourceTenant für Get-EntraIDToken zur Unterstützung von B2B-Gerätecode-PhishingUseCodeVerifier zur Unterstützung von Proof Key for Code Exchange (PKCE)UseV1Endpoint zu einigen Funktionen, um eine breitere Palette von Endpunkttests zu unterstützenGet-AzureTokenFromRefreshTokenCredentialCookie („x-ms-RefreshTokenCredential“) und modularisiertem Get-AzureTokenFromCookieGet-AzureTokenFromESTSCookieGet-AzureTokenFromAuthorizationCode zur Ausgabe von Get-AzureAuthorizationCodeGet-AzureTokenFromESTSCookie zur Unterstützung des appverify-EndpunktsGet-AzureTokenFromESTSCookieGet-AzureAuthorizationCode und Get-AzureTokenFromAuthorizationCodeGet-AzureAuthorizationCodeGet-AzureAuthorizationCode und Get-AzureTokenFromAuthorizationCode hinzugefügt Invoke-RefreshToDeviceRegistrationToken hinzugefügt, eine TokenTactics-Version des AADInternals-Cmdlets Get-AccessTokenForAADJoinInvoke-RefreshToToken mit UseV1Endpoint. Dies war erforderlich, um Invoke-RefreshToDeviceRegistrationToken hinzuzufügen.ConvertFrom-JWTtokenGet-ForgedUserAgent hinzugefügtv2.0 des Azure AD OAuth2-Endpunkts-UseCAE-SchalterClientId als Parameter eingeführtclient_id für MSTeams geändertIssuedAt, NotBefore, ExpirationDate und ValidForHours in der Ausgabe von ConvertFrom-JWTtoken in menschenlesbarem Format hinzugefügt