
Um fork do excelente TokenTactics com suporte para CAE e token endpoint v2
______ __ __ __ _ ___
/_ __/___ / /_____ ____ / /_____ ______/ /_(_)_________ _ __ |__ \
/ / / __ \/ //_/ _ \/ __ \ / __/ __ `/ ___/ __/ / ___/ ___/ | | / / __/ /
/ / / /_/ / /,< / __/ / / / / /_/ /_/ / /__/ /_/ / /__(__ ) | |/ / / __/
/_/ \____/_/|_|\___/_/ /_/ \__/\__,_/\___/\__/_/\___/____/ |___(_)____/
Esta é uma versão atualizada do TokenTactics originalmente escrito por Stephan Borosh @rvrsh3ll e Bobby Cooke @0xBoku.
Os tokens de acesso do Azure permitem autenticar-se em determinados endpoints como um utilizador que inicia sessão com um código de dispositivo. Se possuir um token de atualização compatível com FOCI (Family of Client IDs), pode usá-lo para obter tokens de acesso para todos os endpoints compatíveis com FOCI conhecidos. Uma vez que o token de atualização também contém a informação se o utilizador realizou autenticação multifator, pode usar isso. Depois de ter o token de acesso de um utilizador, pode ser possível aceder a determinadas aplicações como Outlook, SharePoint, OneDrive, MSTeams e outras.
Por exemplo, se tiver um token de atualização do Graph ou MSGraph, pode conectar-se ao Azure e listar utilizadores, grupos, etc. Dependendo das políticas de acesso condicional, pode depois mudar para um token do Azure Core Management e executar o AzureHound. Depois, obter um token de acesso do Outlook e ler/enviar e-mails ou do MS Teams e ler/enviar mensagens de equipa!
Para mais informações sobre tipos de tokens do Azure: Microsoft identity platform access tokens
Existem alguns exemplos de pedidos a endpoints na pasta resources. Há também um modelo de phishing de exemplo para phishing de código de dispositivo.
Pode também usar estes tokens com o AAD Internals. Recomendamos vivamente que verifique esta excelente ferramenta.
Import-Module .\TokenTactics.psd1
Get-Help Get-EntraIDToken
Invoke-RefreshToSubstrateToken -Domain "myclient.org"
O conjunto de testes requer o PowerShell 7 e o Pester 5.7.1. Utiliza respostas HTTP simuladas e não necessita de credenciais do Entra ID ou acesso à rede.
Install-Module Pester -RequiredVersion 5.7.1 -Scope CurrentUser
pwsh ./tests/Invoke-Tests.ps1
O mesmo conjunto é executado em Linux, macOS e Windows para cada pull request.
Get-EntraIDToken -Client MSGraph
Depois de o utilizador iniciar sessão, será apresentado o JWT e este será guardado na variável $response. Para aceder ao token de acesso, use $response.access_token na sua janela do PowerShell para exibir o token. Pode também exibir o token de atualização com $response.refresh_token. Dica: vai querer o token de atualização para continuar a atualizar para novos tokens!
Get-EntraIDToken -Client DODMSGraph
[!IMPORTANT] Esta funcionalidade foi introduzida na v0.2.20 e requer o PowerShell 7.0
Se criou uma chave de acesso num fornecedor terceiro como KeePassXC, Bitwarden, 1Password ou similar, pode exportar o material da chave privada.
[!CAUTION] Exportar o material da sua chave privada é extremamente perigoso. Certifique-se de que compreende o risco antes de prosseguir.
O formato de ficheiro de chave de acesso do KeePassXC é suportado nativamente e pode apontar o cmdlet diretamente para o ficheiro. O procedimento de início de sessão inicial apenas obterá o cookie ESTSAUTH necessário e terá de usar Get-EntraIDTokenFromESTSCookie para trocar este cookie por um token Bearer (token de acesso, token de atualização e token de ID).
# Obter o valor do cookie ESTSAUTH
Invoke-EntraIDPasskeyLogin -Verbose -KeyFilePath "C:\Users\Fabian\Microsoft.passkey"
# Trocar o cookie ESTSAUTH por tokens Bearer
Get-EntraIDTokenFromESTSCookie -CookieValue $Global:ESTSAUTH
Se tiver um formato de ficheiro não suportado, pode especificar manualmente os valores necessários e alcançar o mesmo objetivo.
Invoke-EntraIDPasskeyLogin -Verbose -UserPrincipalName "[email protected]" -UserHandle "XYZ" -CredentialId "9e9c8297-0cde-4726-8852-16c141e15bd3" -PrivateKey $PrivateKey
Get-EntraIDTokenFromESTSCookie -CookieValue $Global:ESTSAUTH
Se obteve um cookie sccauth de uma sessão autenticada em security.microsoft.com (por exemplo, através do Evilginx ou das DevTools do navegador), pode usá-lo para recuperar tokens de acesso do Entra ID para um vasto conjunto de recursos através do portal Microsoft Defender XDR.
# Obter um token do Microsoft Graph usando o cookie sccauth
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -ResourceName MicrosoftGraph
# Fornecer um token XSRF explicitamente para evitar o pedido de bootstrap
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -XSRF "your_xsrf_value" -ResourceName Azure
# Usar um URL de recurso personalizado
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -Resource "https://management.core.windows.net/"
Valores suportados para -ResourceName: Azure, LogAnalytics, MATP, MCAS, MicrosoftGraph, MicrosoftOffice, Purview, PurviewACC, ThreatIntelligencePortal.
Get-EntraIDTokenFromESTSCookie -ESTSAuthCookie "0.AbcApTk..."
Este módulo utiliza o fluxo de código de autorização para obter um token de acesso e um token de atualização usando o cookie ESTSAuth (ou ESTSAuthPersistent). Útil se tiver pescado uma sessão através do Evilginx ou obtido este cookie de outra forma.
Certifique-se de que usa o cookie correto! ESTSAuthPersistent só é útil quando uma política de CA concede efetivamente uma sessão persistente. Caso contrário, deve usar ESTSAuth. Normalmente, pode saber qual usar pelo comprimento: o cookie mais longo é o que deve usar :)
Nota: Isto pode não funcionar em todos os casos, pois pode exigir interação do utilizador. Se for o caso, use o fluxo de Código de Dispositivo acima ou tente roadtx interactiveauth --estscookie
Esta funcionalidade foi portada do pull request por rotarydrone no repositório original.
Um dos exemplos mais proeminentes deste fluxo oauth2 (pelo menos no início de 2025) é o Intune Company Portal, que permite, para alguns recursos, contornar os requisitos de conformidade do dispositivo.
Esta informação foi publicada pela primeira vez por @dirkjan e depois divulgada na Black Hat Europe para um público mais vasto por @TEMP43487580
A JumpsecLabs publicou um artigo de blogue e um POC sob a forma de TokenSmith pouco depois.
Agora as mesmas capacidades estão disponíveis no TokenTacticsV2.
Get-AzureAuthorizationCode criará um URL que pode usar para se autenticar.
Get-EntraIDTokenFromAuthorizationCode usa ou o URL completo ou pode ser usado com os parâmetros AuthorizationCode e RedirectUrl para trocar o código de autorização por um token de acesso e de atualização. Depois disso, pode tentar obter acesso a outros recursos como sempre.

