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
EasyTokens — Kali365 - EvilTokens Replica | Kitploit
Strumenti/GitHubGitHub/secdev02/easytokens
OSINT per Ingegneria SocialeRaccolta InformazioniPost-ExploitPhishingPenetration TestingSicurezza CloudCommand and ControlAutenticazioneRed TeamingAttacco Avversario
GitHubsecdev02/easytokens

EasyTokens

7212402 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

Kali365 - EvilTokens Replica

Vedi Repository

EasyTokens

Un server di phishing basato su device-code per l'emulazione di avversari. Cattura i token OAuth di Microsoft 365 tramite il flusso Device Authorization Grant. Ispirato da GraphSpy.

Avviso — Solo per uso autorizzato. Questo strumento è destinato a penetration tester e red teamer che operano con esplicita autorizzazione scritta. Un uso improprio può violare le leggi contro le frodi informatiche.


Come funziona

  1. L'operatore crea una campagna con device code tramite l'interfaccia operatore.
  2. Una pagina di iscrizione destinata alla vittima (a tema Dunder Mifflin) mostra il codice utente e invita il bersaglio ad autenticarsi su microsoft.com/devicelogin.
  3. Un poller in background rileva quando il bersaglio completa l'autenticazione e salva il token di accesso/refresh catturato in SQLite.
  4. Il browser della vittima viene reindirizzato a una pagina di ricerca post-autenticazione.
  5. L'operatore può cercare OneDrive ed email della vittima tramite Microsoft Graph utilizzando il token catturato.

Architettura

Backend Python (una porta per campagna) + front-end nginx + persistenza SQLite.

