
Un framework modular de descubrimiento de activos escrito en python para automatizar el trabajo manual repetitivo
Cygor es un framework modular de descubrimiento de activos que reúne escaneo, análisis y enumeración de servicios en un solo flujo de trabajo. Reemplaza el mosaico de herramientas separadas por un proceso automatizado que gestiona el descubrimiento, el enriquecimiento y la enumeración dirigida sin fricciones, reduciendo la carga manual y permitiéndote centrarte en los resultados en lugar de en la gestión de herramientas.
La interfaz web de Cygor toma el caos de los datos de escaneo sin procesar y lo organiza en un único centro de mando visual. En lugar de revisar interminables XML, JSON o texto plano, los resultados se analizan, enriquecen y muestran automáticamente en un espacio diseñado para una clasificación rápida y la toma de decisiones.
Impulsado por FastAPI y Bootstrap 5, el panel facilita:
La interfaz web no es solo para la presentación: se trata de eficiencia y claridad. Al reunir todos los datos recopilados en un único espacio de trabajo interactivo, reduce el tiempo dedicado a analizar archivos o conciliar salidas y permite a los evaluadores centrarse en lo que importa: comprender el entorno y actuar en consecuencia.
Muchas de las herramientas, técnicas y procedimientos que creo están inspirados en el Universo Spawn. Si nunca has leído un cómic de Spawn, no pasa nada, porque compartiré algo de información sobre por qué elegí a este personaje como nombre de esta herramienta.
El nombre Cygor proviene de Cy-Gor, un trágico antihéroe del universo Spawn. Antaño Michael Konieczny —un operativo gubernamental y amigo cercano de Al Simmons— intentó exponer la corrupción tras el asesinato de Simmons. Sin embargo, fue capturado y obligado a participar en el Proyecto Sim, los experimentos simiescos del Dr. Frederick Willheim, donde el cuerpo de un gorila se fusionó con la mente de Konieczny mediante cibernética invasiva. El resultado fue la bestia conocida como Cy-Gor, abreviatura de Gorila Cibernético.
Tras escapar del cautiverio, Cy-Gor protagonizó violentos desmanes, llegando incluso a arrasar centros de datos gubernamentales en ataques de confusión y furia. Aunque fue cazado y recapturado en múltiples ocasiones, finalmente se rebeló contra los sistemas que buscaban controlarlo: eliminó los implantes de seguimiento y se liberó para forjar su propio camino, dividido entre la máquina, la bestia y el hombre.
webenum (solo se ejecutan las herramientas instaladas).Hay varios métodos compatibles para instalar Cygor: pip, pipx, uv y docker.
Algunas dependencias (por ejemplo, gssapi para Kerberos/WinRM) compilan extensiones de C, así que instala primero el conjunto de herramientas de compilación y los encabezados de Kerberos:
# Debian/Ubuntu/Kali:
sudo apt install -y build-essential python3-dev libkrb5-dev
# Stable version:
pipx install cygor
# Install from source:
git clone https://github.com/tjnull/cygor
cd cygor
pipx install .
La configuración de Docker de Cygor incluye tanto la aplicación como un servicio de base de datos PostgreSQL. El sistema recurre automáticamente a SQLite si PostgreSQL no está disponible.
Producción (recomendado):
# Option 1: Use the wrapper script (automatically handles port conflicts)
./docker-compose-up.sh up --build
# Option 2: Direct docker compose (uses default ports)
docker compose up --build
Desarrollo (con el código fuente montado):
# Option 1: Use the wrapper script (automatically handles port conflicts)
./docker-compose-up.sh dev up --build
# Option 2: Direct docker compose (uses default ports)
docker compose -f docker-compose-dev.yaml up --build
La configuración de Docker Compose incluye:
results/: salidas de escaneo, resultados de credrecon y archivos de base de datoscygor-config/: volumen de configuración local (creado automáticamente)Por defecto:
5432 del host (si está disponible)5434 del host (si está disponible)5432 internamente (red de Docker)Si los puertos están en uso, puedes:
Usar el script contenedor (recomendado: detecta automáticamente los puertos disponibles):
./docker-compose-up.sh up --build
Establecer el puerto manualmente:
export POSTGRES_HOST_PORT=5435
docker compose up --build
Eliminar la asignación de puertos (si no necesitas acceso externo a PostgreSQL): comenta la sección ports: en docker-compose.yaml
Para compilar la imagen de Docker manualmente:
docker build -t cygor .
Ejecutar un solo contenedor (sin el servicio PostgreSQL):
docker run --rm -v ./results:/opt/cygor/results \
-e CYGOR_RESULTS_DIR=/opt/cygor/results \
cygor web --host 0.0.0.0 --port 8080 --load-dir /opt/cygor/results
CYGOR_DB_URL esté definida)Variables de entorno clave para Docker:
Datos y espacio de trabajo:
CYGOR_RESULTS_DIR: directorio de resultados (por defecto: /opt/cygor/results)CYGOR_WORKSPACE: directorio del espacio de trabajo (por defecto: /opt/cygor/results)CYGOR_RESULTS_PATH: ruta del host para el volumen de resultados (por defecto: ./results)CYGOR_CONFIG_PATH: ruta del host para el volumen de configuración de autenticación (por defecto: ./cygor-config)Base de datos:
CYGOR_DB_URL: cadena de conexión a la base de datos (se establece automáticamente con docker-compose)CYGOR_DB_USER: usuario de la base de datos PostgreSQL (por defecto: cygor)CYGOR_DB_PASSWORD: contraseña de la base de datos PostgreSQLPOSTGRES_HOST_PORT: asignación del puerto host de PostgreSQL (para resolver conflictos de puertos)Depuración y verbosidad:
CYGOR_DEBUG: habilita el modo de depuración (establécelo en 1 para activarlo)CYGOR_VERBOSE: nivel de verbosidad (0=normal, 1=detallado, 2=depuración)Las guías detalladas se encuentran en cygor/wiki/: instalación, los 11 módulos de enumeración integrados, desarrollo de plugins, gestión de espacios de trabajo y más. GitHub muestra el directorio como un sitio de documentación navegable (empieza en cygor/wiki/README.md). Las mismas páginas también las sirve la interfaz web en /docs una vez que ejecutas cygor web start.
Usa el comando Cygor de nivel superior para acceder a las herramientas disponibles. Cada subcomando tiene su propia pantalla de ayuda (Cygor --help) que documenta las opciones y acciones.
tjnull@kali:~$ cygor
Usage:
cygor <command> [args]
Commands:
banner Cygor tool banner (Warning it is large!)
scan Automated scanner to discover hosts and services. (Will require root/sudo privileges for scanning).
parse Analyze a NMAP scan file (nmap, gnmap, xml) and extract categorized hostlists by common service.
enum Loads enumeration modules that are located in the cygor modules directory.
workspace Manage workspaces (init/set-default/show).
web Control/launch the Cygor Web UI (start/stop/status) or run directly.
Environment:
CYGOR_WORKSPACE Override default workspace just for this run.
CYGOR_RESULTS_DIR Used by web and modules if set. (Auto-set from default workspace.)
Necesitarás privilegios sudo (root) para ejecutar el escáner en cygor:
Run host discovery with Masscan only:
cygor scan -i eth0 -f scope.txt --discover masscan
Run host discovery with both Masscan and Naabu, then Nmap on merged results:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --nmap-source merge
Discovery only (no Nmap), save results in results/discovery/:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --discover-only
Reuse saved discovery results for Nmap top ports scan:
cygor scan --use-discovery results/discovery/merged-discovered.txt --scan-type top-ports
Run Nmap with custom ports on discovered hosts:
cygor scan --use-discovery results/discovery/masscan-discovered.txt --ports 80,443,8443
Run Nmap with 10 parallel processes on full scope (Max is 100):
\cygor scan -i eth0 -f scope.txt --discover naabu --processes 10 --scan-type fullscan:
Run Cygor to discover hosts and scan them with Nmap with a provided lists of IP Addresses or CDRs:
cygor scan -i eth0 --ips 10.10.10.1 10.10.10.5 10.10.20.0/24 --discover naabu --processes 10 --scan-type fullscan
Exclude specific subnets or hosts from scan:
cygor scan -i eth0 -f scope.txt --exclusions exclusions.txt --discover masscan
Parse a directory of Nmap results and print hostlists:
cygor parse results/nmap
Parse a single XML and write hostlists to results/parsed-hostlists:
cygor parse results/nmap/scan1.xml -o results
Recursively parse .xml/.nmap/.gnmap files and write outputs:
cygor parse /path/to/scans --out-dir results
Cygor incluye un conjunto creciente de módulos de enumeración específicos por protocolo. Cada uno envuelve herramientas probadas, analiza la salida en filas tipadas ("parsea, no vuelques") y lleva los resultados al inventario (BD + interfaz web), donde se pueden buscar y correlacionar por host. Las observaciones de alta señal también se introducen automáticamente en el motor de próximos pasos, que muestra hallazgos priorizados y comandos de seguimiento listos para ejecutar en la interfaz web.
List all available modules:
cygor enum --list
Run lockon against an http hostlist:
cygor enum lockon web -f results/parsed-hostlists/http/http-hostlist.txt -o results/enum/lockon
Run web content discovery (multi-tool, with screenshots):
cygor enum webenum -f results/parsed-hostlists/http-https/http-https-hostlist.txt --screenshot
Run nfsexplorer against NFS targets (exports only):
cygor enum nfsexplorer -i results/parsed-hostlists/nfs/nfs-hostlist.txt --info
Run smbexplorer and list files:
cygor enum smbexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --list-files
Enumerate MSRPC (null session) with password policy + RID cycling:
cygor enum rpcexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --rid-cycle
Probe databases for unauthenticated access (point at any DB service hostlist):
cygor enum dbprobe -i results/parsed-hostlists/mysql/mysql-hostlist.txt
Ejecuta cygor enum <module> --help para obtener la referencia completa de opciones por módulo.
Cygor es extensible: coloca un archivo Python en ~/.cygor/plugins/ y aparecerá en cygor enum --list (y en la interfaz web) como cualquier módulo integrado. Envuelve tus propias herramientas, distribuye escáneres internos a tu equipo o amplía Cygor para un proyecto específico sin necesidad de hacer un fork.
Scaffold a new plugin (writes ~/.cygor/plugins/my_scanner.py):
cygor plugin create "My Scanner"
Install a plugin from a local file or a git URL:
cygor plugin install ./my_scanner.py
cygor plugin install https://github.com/example/cygor-myscanner
Validate, list, update, remove:
cygor plugin validate ./my_scanner.py
cygor plugin list
cygor plugin update --all
cygor plugin remove my_scanner
Run an installed plugin (same as a built-in module):
cygor enum my_scanner -t 10.10.10.5
Hay tres plugins de referencia en docs/examples/modules/: un ejemplo mínimo, un envoltorio para herramientas externas y una plantilla completa anotada. Consulta la Guía de desarrollo de plugins para conocer el formato completo de los plugins, opciones/columnas/vistas, gestión de dependencias, compatibilidad de versiones y la lista de permisos opcional de plugins.
Después de recopilar datos, puedes cargarlos en la interfaz web de Cygor para transformar los resultados de escaneo en una visualización clara de hosts, servicios y otros hallazgos clave. Cygor creará un archivo llamado cygor.db que contendrá los datos necesarios para modelarlos en la interfaz web de Cygor.
# Basic usage - start on default host/port (127.0.0.1:8000)
cygor web start
# Start on all interfaces, port 8080
cygor web start -H 0.0.0.0 -p 8080
# Start with custom results directory
cygor web start --load-dir /path/to/results
# Start with verbose output
cygor web start -vv
# Start with all options
cygor web start -H 0.0.0.0 -p 8080 --load-dir ~/scan-results -vv
Ejecuta cygor web start --help para obtener la lista completa de opciones.
# Check if the web server is running
cygor web status
# Stop a running web server
cygor web stop
Cygor detecta y usa PostgreSQL automáticamente si está disponible; de lo contrario, recurre a SQLite:
PostgreSQL (recomendado para producción):
psql está disponiblepostgresql+psycopg_async://user:pass@host/dbSQLite (alternativa por defecto):
cygor.db en el directorio de resultadosCygor es un framework de investigación en seguridad y educativo. Está pensado para usarse únicamente en entornos donde tengas autorización explícita por escrito, como ejercicios de pruebas de penetración, operaciones de equipo rojo, laboratorios de clase o rangos de pruebas personales.
Este software no debe utilizarse para accesos no autorizados, intrusiones o perturbaciones de sistemas que no poseas o controles. Hacerlo puede violar las leyes y regulaciones de tu jurisdicción y podría dar lugar a un proceso penal o sanciones civiles.
Al descargar, ejecutar o modificar Cygor, aceptas que:
Los autores y colaboradores de Cygor no aceptan ninguna responsabilidad por el uso indebido, los daños o las consecuencias derivadas del uso de este software.
Si no estás seguro de si estás autorizado a usar Cygor en un entorno determinado, no lo ejecutes.
| Módulo | Servicio | Función |
|---|
lockon | HTTP/S, RDP, VNC, X11 | Captura capturas de pantalla en varios protocolos para una clasificación visual rápida. |
webenum | HTTP/S | Descubrimiento de contenido paralelo con múltiples herramientas (ffuf, feroxbuster, gobuster, dirsearch) con deduplicación/correlación entre herramientas y capturas de pantalla opcionales. |
smbexplorer | SMB (445) | Enumera recursos compartidos, permisos y archivos accesibles; NTLM/Kerberos/pass-the-hash. |
nfsexplorer | NFS (2049) | Enumera exportaciones, versiones y archivos; suplantación de UID/GID y comprobaciones de no_root_squash. |
rpcexplorer | MSRPC (445) | Sesión nula/autenticada: información del servidor, SID de dominio, usuarios, grupos, política de contraseñas completa y ciclo de RID. |
ldapexplorer | LDAP/AD (389/636) | rootDSE, bind/búsqueda anónimos y volcado de dominio autenticado. |
snmpexplorer | SNMP (161) | Fuerza bruta de comunidad v1/v2c, información del sistema del dispositivo y barrido de MIB (usuarios/procesos/software/puertos/interfaces). |
dnsexplorer | DNS (53) | Versión, detección de resolvedor abierto y transferencia de zona AXFR. |
ftpexplorer | FTP (21) | Banner, inicio de sesión anónimo, listado de directorios, FEAT, prueba de escritura anónima. |
smtpexplorer | SMTP (25/587) | Banner, STARTTLS, mecanismos AUTH, enumeración de usuarios VRFY, prueba de relay abierto. |
dbprobe | Bases de datos | Prueba Redis/MySQL/PostgreSQL/MongoDB/Elasticsearch/CouchDB para acceso sin autenticación y versión. |