Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
AzureRedOps — Azure RedOps é um kit de ferramentas de segurança ofensiva para avaliar a postura de segurança do Microsoft Entra ID | Kitploit
Ferramentas/GitHubGitHub/mr-un1k0d3r/azureredops
Ferramentas de PhishingEscalada de PrivilégiosReconhecimentoAtaques de SenhaExploraçãoColeta de InformaçõesPós-ExploraçãoTestes de PenetraçãoSegurança na NuvemAutenticaçãoRed Teaming
180187há 2 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
GitHub
mr-un1k0d3r/azureredops

AzureRedOps

Azure RedOps é um kit de ferramentas de segurança ofensiva para avaliar a postura de segurança do Microsoft Entra ID

Ver Repositório

AzureRedOps

Uma ferramenta multifuncional para testes de invasão no Azure / Entra ID.

Autor: Mr.Un1k0d3r (TrueCyber Inc) Versão: 0.1 Linguagem: Python 3.12+


Visão Geral

O AzureRedOps é um kit de ferramentas de segurança ofensiva para avaliar a postura de segurança de tenants do Microsoft Entra ID e Azure. Ele encapsula os fluxos de trabalho de equipe vermelha mais comuns — autenticação, gerenciamento de tokens, enumeração de diretório, verificação de privilégios, pulverização de senhas e ações de pós-exploração contra o Microsoft Graph — em uma CLI consistente orientada por --activity.

Cada operação é selecionada com -a/--activity. Os tokens obtidos durante a autenticação podem ser armazenados em cache localmente (.azure_creds) e reutilizados pelo nome com -l/--load-access-token, para que você raramente precise colar JWTs brutos.

Saiba mais sobre a ferramenta no blog da CYPFER

Funcionalidades

  • Gerenciamento de tokens — salvar, listar, decodificar/visualizar e excluir tokens de acesso/atualização em um armazenamento local de credenciais (.azure_creds). Qualquer fluxo pode persistir seus tokens automaticamente com -s/--save + -n/--name.
  • Múltiplos fluxos de autenticação:
    • ROPC (auth) — autenticação direta por nome de usuário/senha.
    • Phishing de código de dispositivo (phish-start / phish-capture) — abusa da concessão de autorização de dispositivo OAuth para capturar tokens emitidos quando um alvo insere seu código de usuário em microsoft.com/devicelogin. Captura automaticamente por padrão.
    • Consentimento de aplicativo de terceiros (auth-app) — fluxo completo de Código de Autorização + PKCE contra um registro de aplicativo personalizado, servido por um listener HTTPS local embutido que recebe o redirecionamento.
    • Captura interativa pelo navegador (auth-interactive) — conduz um navegador real (Playwright; Firefox por padrão, -br para alternar) (lida com MFA / Acesso Condicional / SSO) e então coleta todos os tokens da sessão HAR gravada.

Requisitos

  • Python 3.12 ou superior (o código depende da sintaxe de f-string PEP 701).
  • Pacotes Python (veja requirements.txt):
    • PyJWT
    • requests
    • playwright
    • cryptography (necessário apenas para browser-sso -aprt, o fluxo automático de PRT)
  • Um runtime de navegador Playwright para os fluxos de navegador (auth-interactive, browser-sso). Firefox é o mecanismo padrão (-br/--browser); instale-o com python -m playwright install firefox.
  • Certificado + chave TLS em includes/web/cert.pem e includes/web/key.pem (necessário apenas para o fluxo PKCE auth-app — veja ).

Instalação```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:~
Execute a ferramenta:```bash
python3 AzureRedOps.py -a <activity> [options]

Uso

