
Un framework modulare per la scoperta di asset scritto in Python per automatizzare il lavoro manuale ripetitivo
Cygor è un framework modulare di scoperta degli asset che riunisce scansione, parsing ed enumerazione dei servizi in un unico flusso di lavoro. Sostituisce l'insieme eterogeneo di strumenti separati con un processo automatizzato che gestisce senza soluzione di continuità scoperta, arricchimento ed enumerazione mirata — riducendo il lavoro manuale e permettendoti di concentrarti sui risultati invece che sulla gestione degli strumenti.
La Web UI di Cygor prende il caos dei dati di scansione grezzi e lo organizza in un unico centro di comando visivo. Invece di setacciare infiniti file XML, JSON o testo semplice, i risultati vengono automaticamente analizzati, arricchiti e visualizzati in un unico spazio progettato per un triage rapido e decisioni immediate.
Basata su FastAPI e Bootstrap 5, la dashboard consente di:
La Web UI non serve solo alla presentazione — riguarda efficienza e chiarezza. Riunendo tutti i dati raccolti in un unico spazio di lavoro interattivo, riduce il tempo dedicato all'analisi dei file o alla riconciliazione delle uscite e consente ai tester di concentrarsi su ciò che conta: comprendere l'ambiente e agire di conseguenza.
Molti degli strumenti, delle tecniche e delle metodologie che creo traggono ispirazione dall'Universo di Spawn. Se non hai mai letto un fumetto di Spawn, va bene lo stesso: condividerò alcune informazioni sul motivo per cui ho scelto questo personaggio come nome dello strumento.
Il nome Cygor deriva da Cy-Gor, un tragico antieroe dell'universo di Spawn. Un tempo Michael Konieczny — operativo governativo e caro amico di Al Simmons — cercò di smascherare la corruzione dopo l'omicidio di Simmons. Tuttavia, fu catturato e costretto al Progetto Sim, gli esperimenti scimmieschi del Dr. Frederick Willheim, in cui il corpo di un gorilla fu fuso con la mente di Konieczny tramite cibernetica invasiva. Il risultato fu la bestia nota come Cy-Gor — abbreviazione di Gorilla Cibernetico.
Dopo essere fuggito dalla prigionia, Cy-Gor compì violente scorribande, arrivando persino a devastare i data center governativi in preda a confusione e rabbia. Sebbene cacciato e ricatturato più volte, alla fine combatté contro i sistemi che cercavano di controllarlo — rimuovendo gli impianti di localizzazione e liberandosi per forgiare il proprio cammino, lacerato tra macchina, bestia e uomo.
webenum (vengono eseguiti solo gli strumenti installati).Esistono diversi metodi supportati per installare Cygor: pip, pipx, uv e docker.
Alcune dipendenze (ad es. gssapi per Kerberos/WinRM) compilano estensioni C, quindi installa prima la toolchain di compilazione e le intestazioni 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 configurazione Docker di Cygor include sia l'applicazione sia un servizio di database PostgreSQL. Il sistema passa automaticamente a SQLite se PostgreSQL non è disponibile.
Produzione (consigliata):
# 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
Sviluppo (con codice sorgente montato):
# 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 configurazione Docker Compose include:
results/: Output di scansione, risultati credrecon e file del databasecygor-config/: Volume di configurazione locale (creato automaticamente)Per impostazione predefinita:
5432 (se disponibile)5434 (se disponibile)5432 internamente (rete Docker)Se le porte sono in uso, puoi:
Usare lo script wrapper (consigliato - rileva automaticamente le porte disponibili):
./docker-compose-up.sh up --build
Impostare la porta manualmente:
export POSTGRES_HOST_PORT=5435
docker compose up --build
Rimuovere il mapping delle porte (se non hai bisogno dell'accesso PostgreSQL esterno):
Commenta la sezione ports: in docker-compose.yaml
Per creare l'immagine Docker manualmente:
docker build -t cygor .
Esegui un singolo contenitore (senza servizio 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 non sia impostata)Principali variabili d'ambiente per Docker:
Dati e Area di Lavoro:
CYGOR_RESULTS_DIR: Directory dei risultati (predefinita: /opt/cygor/results)CYGOR_WORKSPACE: Directory dell'area di lavoro (predefinita: /opt/cygor/results)CYGOR_RESULTS_PATH: Percorso host per il volume dei risultati (predefinito: ./results)CYGOR_CONFIG_PATH: Percorso host per il volume di configurazione dell'autenticazione (predefinito: ./cygor-config)Database:
CYGOR_DB_URL: Stringa di connessione al database (impostata automaticamente da docker-compose)CYGOR_DB_USER: Utente del database PostgreSQL (predefinito: cygor)CYGOR_DB_PASSWORD: Password del database PostgreSQLPOSTGRES_HOST_PORT: Mapping della porta host PostgreSQL (per la risoluzione dei conflitti di porta)Debug e Livello di Verbosità:
CYGOR_DEBUG: Abilita la modalità debug (imposta a 1 per attivarla)CYGOR_VERBOSE: Livello di verbosità (0=normale, 1=verbose, 2=debug)Guide dettagliate sono disponibili in cygor/wiki/ — installazione, gli 11 moduli di enumerazione integrati, sviluppo di plugin, gestione dell'area di lavoro e altro ancora. GitHub mostra la directory come un sito di documentazione navigabile (inizia da cygor/wiki/README.md). Le stesse pagine vengono servite anche dalla Web UI all'indirizzo /docs una volta eseguito cygor web start.
Usa il comando Cygor di primo livello per accedere agli strumenti disponibili. Ogni sottocomando ha la propria schermata di aiuto (Cygor --help) che documenta flag e azioni.
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.)
Avrai bisogno dei privilegi sudo (root) per eseguire lo scanner in 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 include un set in crescita di moduli di enumerazione specifici per protocollo. Ognuno di essi integra strumenti collaudati, analizza l'output in righe tipizzate ("parse-don't-dump") e inserisce i risultati nell'inventario (DB + Web UI) dove sono ricercabili e correlabili per host. Le osservazioni ad alto valore informativo vengono inoltre inserite automaticamente nel motore dei passi successivi, che presenta risultati prioritizzati e comandi di follow-up pronti all'esecuzione nella Web UI.
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
Esegui cygor enum <module> --help per il riferimento completo alle opzioni di ciascun modulo.
Cygor è estensibile — inserisci un file Python in ~/.cygor/plugins/ e apparirà in cygor enum --list (e nella Web UI) come qualsiasi modulo integrato. Avvolgi i tuoi strumenti, distribuisci scanner interni al tuo team o estendi Cygor per un impegno specifico senza doverlo fare 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
Tre plugin di riferimento si trovano in docs/examples/modules/: un esempio minimale, un wrapper per strumenti esterni e un template completo annotato. Consulta la Guida allo Sviluppo di Plugin per il formato completo del plugin, opzioni/colonne/viste, gestione delle dipendenze, compatibilità delle versioni e la lista bianca opzionale dei plugin.
Dopo aver raccolto i dati, puoi caricarli nella Web UI di Cygor per trasformare i risultati delle scansioni in una chiara visualizzazione di host, servizi e altri risultati chiave. Cygor creerà un file chiamato cygor.db che conterrà i dati necessari per la modellazione nella Web UI di 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
Esegui cygor web start --help per l'elenco completo delle opzioni.
# Check if the web server is running
cygor web status
# Stop a running web server
cygor web stop
Cygor rileva e utilizza automaticamente PostgreSQL se disponibile, altrimenti ricade su SQLite:
PostgreSQL (consigliato per la produzione):
psql è disponibilepostgresql+psycopg_async://user:pass@host/dbSQLite (ricaduta predefinita):
cygor.db nella directory dei risultatiCygor è un framework di ricerca sulla sicurezza e a scopo didattico. È pensato per essere utilizzato solo in ambienti in cui disponi di un'autorizzazione esplicita e scritta — come impegni di penetration testing, operazioni di red team, laboratori didattici o range di test personali.
Questo software non deve essere utilizzato per accessi non autorizzati, intrusioni o interruzioni di sistemi che non possiedi o controlli. Farlo potrebbe violare leggi e regolamenti della tua giurisdizione e potrebbe comportare azioni penali o sanzioni civili.
Scaricando, eseguendo o modificando Cygor, accetti che:
Gli autori e i collaboratori di Cygor non accettano alcuna responsabilità per usi impropri, danni o conseguenze derivanti dall'utilizzo di questo software.
Se non sei certo di essere autorizzato a utilizzare Cygor in un determinato ambiente, non eseguirlo.
| Modulo | Servizio | Cosa fa |
|---|
lockon | HTTP/S, RDP, VNC, X11 | Cattura screenshot su più protocolli per un rapido triage visivo. |
webenum | HTTP/S | Scoperta di contenuti multi-strumento in parallelo (ffuf, feroxbuster, gobuster, dirsearch) con deduplicazione/correlazione tra strumenti e screenshot opzionali. |
smbexplorer | SMB (445) | Enumera condivisioni, permessi e file accessibili; NTLM/Kerberos/pass-the-hash. |
nfsexplorer | NFS (2049) | Enumera export, versioni e file; spoofing UID/GID e controlli no_root_squash. |
rpcexplorer | MSRPC (445) | Sessione nulla/autenticata: informazioni sul server, SID di dominio, utenti, gruppi, policy password completa e RID cycling. |
ldapexplorer | LDAP/AD (389/636) | rootDSE, bind/ricerca anonimi e dump del dominio autenticato. |
snmpexplorer | SNMP (161) | Brute force delle community v1/v2c, informazioni di sistema del dispositivo e scansione MIB (utenti/processi/software/porte/interfacce). |
dnsexplorer | DNS (53) | Versione, rilevamento open-resolver e trasferimento di zona AXFR. |
ftpexplorer | FTP (21) | Banner, login anonimo, elenco directory, FEAT, test di scrittura anonima. |
smtpexplorer | SMTP (25/587) | Banner, STARTTLS, meccanismi AUTH, enumerazione utenti VRFY, test open-relay. |
dbprobe | Database | Sonda Redis/MySQL/PostgreSQL/MongoDB/Elasticsearch/CouchDB per accesso non autenticato e versione. |