root@kitploit:~
main_server.py          ← punto di ingresso unificato (esegui questo)
db.py                   ← strato di persistenza SQLite
html_enroll.py          ← costruttore pagina di iscrizione vittima
html_search.py          ← costruttore pagina di ricerca post-autenticazione vittima
css_shared.py           ← CSS condiviso per interfaccia operatore
nginx_helper.py         ← genera e ricarica automaticamente la configurazione del proxy inverso nginx
nginx.conf              ← configurazione nginx di base (include /etc/nginx/conf.d/*.conf)

Rotte


Nginx — Campagne con dominio

Quando una campagna viene creata con un dominio impostato, nginx_helper.py scrive automaticamente un blocco server per dominio in NGINX_CONF (/etc/nginx/conf.d/easytokens.conf di default) e ricarica nginx. Il traffico delle vittime in arrivo sulla porta 80 per quel dominio viene proxyzato all'istanza Python corretta.

  • Le campagne senza dominio vengono servite direttamente sulla porta Python (default 3000).
  • Le campagne con dominio vengono servite tramite nginx sulla porta 80.
  • La configurazione base nginx.conf rifiuta qualsiasi richiesta il cui header Host non corrisponda a una campagna nota (return 444), impedendo l'esposizione accidentale del backend Python.
  • Imposta NGINX_CONF='' o NGINX_RELOAD_CMD='' per disabilitare la gestione automatica di nginx.

Avvio rapido (Docker)

root@kitploit:~
docker compose up --build

Porte esposte da Docker:

PortaScopo
80nginx — traffico vittime basato su dominio
3000Python — interfaccia operatore + accesso diretto vittima
  • Pagina vittima (diretta): http://localhost:3000/
  • Interfaccia operatore: http://localhost:3000/app
  • Campagne con dominio: http://<campagna-dominio>/ (instradate tramite nginx sulla porta 80)

I token catturati e i log sono persistenti su volumi Docker:

VolumePercorso nel containerScopo
easytokens-data/data/easytokens.dbDatabase SQLite
./logs/logs/File di log per richiesta

Configurazione manuale

Requisiti: Python 3.12+, nessun pacchetto di terze parti.

root@kitploit:~
python main_server.py

Variabili d'ambiente


Nodo relay PHP

La directory php-relay/ contiene un contenitore Apache/PHP autonomo che funge da nodo distribuito rivolto alla vittima. Serve la stessa pagina di iscrizione device-code del server principale, effettua poll diretto di Microsoft e inoltra i token catturati al pannello principale tramite POST /webhook.

Come funziona

  1. All'avvio, checkin.php esegue un POST su POST /relay/checkin del pannello principale, autenticandosi con RELAY_SECRET. Il pannello registra il nodo e restituisce un node_id.
  2. Le vittime navigano verso la pagina di iscrizione del relay (index.php), che avvia un nuovo flusso device-code.
  3. Il JS lato browser effettua poll su poll.php. Quando un token viene catturato, poll.php lo inoltra a POST /webhook del pannello principale, etichettato con il node_id.

Variabili d'ambiente del relay

Configura in php-relay/.env:

Avvio rapido

Entrambi i contenitori contemporaneamente (consigliato):

root@kitploit:~
# da EasyTokens/
docker compose -f docker-compose.yml -f php-relay/docker-compose.yml up --build

Eseguire entrambi con un singolo merge -f li mette sulla stessa rete Docker, quindi MAIN_SERVER_URL=http://easytokens:3000 viene risolto correttamente.

Accesso:

URLScopo
http://localhost:8082/Pagina di iscrizione vittima del relay
http://localhost:3000/app/nodesVista operatore dei nodi relay registrati

Solo relay (pannello remoto):

root@kitploit:~
cd php-relay
# Imposta MAIN_SERVER_URL sull'URL pubblico del pannello in .env
docker compose up --build

Configurazione del segreto condiviso

  1. Genera un segreto: openssl rand -hex 32
  2. Imposta RELAY_SECRET=<segreto> in EasyTokens/.env (viene raccolto dal pannello principale tramite docker-compose.yml)
  3. Imposta lo stesso valore in php-relay/.env

Database

Due tabelle nel database SQLite:

  • tokens — ogni token di accesso/refresh catturato (UPN, access token, refresh token, id token, scope, origine, timestamp cattura)
  • device_codes — campagne avviate dall'operatore (codice utente, codice dispositivo, URL di verifica, stato, ID token collegato, porta, dominio)

Dettagli OAuth di Microsoft


Licenza

MIT — Copyright (c) 2026 Casey Smith

Scarica lo strumento
MetodoPercorsoDestinatarioDescrizione
GET/VittimaPagina di iscrizione device-code (tema Dunder Mifflin)
POST/pollVittima (JS)Poll dell'endpoint token di Microsoft; salva il token in caso di successo
GET/search?s=<id>VittimaPagina di ricerca OneDrive/email post-autenticazione
GET/appOperatoreDashboard — statistiche + catture recenti
GET/app/device-codesOperatoreTutte le campagne con stato del poll in tempo reale
POST/app/device-codes/newOperatoreCrea una nuova campagna device-code
GET/app/tokensOperatoreTutti i token catturati
GET/app/search?id=<id>OperatoreRicerca OneDrive + email per un token specifico
POST/webhookNodo relayIngestisce un token da un nodo relay autenticato
POST/relay/checkinNodo relayRegistra un nodo relay; restituisce node_id
VariabileDefaultDescrizione
PORT3000Porta di ascolto per il server Python
PORT_MAX3010Limite superiore dell'intervallo di porte esposte da Docker
DB_PATH/data/easytokens.dbPercorso del database SQLite
LOG_DIR/logsDirectory dei log per richiesta
NGINX_CONF/etc/nginx/conf.d/easytokens.confPercorso in cui nginx_helper scrive la configurazione generata; impostare a '' per disabilitare
NGINX_RELOAD_CMDnginx -s reloadComando shell per ricaricare nginx dopo modifiche alla configurazione; impostare a '' per disabilitare
RELAY_SECRET(non impostato)Segreto condiviso per l'autenticazione del nodo relay. Generalo con openssl rand -hex 32. Deve corrispondere a RELAY_SECRET in php-relay/.env. Lascialo non impostato per disabilitare il supporto relay.
VariabileDefaultDescrizione
MAIN_SERVER_URLhttp://easytokens:3000URL del pannello principale raggiungibile dall'interno del contenitore relay
RELAY_SECRET(obbligatorio)Deve corrispondere a RELAY_SECRET sul pannello principale
RELAY_PORT8082Porta host su cui esporre il relay
RELAY_LABELhostnameNome leggibile visualizzato nel pannello per questo nodo
CHECKIN_RETRIES10Tentativi di check-in prima di arrendersi
CHECKIN_DELAY5Secondi tra i tentativi di check-in
NODE_ID_FILE/tmp/relay_node_idPercorso in cui il node_id viene memorizzato dopo il check-in
CampoValore
ID clientd3590ed6-52b3-4102-aeff-aad2292ab01c (Microsoft Office)
Risorsahttps://graph.microsoft.com
Ambitiopenid profile email offline_access Mail.Read Files.Read
URL device codehttps://login.microsoftonline.com/common/oauth2/devicecode
URL tokenhttps://login.microsoftonline.com/Common/oauth2/token