O padrão geral de invocação é:```bash python3 AzureRedOps.py -a [authentication] [activity options] [global options]

root@kitploit:~
### Fornecendo um token

Atividades que chamam o Microsoft Graph precisam de um token de acesso. Você pode fornecê-lo de duas maneiras:

| Método | Flag | Exemplo |
|--------|------|---------|
| Passar um token bruto | `-ac, --access-token` | `-ac eyJ0eXAi...` |
| Carregar um token em cache pelo nome | `-l, --load-access-token` | `-l mytoken` |

Quando `-l` é usado, o `access_token` correspondente (e, quando relevante, `refresh_token`
e `tenant`) é lido do armazenamento `.azure_creds`.

### Salvando tokens em um arquivo (`-s` / `-n`)

Qualquer atividade que obtenha tokens (`auth`, `auth-app`, `auth-interactive`,
`phish-start`/`phish-capture`, `refresh`) pode **persisti-los automaticamente** no
armazenamento local de credenciais (`.azure_creds`) ao adicionar `-s/--save` junto com
`-n/--name`:```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 ativa o salvamento automático; requer -n/--name — a ferramenta sai com um erro se -n estiver faltando.
  • -n/--name é a chave sob a qual o token é armazenado. Você pode reutilizá-lo posteriormente com -l victim1 em vez de colar o JWT bruto, visualizá-lo com -a view -n victim1, ou excluí-lo com -a delete -n victim1.
  • A atividade auth-interactive sempre salva automaticamente e solicitará um nome interativamente se -n não for fornecido.

Salvando a saída da atividade em um arquivo (-j)

A maioria das atividades de enumeração (list-users, list-applications, list-principals, gather-all, raw-url) aceita -j/--json <filename> para escrever a resposta bruta da API em um arquivo JSON em vez de (ou além de) imprimi-la:```bash

Dump every user to users.json

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

root@kitploit:~
Para `gather-all`, o nome do arquivo fornecido é usado como sufixo e um arquivo é escrito
por endpoint do Graph (ex.: `users-<name>`, `groups-<name>`, ...).

> Dica: `-j` controla a exportação JSON estruturada, enquanto `-re/--redirect-to-file` espelha
> a saída do console formatada para `output.txt`. Os dois são independentes.

### Identificadores do inquilino

- `-t, --tenant` espera um **nome de domínio** (ex.: `contoso.com`) e é usado pela atividade `id`.
- `-tid, --tenant-id` espera um **GUID do inquilino** ou `common`, usado pelas atividades de autenticação.

---

## Opções de Linha de Comando

| Curto | Longo | Padrão | Descrição |
|-------|-------|--------|-----------|
| `-a` | `--activity` | `id` | **(obrigatório)** Atividade a ser realizada (veja [Atividades](#activities)). |
| `-ac` | `--access-token` | | Token de acesso do Azure. |
| `-n` | `--name` | | Nome usado para salvar/carregar um token, ou nome de exibição para `register-app`/`new-group`/`invite`. |
| `-t` | `--tenant` | | Nome de **domínio** do inquilino do Azure (usado por `id`). |
| `-c` | `--devicecode` | | Código do dispositivo (usado por `phish-capture`). |
| `-tid` | `--tenant-id` | | **ID** do inquilino do Azure (GUID) ou `common`. |
| `-app` | `--appid` | `d3590ed6-52b3-4102-aeff-aad2292ab01c` | ID do aplicativo (cliente). |
| `-e` | `--endpoint` | `microsoftonline.com` | Domínio do endpoint de login para alvo. |
| `-r` | `--refresh-token` | | Token de atualização de autenticação. |
| `-as` | `--auto-start` | `True` | Iniciar automaticamente a captura do código do dispositivo após `phish-start`. |
| `-l` | `--load-access-token` | | Carregar um token em cache pelo nome de `.azure_creds`. |
| `-j` | `--json` | | Salvar a saída da atividade no arquivo JSON fornecido. |
| `-fl` | `--filter` | | Imprimir apenas atributos cuja chave corresponda a um destes (separados por vírgula). |
| `-u` | `--username` | | Nome principal do usuário (email). |
| `-p` | `--password` | | Senha do usuário. |
| `-s` | `--save` | `False` | Salvar automaticamente os tokens obtidos em `.azure_creds` (**requer `-n`**). |
| `-cp` | `--check-privileges` | `False` | Após um login de spray bem-sucedido, verificar se usuários/aplicativos podem ser enumerados. |
| `-uid` | `--uid` | | ID do objeto do usuário do Azure (usado por `add-group`). |
| `-headers` | `--headers` | | Cabeçalhos HTTP extras como JSON, ex.: `{"X-Foo": "bar"}`. |
| `-gid` | `--gid` | `62e90394-69f5-4237-91f9-056ad24d70a7` | ID de função de diretório / grupo (padrão = **Administrador Global**). |
| `-i` | `--id` | `False` | Para `interest`: imprimir apenas os IDs do aplicativo. |
| `-ty` | `--type` | | Para `interest`: filtrar para uma categoria específica. |
| `-fp` | `--filepath` | | Arquivo para fazer upload (`push-file`) ou lista de aplicativos personalizada para spraying. |
| `-v` | `--version` | `v2.0` | Versão da API de autenticação: `v0` ou `v2.0`. |
| `-ua` | `--user-agent` | *(string UA Chrome)* | Substituir o `User-Agent` HTTP. |
| `-au` | `--audience` | `https://graph.microsoft.com` | Público-alvo/recurso do token. |
| `-sc` | `--scope` | `openid offline_access` | Escopo OAuth2. Use `https://graph.microsoft.com/.default` para Graph, `openid` para spraying. |
| `-url` | `--url` | | URL alvo para `raw-url`/`invite`; lista separada por vírgula de URLs para `auth-interactive`. |
| `-beta` | `--beta` | `False` | Usar o endpoint **beta** do Microsoft Graph para `list-users`/`list-applications`. |
| `-exp` | `--expand` | `False` | Expandir listas/dicionários aninhados na saída para um formato legível por humanos. |
| `-k` | `--keep` | `False` | Manter o arquivo `session.har` após `auth-interactive` / `browser-sso`. |
| `-cs` | `--client-secret` | | Segredo de cliente confidencial usado pela concessão `obo` On-Behalf-Of. |
| `-prt` | `--prt-cookie` | | Valor do cookie PRT (`x-ms-RefreshTokenCredential`) para semear SSO do navegador para `browser-sso`. |
| `-br` | `--browser` | `firefox` | Mecanismo do navegador Playwright para os fluxos do navegador (`auth-interactive`, `browser-sso`). Um de `firefox`, `chromium`, `webkit`. |
| `-aprt` | `--auto-prt` | `False` | Para `browser-sso`: emitir automaticamente um cookie PRT a partir do token de atualização (registro de dispositivo → PRT → `x-ms-RefreshTokenCredential`) para que o navegador abra **já autenticado**. Requer `cryptography` e um token de atualização FOCI/broker. |
| `-d` | `--debug` | `False` | Habilitar log de depuração. |
| `-dd` | `--verbose-debug` | `False` | Habilitar log detalhado de requisição/resposta HTTP. |
| `-re` | `--redirect-to-file` | `False` | Espelhar toda a saída do console para `output.txt`. |

