Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
EasyTokens — Kali365 - Réplica de EvilTokens | Kitploit
Herramientas/GitHubGitHub/secdev02/easytokens
OSINT para Ingeniería SocialRecopilación de InformaciónPost-ExplotaciónPhishingPruebas de PenetraciónSeguridad en la NubeComando y ControlAutenticaciónRed TeamingAtaque Adversario
GitHubsecdev02/easytokens

EasyTokens

721240hace 2 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Kali365 - Réplica de EvilTokens

Ver Repositorio

EasyTokens

Un servidor de phishing mediante código de dispositivo para emulación de adversarios. Captura tokens OAuth de Microsoft 365 a través del flujo de Concesión de Autorización de Dispositivo. Inspirado en GraphSpy.

Advertencia — Solo uso autorizado. Esta herramienta está destinada a testers de penetración y red teamers que operan bajo autorización escrita explícita. El uso indebido puede violar las leyes contra el fraude informático.


Cómo funciona

  1. El operador crea una campaña de código de dispositivo a través de la interfaz de operador.
  2. Una página de inscripción para víctimas (temática de Dunder Mifflin) muestra el código de usuario y solicita al objetivo que se autentique en microsoft.com/devicelogin.
  3. Un sondeo en segundo plano detecta cuando el objetivo completa la autenticación y almacena el token de acceso/actualización capturado en SQLite.
  4. El navegador de la víctima es redirigido a una página de búsqueda posterior a la autenticación.
  5. El operador puede buscar en el OneDrive y el correo electrónico de la víctima a través de Microsoft Graph usando el token capturado.

Arquitectura

Backend en Python (un puerto por campaña) + front-end nginx + persistencia SQLite.