Se não especificar um token de atualização, os cmdlets usarão $response.refresh_token como padrão.
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"
Isto removerá quaisquer variáveis de token.
Clear-Token -Token All
Com a avaliação contínua de acesso, a Microsoft implementa medidas de segurança adicionais, mas também prolonga o tempo máximo de vida de um token de acesso para 24 horas. Certos serviços compatíveis com CAE, como MSGraph, Exchange, Teams e SharePoint, podem bloquear tokens de acesso com base em determinados eventos acionados pelo Azure AD. Atualmente, esses eventos críticos são:
Invoke-RefreshToMSGraphToken -Domain "myclient.org" -UseCAE
if ((Parse-JWTtoken $MSGraphToken.access_token).ValidForHours -gt 23) { "O token MSGraph é compatível com CAE" }
Se tiver o AADInternals instalado, também pode usar os tokens de acesso criados.
Invoke-RefreshToMSTeamsToken -UseCAE -Domain "myclient.org"
Set-AADIntTeamsStatusMessage -Message "A minha mensagem de estado fixe" -AccessToken $MSTeamsToken.access_token -Verbose
Get-Command -Module TokenTactics
Apenas os comandos suportados para o utilizador são exportados; os helpers de análise, PKCE, atualização genérica e criptografia FIDO permanecem como detalhes de implementação privados.
Os métodos do TokenTactics são fortemente influenciados pela excelente investigação do Dr. Nestori Syynimaa em https://o365blog.com/.
Get-EntraIDTokenFromSCCAUTHCookie para recuperar tokens de acesso do Entra ID para vários recursos (Azure, MicrosoftGraph, MATP, MCAS, Purview, etc.) usando um cookie sccauth de security.microsoft.com. Aceita opcionalmente um token XSRF; se omitido, faz bootstrap automaticamente. Suporta um parâmetro opcional TenantId para injeção de cabeçalho e construção do recurso PurviewACC.Get-Azure para Get-EntraIDInvoke-EntraIDPasskeyLogin para automatizar fluxos de início de sessão com chave de acesso. Isto irá guardar o cookie ESTSAUTH e a sessão web como variáveis globais para reutilização noutros cmdlets como Get-EntraIDTokenFromESTSCookieInvoke-EntraIDPasskeyLogin, Get-EntraIDTokenFromCookie, Get-EntraIDTokenFromRefreshTokenCredentialCookie e Get-EntraIDTokenFromESTSCookie-Username para preencher o parâmetro login_hint no cmdlet Get-AzureAuthorizationCode-CopyToClipboard no cmdlet Get-AzureAuthorizationCodeForeach-Object -parallel)-CustomUserAgent. Graças a Pri3stResourceTenant para Get-EntraIDToken para suportar phishing de código de dispositivo B2BUseCodeVerifier para suportar Proof Key for Code Exchange (PKCE)UseV1Endpoint a algumas funções para suportar uma variedade mais ampla de testes de endpointsGet-AzureTokenFromRefreshTokenCredentialCookie ("x-ms-RefreshTokenCredential") e adicionar Get-AzureTokenFromCookie modularizadoGet-AzureTokenFromESTSCookieGet-AzureTokenFromAuthorizationCode à saída de Get-AzureAuthorizationCodeGet-AzureTokenFromESTSCookie para suportar o endpoint appverifyGet-AzureTokenFromESTSCookieGet-AzureAuthorizationCode e Get-AzureTokenFromAuthorizationCodeGet-AzureAuthorizationCodeGet-AzureAuthorizationCode e Get-AzureTokenFromAuthorizationCode Invoke-RefreshToDeviceRegistrationToken que é uma versão TokenTactics do cmdlet AADInternals Get-AccessTokenForAADJoinInvoke-RefreshToToken com UseV1Endpoint. Isto foi necessário para adicionar Invoke-RefreshToDeviceRegistrationTokenConvertFrom-JWTtokenGet-ForgedUserAgentv2.0 do endpoint OAuth2 do Azure AD-UseCAEClientId num parâmetroclient_id para MSTeamsIssuedAt, NotBefore, ExpirationDate e ValidForHours na saída de ConvertFrom-JWTtoken em formato legível por humanos