---

## Atividades

Abaixo, cada atividade lista seus argumentos **obrigatórios** e *opcionais*.
'Token' significa que `-ac` ou `-l` é obrigatório.

### Gerenciamento de Token

| Atividade | Obrigatório | Opcional | Descrição |
|-----------|-------------|----------|-----------|
| `save` | `-ac`, `-n` | `-tid`, `-r` | Salvar um token de acesso (e token de atualização opcional) em `.azure_creds`. |
| `list-token` | — | — | Listar os nomes de todos os tokens salvos. |
| `view` | `-n` | — | Decodificar e exibir as declarações JWT de um token salvo. |
| `delete` | `-n` | — | Remover um token salvo do armazenamento. |```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

Descoberta e Autenticação de Locatário

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:~
#### Como os fluxos de autenticação funcionam

O AzureRedOps implementa várias formas distintas de obter tokens. Escolha aquela que
se adequa ao seu engajamento; todas respeitam `-s/-n` para salvar automaticamente o resultado.

##### Phishing com código de dispositivo (`phish-start` / `phish-capture`)

A **concessão de autorização de dispositivo** do OAuth 2.0 é projetada para dispositivos
com restrição de entrada, o que a torna uma primitiva de phishing poderosa: você solicita um código
em nome de um aplicativo Microsoft de primeira parte e, em seguida, faz engenharia social para que um
alvo insira esse código em `https://microsoft.com/devicelogin` enquanto está logado em sua conta.
Assim que o fizer, os tokens são emitidos **para você**.