root@kitploit:~
main_server.py          ← punto de entrada unificado (ejecutar este)
db.py                   ← capa de persistencia SQLite
html_enroll.py          ← generador de página de inscripción para víctimas
html_search.py          ← generador de página de búsqueda posterior a la autenticación para víctimas
css_shared.py           ← CSS compartido para la interfaz de operador
nginx_helper.py         ← genera y recarga automáticamente la configuración del proxy inverso nginx
nginx.conf              ← configuración base de nginx (incluye /etc/nginx/conf.d/*.conf)

Rutas


Nginx — Campañas de dominio

Cuando se crea una campaña con un dominio establecido, nginx_helper.py escribe automáticamente un bloque de servidor por dominio en NGINX_CONF (por defecto /etc/nginx/conf.d/easytokens.conf) y recarga nginx. El tráfico de víctimas que llega al puerto 80 para ese dominio es redirigido a la instancia correcta del servidor Python.

  • Las campañas sin dominio se sirven directamente en el puerto de Python (por defecto 3000).
  • Las campañas con dominio se sirven a través de nginx en el puerto 80.
  • El nginx.conf base rechaza cualquier solicitud cuyo encabezado Host no coincida con una campaña conocida (return 444), evitando la exposición accidental del backend Python.
  • Establece NGINX_CONF='' o NGINX_RELOAD_CMD='' para deshabilitar la gestión automática de nginx.

Inicio rápido (Docker)

root@kitploit:~
docker compose up --build

Puertos expuestos por Docker:

PuertoPropósito
80nginx — tráfico de víctimas basado en dominio
3000Python — interfaz de operador + acceso directo de víctimas
  • Página de víctima (directa): http://localhost:3000/
  • Interfaz de operador: http://localhost:3000/app
  • Campañas de dominio: http://<dominio-campaña>/ (enrutado a través de nginx en el puerto 80)

Los tokens capturados y los registros se persisten en volúmenes Docker:

VolumenRuta en el contenedorPropósito
easytokens-data/data/easytokens.dbBase de datos SQLite
./logs/logs/Archivos de registro por solicitud

Configuración manual

Requisitos: Python 3.12+, sin paquetes de terceros.

root@kitploit:~
python main_server.py

Variables de entorno


Nodo relay PHP

El directorio php-relay/ contiene un contenedor Apache/PHP independiente que actúa como un nodo distribuido orientado a víctimas. Sirve la misma página de inscripción con código de dispositivo que el servidor principal, sondea Microsoft directamente y reenvía los tokens capturados al panel principal mediante POST /webhook.

Cómo funciona

  1. Al iniciar, checkin.php realiza un POST a POST /relay/checkin en el panel principal, autenticándose con RELAY_SECRET. El panel registra el nodo y devuelve un node_id.
  2. Las víctimas navegan a la página de inscripción del relay (index.php), que inicia un flujo de código de dispositivo nuevo.
  3. JS del lado del navegador sondea poll.php. Cuando se captura un token, poll.php lo reenvía a POST /webhook en el panel principal, etiquetado con el node_id.

Variables de entorno del relay

Configurar en php-relay/.env:

Inicio rápido

Ambos contenedores simultáneamente (recomendado):

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

Ejecutar ambos con una sola fusión de -f los coloca en la misma red Docker, por lo que MAIN_SERVER_URL=http://easytokens:3000 se resuelve correctamente.

Acceso:

URLPropósito
http://localhost:8082/Página de inscripción de víctimas del relay
http://localhost:3000/app/nodesVista del operador de los nodos relay registrados

Solo relay (panel remoto):

root@kitploit:~
cd php-relay
# Establecer MAIN_SERVER_URL a la URL pública del panel en .env
docker compose up --build

Configuración del secreto compartido

  1. Generar un secreto: openssl rand -hex 32
  2. Establecer RELAY_SECRET=<secreto> en EasyTokens/.env (lo recoge el panel principal a través de docker-compose.yml)
  3. Establecer el mismo valor en php-relay/.env

Base de datos

Dos tablas en la base de datos SQLite:

  • tokens — cada token de acceso/actualización capturado (UPN, token de acceso, token de actualización, token de ID, alcance, origen, marca de tiempo de captura)
  • device_codes — campañas iniciadas por el operador (código de usuario, código de dispositivo, URL de verificación, estado, ID del token vinculado, puerto, dominio)

Detalles de OAuth de Microsoft


Licencia

MIT — Copyright (c) 2026 Casey Smith

Descargar herramienta
MétodoRutaAudienciaDescripción
GET/VíctimaPágina de inscripción con código de dispositivo (tema Dunder Mifflin)
POST/pollVíctima (JS)Sondea el endpoint de tokens de Microsoft; almacena el token en caso de éxito
GET/search?s=<id>VíctimaPágina de búsqueda posterior a la autenticación para OneDrive/correo
GET/appOperadorPanel de control — estadísticas + capturas recientes
GET/app/device-codesOperadorTodas las campañas con estado de sondeo en vivo
POST/app/device-codes/newOperadorCrear una nueva campaña de código de dispositivo
GET/app/tokensOperadorTodos los tokens capturados
GET/app/search?id=<id>OperadorBúsqueda en OneDrive + correo para un token específico
POST/webhookNodo relayIngresar un token desde un nodo relay autenticado
POST/relay/checkinNodo relayRegistrar un nodo relay; devuelve node_id
VariableValor por defectoDescripción
PORT3000Puerto de escucha del servidor Python
PORT_MAX3010Límite superior del rango de puertos expuestos por Docker
DB_PATH/data/easytokens.dbRuta de la base de datos SQLite
LOG_DIR/logsDirectorio de registros por solicitud
NGINX_CONF/etc/nginx/conf.d/easytokens.confRuta donde nginx_helper escribe la configuración generada; establecer a '' para deshabilitar
NGINX_RELOAD_CMDnginx -s reloadComando shell para recargar nginx después de cambios en la configuración; establecer a '' para deshabilitar
RELAY_SECRET(sin establecer)Secreto compartido para la autenticación del nodo relay. Generar con openssl rand -hex 32. Debe coincidir con RELAY_SECRET en php-relay/.env. Dejar sin establecer para deshabilitar el soporte de relay.
VariableValor por defectoDescripción
MAIN_SERVER_URLhttp://easytokens:3000URL del panel principal accesible desde dentro del contenedor relay
RELAY_SECRET(requerido)Debe coincidir con RELAY_SECRET en el panel principal
RELAY_PORT8082Puerto del host para exponer el relay
RELAY_LABELnombre del hostNombre legible para humanos que se muestra en el panel para este nodo
CHECKIN_RETRIES10Intentos de registro antes de rendirse
CHECKIN_DELAY5Segundos entre reintentos de registro
NODE_ID_FILE/tmp/relay_node_idRuta donde se almacena en caché el node_id después del registro
CampoValor
ID de cliented3590ed6-52b3-4102-aeff-aad2292ab01c (Microsoft Office)
Recursohttps://graph.microsoft.com
Ámbitosopenid profile email offline_access Mail.Read Files.Read
URL de código de dispositivohttps://login.microsoftonline.com/common/oauth2/devicecode
URL de tokenhttps://login.microsoftonline.com/Common/oauth2/token