- `phish-start` solicita um código de dispositivo e imprime o **código de usuário**, a URL de login
  e o **código de dispositivo** bruto. Como `-as/--auto-start` padrão é `True`, ele então
  começa imediatamente a consultar o token — então simplesmente executar `phish-start` e
  entregar o código de usuário ao alvo geralmente é tudo que você precisa.
- `phish-capture` é a contraparte manual: forneça a ele um código de dispositivo obtido anteriormente
  com `-c/--devicecode` e ele consulta o endpoint do token até que a vítima complete o
  login (a ferramenta tenta novamente silenciosamente enquanto a autorização estiver pendente).
- Use `-app/--appid` para personificar um cliente específico de primeira parte e `-tid/--tenant-id`
  para definir o escopo para um inquilino (`common` por padrão). Dica: defina o escopo para
  `'https://graph.microsoft.com/.default offline_access openid'` para obter um token pronto para Graph
  com um token de atualização.```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
Consentimento de aplicação de terceiros (auth-app)

auth-app executa um fluxo completo de Código de Autorização com PKCE contra um registro de aplicação de terceiros (não padrão). A ferramenta inicia um listener HTTPS local (includes/Webserver.py, em https://localhost:2342) que atua como URI de redirecionamento OAuth, gera o par code_verifier/code_challenge do PKCE e imprime um URL de autorização para você abrir no navegador. Após o consentimento, o Azure redireciona o código de autorização de volta para o listener local, que a ferramenta então troca por tokens.

Este é o fluxo a ser usado quando você controla (ou registrou) uma aplicação e deseja conduzir o consentimento através de uma sessão real de navegador — útil para cenários de consentimento ilícito ou quando ROPC está bloqueado.

  • Requer um par de certificado/chave TLS em includes/web/cert.pem e includes/web/key.pem (veja Notas para saber como gerá-los).
  • O ID de cliente padrão para este fluxo é 8545b2fc-a69c-4851-9206-0f74a519fe5f.```bash python3 AzureRedOps.py -a auth-app -tid -s -n consented
root@kitploit:~
##### Autenticação interativa no navegador (`auth-interactive`)

`auth-interactive` inicia um **navegador real via Playwright** (Firefox por padrão; escolha o motor com `-br/--browser`) e permite que o operador (ou um alvo numa sessão compartilhada) complete um login interativo — incluindo MFA, Acesso Condicional e redirecionamentos federados/SSO que fluxos scriptados não conseguem satisfazer. Toda a sessão do navegador é gravada num arquivo HAR (`session.har`); a ferramenta então analisa essa captura, extrai **todos** os pares de token de acesso/atualização vistos no endpoint `/oauth2/v2.0/token`, decodifica cada JWT, e permite que você escolha qual(is) salvar.

- `-url/--url` define a(s) página(s) para navegar após o carregamento da página de login. Aceita uma **lista separada por vírgulas** de URLs (ex.: `https://portal.azure.com,https://outlook.office.com`) para que você possa coletar tokens para múltiplos recursos numa única sessão. O padrão é `https://portal.azure.com`.

- Esta atividade **sempre salva automaticamente**: após a colheita, pergunta qual(is) índice(s) de token manter e um nome para armazená-los.

- Adicione `-k/--keep` para preservar `session.har` para análise offline (é excluído por padrão).```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
Troca de token On-Behalf-Of (obo)

obo implementa o fluxo On-Behalf-Of do OAuth 2.0 (grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer). Ele usa um token de acesso já emitido como a afirmação e o troca por um token novo com escopo para um recurso downstream diferente — sem reautenticar o usuário.

  • O token de afirmação é fornecido com -ac/--access-token ou um token em cache via -l/--load-access-token.
  • -app/--appid + -cs/--client-secret identificam o cliente confidencial que realiza a troca. O Entra ID exige que este cliente seja o público-alvo (aud) do token de afirmação; uma incompatibilidade falha com AADSTS500131/AADSTS50013.
  • O recurso alvo é definido com -au/--audience (padrão https://graph.microsoft.com, convertido em <audience>/.default) ou um escopo completo com -sc/--scope.
  • O token resultante (e o token de atualização, quando retornado) é impresso e respeita -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:~
##### Logon único de token para navegador (`browser-sso`)

`browser-sso` abre um **navegador real que já está autenticado como o usuário** — você
não clica em nada e cai diretamente dentro, por exemplo, do **Outlook na web**. Este é o
fluxo "apenas abra o navegador e obtenha uma sessão válida". O navegador obtém sua sessão de uma
de três maneiras, em ordem de preferência:

**1. `-aprt/--auto-prt` — criar automaticamente um cookie PRT (recomendado).**
O token de atualização é transformado em um **Token de Atualização Primário (PRT)** e seu cookie de navegador
inteiramente pela ferramenta, então semeado para que o ESTS da Entra complete o SSO sem login manual. A
cadeia (em `includes/PRT.py`, o protocolo ROADtoken / roadtx / AADInternals) é:

1. Resgatar o token de atualização por um token de **registro de dispositivo (DRS)**.
2. **Registrar um dispositivo** no Azure AD → certificado do dispositivo + chave de transporte.
3. Solicitar um **PRT + chave de sessão** com o token de atualização, assinado pelo certificado do dispositivo.
4. **Derivar o cookie `x-ms-RefreshTokenCredential`** (KDFv2: SP800-108 KDF sobre `SHA256(ctx‖decoded-payload-bytes)` → JWT assinado com HS256; KDFv1 → `AADSTS5000611`, bytes-errados → `AADSTS50058`)
   e semeá-lo em um contexto de navegador limpo.

O cookie é semeado com `SameSite=None` e consumido via um **aquecimento `/authorize` do ESTS de nível superior**
(o cliente `landingv2` do Office) para que o cookie de sessão `ESTSAUTH` seja cunhado
como first-party — após o qual o aplicativo de destino abre já conectado. O cookie é derivado com
um novo nonce pouco antes de navegar e tentado novamente uma vez; se o SSO ainda não puder completar, a ferramenta
verifica `prompt=none` e imprime o motivo exato do `AADSTS` (ex.: Acesso Condicional exigindo um
dispositivo compatível/gerenciado, ou MFA — nenhum dos quais é contornável com um dispositivo recém-registrado).

O PRT, a chave de sessão e o cookie são impressos (com uma dica `-prt "<value>"` pronta para copiar)
para que você possa reutilizá-los mais tarde sem reexecutar a cadeia.

> **Requisitos e opsec para `-aprt`:**
> - Precisa do pacote **`cryptography`** (`pip install cryptography`; ele está em
>   `requirements.txt`).
> - O token de atualização deve pertencer a um **cliente FOCI / broker** — ex.: um capturado por
>   **phishing de código de dispositivo no Microsoft Authentication Broker**
>   (`29d9ed98-a469-4536-ade2-f981bc1d605e`), que é exatamente o que a isca de código de dispositivo do SharePoint/OneDrive
>   produz. O `-app` padrão (cliente Microsoft Office FOCI) também funciona.
> - **O registro de dispositivo escreve um objeto de dispositivo no tenant** — não é silencioso e
>   deixa um artefato (e exige que o usuário tenha permissão para ingressar/registrar dispositivos).

**2. `-prt/--prt-cookie` — semear um cookie PRT que você já possui.**
Se você já possui um valor `x-ms-RefreshTokenCredential` (de uma execução anterior do `-aprt`, ou
de um host comprometido via `ROADtoken`/`browsercore` ou `Mimikatz`), passe-o diretamente e
pule a cadeia de criação.

**3. Nenhum dos dois — converter o token e fazer login manualmente (fallback).**
Sem um cookie PRT, o token de atualização é resgatado por um token de acesso/atualização com escopo de recurso
(impresso e salvo com `-s/-n`), e o navegador é aberto no destino para você
finalizar o login manualmente.

**Coleta de PRT / cookies de sessão.** Quando a sessão do navegador termina (tempo limite de fechamento automático ou
você fecha a janela), `browser-sso` lê o contexto do navegador ao vivo e **imprime todos os
cookies SSO reutilizáveis que foram emitidos** — o cookie PRT (`x-ms-RefreshTokenCredential`) e
os cookies de sessão do ESTS (`ESTSAUTH`, `ESTSAUTHPERSISTENT`, ...) — cada um com uma dica
`-prt` pronta para copiar para que você possa reproduzi-los na próxima vez. Os cookies são verificados enquanto a sessão estiver ativa,
para que o valor seja capturado mesmo se você fechar a janela cedo. A mesma coleta é executada ao final
de `auth-interactive`.

- `-url/--url` seleciona o destino. Use um predefinido amigável — `outlook`, `office`, `teams`,
  `sharepoint`, `onedrive`, `portal`, `graph` — ou passe uma ou mais URLs `https://` brutas
  (separadas por vírgulas). O padrão é `outlook`.
- `-r/--refresh-token` + `-tid` (ou um `-l` em cache) fornece o token de atualização.
  `-app/--appid` assume como padrão o cliente Microsoft Office FOCI.
- `-br/--browser` escolhe o mecanismo do Playwright (Firefox por padrão).
- `-k/--keep` preserva a gravação `session.har` da sessão do navegador.```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 Operations

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:~
### Pulverização de Senhas

| Atividade | Obrigatório | Opcional | Descrição |
|-----------|-------------|----------|-------------|
| `spray` | `-u`, `-p`, `-tid` | `-fp`, `-cp` | Pulverizar credenciais contra IDs de aplicativos de primeira parte conhecidos (APIs v0 + v2.0). |
| `spray-refresh` | `-v`, and (`-l`) **or** (`-r` + `-tid`) | `-fp`, `-cp` | Reproduzir um token de atualização em muitos IDs de aplicativos. |

Por padrão, ambas as atividades usam `includes/auth_apps.json` como fonte de aplicativos; substitua com `-fp`. Adicione `-cp` para testar se cada login bem-sucedido pode enumerar usuários/aplicativos.```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

Inteligência & Descoberta

root@kitploit:~
---

## Saída & Arquivos Gerados

| Arquivo | Criado por | Descrição |
|--------|-----------|-------------|
| `.azure_creds` | Atividades de salvamento de tokens | Cache local JSON de tokens de acesso/atualização, indexados por nome. |
| `output.txt` | flag `-re` | Espelho com timestamp de toda a saída do console. |
| `session.har` | `auth-interactive` / `browser-sso` | Gravação de sessão do navegador (excluída a menos que `-k` esteja definido). |
| `<name>.json` | flag `-j` / `gather-all` | Respostas de API salvas. |

### Arquivos de dados incluídos

| Arquivo | Descrição |
|--------|-------------|
| `includes/auth_apps.json` | IDs de aplicativo alvo usados para pulverização (spraying) e as listas `interest`. |
| `includes/apps.json` | IDs de aplicativo conhecidos da Microsoft e metadados para `knownids`. |
| `includes/Webserver.py` | Listener HTTPS local implementando o redirecionamento PKCE para `auth-app`. |
| `includes/PRT.py` | Cadeia de cunhagem de PRT (registro de dispositivo → PRT → cookie `x-ms-RefreshTokenCredential`) usada por `browser-sso -aprt`. |
| `includes/web/cert.pem`, `includes/web/key.pem` | Material TLS para o listener local. |

---

## Notas & Dicas

- **ID de aplicativo padrão** (`d3590ed6-52b3-4102-aeff-aad2292ab01c`) é o cliente interno (first-party) do Microsoft Office, que funciona para a maioria dos fluxos. As dicas impressas por algumas atividades sugerem estender os tokens para o aplicativo **Microsoft Azure CLI** (`04b07795-8ddb-461a-bbee-02f9e1bf7b46`) para acesso mais amplo.
- **Orientação de escopo:** use `-sc openid` para password spraying e `-sc 'https://graph.microsoft.com/.default'` para operações no Graph.
- **`--beta`** altera `list-users` / `list-applications` para o endpoint beta do Graph, que pode exibir informações extras (por exemplo, atributos de sincronização local (on-prem)).
- **`auth-app` TLS:** o listener PKCE local requer um par de certificado/chave em `includes/web/cert.pem` e `includes/web/key.pem`. Gere um par autoassinado se estiverem faltando, por exemplo:  ```bash
  openssl req -x509 -newkey rsa:2048 -nodes \
    -keyout includes/web/key.pem -out includes/web/cert.pem -days 365 -subj "/CN=localhost"
  • Depuração: -d exibe informações de depuração de alto nível; -dd despeja requisições e respostas HTTP completas (cabeçalhos + corpos) — útil ao diagnosticar falhas na troca de tokens.
  • Mecanismo do navegador (-br/--browser). Os fluxos de navegador (auth-interactive, browser-sso) executam um navegador Playwright com interface gráfica. O mecanismo padrão é firefox (o mecanismo com interface gráfica mais confiável no WSLg); altere com -br chromium ou -br webkit. Instale o mecanismo escolhido uma vez com python -m playwright install <engine>.
  • Playwright no WSL — janela em branco / congelamento total. No WSL/WSLg, um navegador com interface gráfica pode abrir vazio e nunca renderizar enquanto o host inteiro trava. Causa raiz: o WSLg expõe uma GPU virtualizada (/dev/dxg, conduzida pelo driver Mesa d3d12) que o processo de GPU/compositor do navegador tenta usar, enquanto o /dev/shm padrão da VM WSL é minúsculo (frequentemente 64 MB). A combinação — o processo de GPU gira em um dispositivo que não consegue acionar e o compositor de memória compartilhada esgota — então nada renderiza e a VM incha até que o host Windows comece a travar. Um fator secundário foi : a página de login da Microsoft faz long-polling, então nunca dispara e a navegação bloqueia em uma página em branco até o timeout.

Créditos

Criado por Mr.Un1k0d3r — TrueCyber Inc.

Baixar ferramenta
  • Troca de token de atualização (refresh) — troca um token de atualização por tokens de acesso novos.
  • Concessão On-Behalf-Of (obo) — troca um token de acesso já emitido por um novo token com escopo para um recurso downstream (OAuth 2.0 jwt-bearer / OBO).
  • SSO de token para navegador (browser-sso) — abre um navegador real já autenticado como o usuário diretamente no aplicativo web alvo (Outlook na web, Teams, SharePoint, portal do Azure, ...). Com -aprt/--auto-prt, ele gera automaticamente um cookie Primary Refresh Token (PRT) a partir de um token de atualização (registro do dispositivo → PRT → x-ms-RefreshTokenCredential), para que um navegador novo complete o single sign-on sem login manual.
  • Enumeração de diretório via Microsoft Graph — usuários, aplicativos, diretores de serviço, políticas de autorização e um coletor em massa gather-all.
  • Pulverização de senhas contra IDs de aplicativos próprios conhecidos da Microsoft (spray) e pulverização de token de atualização entre aplicativos (spray-refresh).
  • Pós-exploração — registrar aplicativos, criar grupos, atribuir funções de diretório, convidar usuários externos (convidados) e fazer upload de arquivos para o OneDrive.
  • Ajudantes de reconhecimento — magic-app encontra aplicativos redirecionáveis publicamente com consentimento AllPrincipals; listas internas de IDs de aplicativos conhecidos/interessantes da Microsoft.
  • Qualidade de vida — alternância de endpoint beta, cabeçalhos personalizados, user-agent/escopo/público personalizados, filtragem de atributos, saída expandida, registro de depuração/HTTP detalhado e redirecionamento de saída para um arquivo.
  • Notas
    AtividadeObrigatórioOpcionalDescrição
    id-t—Resolve o ID do locatário para um domínio de e-mail fornecido.
    phish-start—-app, -tid, -as, -s, -nInicia um fluxo de código de dispositivo; exibe o código do usuário e (por padrão) captura automaticamente.
    phish-capture-c-app, -tid, -s, -nConsulta tokens usando um código de dispositivo emitido anteriormente.
    auth-u, -p, -tid, -app, -v-s, -nAutentica com nome de usuário/senha (ROPC).
    auth-app-tid-s, -nFluxo de Código de Autorização + PKCE através de um listener HTTPS local.
    auth-interactive—-url, -k, -nAbre um navegador (Playwright), permite que o usuário faça login e extrai tokens do HAR da sessão. Sempre salva automaticamente.
    refresh-v, -app, e (-l) ou (-r + -tid)-s, -nTroca um token de atualização por um novo token de acesso.
    obo-tid, -app, e (-ac) ou (-l)-cs, -au, -sc, -s, -nOn-Behalf-Of: troca um token de acesso emitido por um token com escopo para outro recurso.
    browser-sso-app, e (-l) ou (-r + -tid)-aprt, -url, -prt, -v, -k, -s, -nAbre um navegador já autenticado como o usuário. Adicione -aprt para gerar automaticamente um cookie PRT a partir do token de atualização, forneça um já pronto com -prt, ou recorra à conversão do token + login manual.
    AtividadeObrigatórioOpcionalDescrição
    selfToken—Exibe o perfil do usuário atual (/me).
    emailToken, -fl—Pesquisa a caixa de correio do usuário autenticado por uma palavra-chave.
    permissionToken—Mostra a política de autorização do tenant (beta).
    list-usersToken-j, -beta, -fl, -expEnumera todos os usuários.
    list-applicationsToken-j, -beta, -fl, -expEnumera todas as aplicações.
    list-principalsToken-j, -fl, -expEnumera todos os service principals.
    register-appToken, -n—Registra uma nova aplicação (com um segredo de cliente de 1 ano).
    new-groupToken, -n—Cria um novo grupo de segurança.
    add-groupToken, -uid-gidAtribui uma função de diretório a um principal (função padrão = Global Admin).
    push-fileToken, -fp, -n—Envia um arquivo local para o OneDrive do usuário.
    gather-allToken-jColeta em massa usuários, grupos, apps, SPs, funções, políticas e concessões.
    raw-urlToken, -url-j, -fl, -expEmite um GET bruto para qualquer URL Graph/REST (gerencia paginação @odata.nextLink).
    inviteToken, -n-urlConvida um usuário externo (convidado). -n é o e-mail do convidado.
    magic-appToken—Encontra aplicativos com consentimento AllPrincipals, appRoleAssignmentRequired=false e URIs de redirecionamento públicos.
    AtividadeObrigatórioOpcionalDescrição
    knownids—-fl, -expLista IDs de aplicativos Microsoft conhecidos (includes/apps.json).
    list-interest——Lista as categorias de aplicativos definidas em includes/auth_apps.json.
    interest—-i, -tyLista IDs de aplicativos interessantes; -i exibe apenas IDs, -ty filtra por categoria.
    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
    /dev/shm
    page.goto(..., wait_until="networkidle")
    networkidle
    • Corrigido na ferramenta: AzureRedOps agora detecta automaticamente WSL e desabilita aceleração de hardware para qualquer mecanismo que você usar — Chromium recebe --no-sandbox --disable-gpu --disable-dev-shm-usage, Firefox recebe gfx.webrender.force-disabled / layers.acceleration.disabled — recorrendo à renderização por CPU (software) para que a página ainda renderize e seja totalmente interativa. Cada navegação agora espera por domcontentloaded em vez de networkidle. Você deve ver um navegador funcionando.
    • Se ainda tiver problemas, aumente /dev/shm (sudo mount -o remount,size=1g /dev/shm), certifique-se de estar no WSL 2 com WSLg (wsl --update; echo $DISPLAY deve ser não vazio), e confirme que o runtime do navegador está instalado no venv (python -m playwright install firefox e python -m playwright install-deps).