
Ein modulares Asset-Discovery-Framework, geschrieben in Python, um die sich wiederholende manuelle Arbeit zu automatisieren.
Cygor ist ein modulares Asset-Discovery-Framework, das Scannen, Parsen und Service-Enumeration in einem Workflow vereint. Es ersetzt das Flickwerk separater Tools durch einen automatisierten Prozess, der Discovery, Anreicherung und gezielte Enumeration nahtlos handhabt – so wird manueller Aufwand reduziert und Sie können sich auf Ergebnisse statt auf Tool-Verwaltung konzentrieren.
Die Web-Oberfläche von Cygor nimmt das Chaos roher Scandaten und organisiert es in einer einzigen, visuellen Kommandozentrale. Anstatt endlose XML-, JSON- oder Klartextdateien durchzugehen, werden Ergebnisse automatisch geparst, angereichert und in einem Bereich angezeigt, der für schnelle Triage und Entscheidungsfindung ausgelegt ist.
Angetrieben von FastAPI und Bootstrap 5 macht das Dashboard Folgendes einfach:
Die Web-Oberfläche dient nicht nur der Präsentation – sie dient der Effizienz und Klarheit. Indem alle gesammelten Daten in einem einzigen, interaktiven Arbeitsbereich zusammengeführt werden, reduziert sie die Zeit, die für das Parsen von Dateien oder das Abgleichen von Ausgaben aufgewendet wird, und ermöglicht es Testern, sich auf das Wesentliche zu konzentrieren: das Verständnis der Umgebung und das Handeln darin.
Viele Tools, Techniken und Vorgehensweisen, die ich erstelle, sind vom Spawn-Universum inspiriert. Falls du noch nie einen Spawn-Comic gelesen hast, ist das in Ordnung – ich werde einige Informationen dazu geben, warum ich den Charakter als Namen für dieses Tool ausgewählt habe.
Der Name Cygor leitet sich von Cy-Gor ab, einem tragischen Antihelden im Spawn-Universum. Einst war er Michael Konieczny – ein Regierungsagent und enger Freund von Al Simmons –, der versuchte, Korruption aufzudecken, nachdem Simmons ermordet worden war. Er wurde jedoch gefangen genommen und in Project Sim gezwungen, die Affenexperimente von Dr. Frederick Willheim, bei denen ein Gorillakörper mit Koniecznys Geist durch invasive Kybernetik verschmolzen wurde. Das Ergebnis war die Bestie namens Cy-Gor – kurz für Cybernetic Gorilla (Kybernetischer Gorilla).
Nach der Flucht aus der Gefangenschaft begab sich Cy-Gor auf gewalttätige Amokläufe und riss sogar Regierungsrechenzentren in Anfällen von Verwirrung und Wut nieder. Obwohl er mehrfach gejagt und wieder eingefangen wurde, wehrte er sich schließlich gegen die Systeme, die ihn kontrollieren wollten – entfernte Tracking-Implantate und befreite sich, um seinen eigenen Weg zu gehen, zerrissen zwischen Maschine, Bestie und Mensch.
webenum orchestriert (nur die installierten Tools werden ausgeführt).Es gibt mehrere unterstützte Methoden, um Cygor zu installieren: pip, pipx, uv und Docker.
Einige Abhängigkeiten (z. B. gssapi für Kerberos/WinRM) bauen C-Erweiterungen, also installieren Sie zuerst das Build-Toolchain und die Kerberos-Header:
# Debian/Ubuntu/Kali:
sudo apt install -y build-essential python3-dev libkrb5-dev
# Stabile Version:
pipx install cygor
# Installation aus dem Quellcode:
git clone https://github.com/tjnull/cygor
cd cygor
pipx install .
Das Docker-Setup von Cygor umfasst sowohl die Anwendung als auch einen PostgreSQL-Datenbankdienst. Das System fällt automatisch auf SQLite zurück, wenn PostgreSQL nicht verfügbar ist.
Produktion (empfohlen):
# Option 1: Verwenden Sie das Wrapper-Skript (behandelt automatisch Portkonflikte)
./docker-compose-up.sh up --build
# Option 2: Direktes docker compose (verwendet Standard-Ports)
docker compose up --build
Entwicklung (mit eingebundenem Quellcode):
# Option 1: Verwenden Sie das Wrapper-Skript (behandelt automatisch Portkonflikte)
./docker-compose-up.sh dev up --build
# Option 2: Direktes docker compose (verwendet Standard-Ports)
docker compose -f docker-compose-dev.yaml up --build
Das Docker-Compose-Setup umfasst:
results/: Scan-Ergebnisse, credrecon-Ergebnisse und Datenbankdateiencygor-config/: Lokales Konfigurations-Volume (wird automatisch erstellt)Standardmäßig:
5432 freigegeben (falls verfügbar)5434 freigegeben (falls verfügbar)5432 intern (Docker-Netzwerk)Wenn Ports bereits belegt sind, können Sie:
Das Wrapper-Skript verwenden (empfohlen - erkennt automatisch verfügbare Ports):
./docker-compose-up.sh up --build
Den Port manuell setzen:
export POSTGRES_HOST_PORT=5435
docker compose up --build
Port-Mapping entfernen (wenn Sie keinen externen PostgreSQL-Zugriff benötigen):
Kommentieren Sie den Abschnitt ports: in docker-compose.yaml aus
So erstellen Sie das Docker-Image manuell:
docker build -t cygor .
Einen einzelnen Container ausführen (ohne PostgreSQL-Dienst):
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 ist gesetzt)Wichtige Umgebungsvariablen für Docker:
Daten & Arbeitsbereich:
CYGOR_RESULTS_DIR: Ergebnisverzeichnis (Standard: /opt/cygor/results)CYGOR_WORKSPACE: Arbeitsbereichsverzeichnis (Standard: /opt/cygor/results)CYGOR_RESULTS_PATH: Host-Pfad für das Ergebnisse-Volume (Standard: ./results)CYGOR_CONFIG_PATH: Host-Pfad für das Authentifizierungskonfigurations-Volume (Standard: ./cygor-config)Datenbank:
CYGOR_DB_URL: Datenbankverbindungszeichenfolge (wird von docker-compose automatisch gesetzt)CYGOR_DB_USER: PostgreSQL-Datenbankbenutzer (Standard: cygor)CYGOR_DB_PASSWORD: PostgreSQL-DatenbankpasswortPOSTGRES_HOST_PORT: PostgreSQL-Host-Port-Mapping (zur Lösung von Portkonflikten)Debug & Ausführlichkeit:
CYGOR_DEBUG: Debug-Modus aktivieren (auf 1 setzen, um zu aktivieren)CYGOR_VERBOSE: Ausführlichkeitsstufe (0=normal, 1=ausführlich, 2=debug)Ausführliche Anleitungen befinden sich in cygor/wiki/ – Installation, die 11 integrierten Enumerationsmodule, Plugin-Entwicklung, Arbeitsbereichsverwaltung und mehr. GitHub rendert das Verzeichnis als navigierbare Dokumentationsseite (beginnend bei cygor/wiki/README.md). Dieselben Seiten werden auch von der Web-Oberfläche unter /docs bereitgestellt, sobald Sie cygor web start ausführen.
Verwenden Sie den übergeordneten Cygor-Befehl, um auf die verfügbaren Tools zuzugreifen. Jeder Unterbefehl hat seinen eigenen Hilfebildschirm (cygor <command> --help), der Flags und Aktionen dokumentiert.
tjnull@kali:~$ cygor
Usage:
cygor <command> [args]
Commands:
banner Cygor-Tool-Banner (Warnung: es ist groß!)
scan Automatisierter Scanner zum Entdecken von Hosts und Diensten. (Erfordert Root-/Sudo-Rechte zum Scannen).
parse Analysiert eine NMAP-Scan-Datei (nmap, gnmap, xml) und extrahiert kategorisierte Host-Listen nach häufigen Diensten.
enum Lädt Enumerationsmodule, die sich im cygor-Modulverzeichnis befinden.
workspace Verwaltet Arbeitsbereiche (init/set-default/show).
web Steuert/startet die Cygor-Web-Oberfläche (start/stop/status) oder führt sie direkt aus.
Environment:
CYGOR_WORKSPACE Überschreibt den Standard-Arbeitsbereich nur für diesen Durchlauf.
CYGOR_RESULTS_DIR Wird von web und Modulen verwendet, falls gesetzt. (Wird automatisch vom Standard-Arbeitsbereich übernommen.)
Sie benötigen sudo (root)-Rechte, um den Scanner in cygor auszuführen:
Host-Discovery nur mit Masscan durchführen:
cygor scan -i eth0 -f scope.txt --discover masscan
Host-Discovery mit Masscan und Naabu durchführen, dann Nmap auf die zusammengeführten Ergebnisse anwenden:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --nmap-source merge
Nur Discovery (kein Nmap), Ergebnisse in results/discovery/ speichern:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --discover-only
Gespeicherte Discovery-Ergebnisse für Nmap-Top-Ports-Scan wiederverwenden:
cygor scan --use-discovery results/discovery/merged-discovered.txt --scan-type top-ports
Nmap mit benutzerdefinierten Ports auf entdeckten Hosts ausführen:
cygor scan --use-discovery results/discovery/masscan-discovered.txt --ports 80,443,8443
Nmap mit 10 parallelen Prozessen auf vollem Umfang ausführen (Max. 100):
cygor scan -i eth0 -f scope.txt --discover naabu --processes 10 --scan-type fullscan:
Cygor ausführen, um Hosts zu entdecken und sie mit Nmap zu scannen, indem eine bereitgestellte Liste von IP-Adressen oder CDRs verwendet wird:
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
Bestimmte Subnetze oder Hosts vom Scan ausschließen:
cygor scan -i eth0 -f scope.txt --exclusions exclusions.txt --discover masscan
Ein Verzeichnis mit Nmap-Ergebnissen parsen und Host-Listen ausgeben:
cygor parse results/nmap
Eine einzelne XML-Datei parsen und Host-Listen in results/parsed-hostlists schreiben:
cygor parse results/nmap/scan1.xml -o results
Rekursiv .xml/.nmap/.gnmap-Dateien parsen und Ausgaben schreiben:
cygor parse /path/to/scans --out-dir results
Cygor enthält eine wachsende Sammlung protokollspezifischer Enumerationsmodule. Jedes kapselt bewährte Tools, parst die Ausgabe in typisierte Zeilen ("parse-don't-dump") und landet die Ergebnisse im Inventar (DB + Web-Oberfläche), wo sie durchsuchbar und nach Host korrelierbar sind. Beobachtungen mit hohem Signalwert werden automatisch auch in die Next-Steps-Engine eingespeist, die priorisierte Erkenntnisse und sofort ausführbare Folge-Befehle in der Web-Oberfläche anzeigt.
Alle verfügbaren Module auflisten:
cygor enum --list
Lockon gegen eine http-Hostliste ausführen:
cygor enum lockon web -f results/parsed-hostlists/http/http-hostlist.txt -o results/enum/lockon
Web-Content-Discovery durchführen (Multi-Tool, mit Screenshots):
cygor enum webenum -f results/parsed-hostlists/http-https/http-https-hostlist.txt --screenshot
nfsexplorer gegen NFS-Ziele ausführen (nur Exporte):
cygor enum nfsexplorer -i results/parsed-hostlists/nfs/nfs-hostlist.txt --info
smbexplorer ausführen und Dateien auflisten:
cygor enum smbexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --list-files
MSRPC (Null-Session) mit Kennwortrichtlinie + RID-Cycling enumerieren:
cygor enum rpcexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --rid-cycle
Datenbanken auf nicht authentifizierten Zugriff prüfen (auf eine beliebige DB-Dienst-Hostliste zeigen):
cygor enum dbprobe -i results/parsed-hostlists/mysql/mysql-hostlist.txt
Führen Sie cygor enum <module> --help für die vollständige modulspezifische Optionen-Referenz aus.
Cygor ist erweiterbar – legen Sie eine Python-Datei in ~/.cygor/plugins/ ab, und sie erscheint unter cygor enum --list (und in der Web-Oberfläche) wie jedes eingebaute Modul. Wickeln Sie Ihre eigenen Tools ein, verteilen Sie interne Scanner in Ihrem Team oder erweitern Sie Cygor für ein bestimmtes Engagement, ohne es zu forken.
Ein neues Plugin erstellen (schreibt ~/.cygor/plugins/my_scanner.py):
cygor plugin create "My Scanner"
Ein Plugin aus einer lokalen Datei oder einer Git-URL installieren:
cygor plugin install ./my_scanner.py
cygor plugin install https://github.com/example/cygor-myscanner
Validieren, auflisten, aktualisieren, entfernen:
cygor plugin validate ./my_scanner.py
cygor plugin list
cygor plugin update --all
cygor plugin remove my_scanner
Ein installiertes Plugin ausführen (wie ein eingebautes Modul):
cygor enum my_scanner -t 10.10.10.5
Drei Referenz-Plugins befinden sich unter docs/examples/modules/: ein Minimalbeispiel, ein Wrapper für externe Tools und eine vollständig kommentierte Vorlage. Siehe die Plugin-Entwicklungsanleitung für das vollständige Plugin-Format, Optionen/Spalten/Ansichten, Abhängigkeitsverwaltung, Versionskompatibilität und die optionale Plugin-Zulassungsliste.
Nach dem Sammeln von Daten können Sie diese in die Web-Oberfläche von Cygor laden, um Scanergebnisse in eine klare Visualisierung von Hosts, Diensten und anderen wichtigen Erkenntnissen zu verwandeln. Cygor erstellt eine Datei namens cygor.db, die die notwendigen Daten enthält, um in Cygors Web-Oberfläche modelliert zu werden.
# Einfache Nutzung – auf Standard-Host/Port starten (127.0.0.1:8000)
cygor web start
# Auf allen Schnittstellen, Port 8080 starten
cygor web start -H 0.0.0.0 -p 8080
# Mit benutzerdefiniertem Ergebnisverzeichnis starten
cygor web start --load-dir /path/to/results
# Mit ausführlicher Ausgabe starten
cygor web start -vv
# Mit allen Optionen starten
cygor web start -H 0.0.0.0 -p 8080 --load-dir ~/scan-results -vv
Führen Sie cygor web start --help für die vollständige Liste der Optionen aus.
# Prüfen, ob der Webserver läuft
cygor web status
# Einen laufenden Webserver stoppen
cygor web stop
Cygor erkennt automatisch PostgreSQL und verwendet es, falls verfügbar, andernfalls wird auf SQLite zurückgegriffen:
PostgreSQL (empfohlen für die Produktion):
psql verfügbar istpostgresql+psycopg_async://user:pass@host/dbSQLite (Standard-Fallback):
cygor.db im ErgebnisverzeichnisCygor ist ein Framework für Sicherheitsforschung und Bildung. Es ist nur für den Einsatz in Umgebungen bestimmt, in denen Sie eine ausdrückliche, schriftliche Genehmigung haben – wie Penetrationstest-Engagements, Red-Team-Operationen, Laborumgebungen oder persönliche Testumgebungen.
Diese Software darf nicht für unbefugten Zugriff, Eindringen oder Störung von Systemen verwendet werden, die Sie nicht besitzen oder kontrollieren. Ein solches Verhalten kann gegen Gesetze und Vorschriften in Ihrem Land verstoßen und zu strafrechtlicher Verfolgung oder zivilrechtlichen Strafen führen.
Durch das Herunterladen, Ausführen oder Modifizieren von Cygor stimmen Sie zu, dass:
Die Autoren und Mitwirkenden von Cygor übernehmen keine Haftung für Missbrauch, Schäden oder Folgen, die sich aus der Nutzung dieser Software ergeben.
Wenn Sie sich nicht sicher sind, ob Sie berechtigt sind, Cygor in einer bestimmten Umgebung zu verwenden, führen Sie es nicht aus.
| Modul | Dienst | Funktion |
|---|
lockon | HTTP/S, RDP, VNC, X11 | Erfasst Screenshots über mehrere Protokolle hinweg für schnelle visuelle Triage. |
webenum | HTTP/S | Parallele Multi-Tool-Content-Discovery (ffuf, feroxbuster, gobuster, dirsearch) mit toolübergreifender Deduplizierung/Korrelation und optionalen Screenshots. |
smbexplorer | SMB (445) | Listet Freigaben, Berechtigungen und zugängliche Dateien auf; NTLM/Kerberos/pass-the-hash. |
nfsexplorer | NFS (2049) | Listet Exporte, Versionen und Dateien auf; UID/GID-Spoofing und no_root_squash-Prüfungen. |
rpcexplorer | MSRPC (445) | Null-/Auth-Session: Serverinfo, Domänen-SID, Benutzer, Gruppen, vollständige Kennwortrichtlinie und RID-Cycling. |
ldapexplorer | LDAP/AD (389/636) | rootDSE, anonymer Bind/Search und authentifizierter Domain-Dump. |
snmpexplorer | SNMP (161) | v1/v2c-Community-Brute-Force, Gerätesysteminfo und ein MIB-Sweep (Benutzer/Prozesse/Software/Ports/Schnittstellen). |
dnsexplorer | DNS (53) | Version, Open-Resolver-Erkennung und AXFR-Zonentransfer. |
ftpexplorer | FTP (21) | Banner, anonymer Login, Verzeichnislisting, FEAT, anonymer Schreibtest. |
smtpexplorer | SMTP (25/587) | Banner, STARTTLS, AUTH-Mechanismen, VRFY-Benutzer-Enumeration, Open-Relay-Test. |
dbprobe | Datenbanken | Testet Redis/MySQL/PostgreSQL/MongoDB/Elasticsearch/CouchDB auf nicht authentifizierten Zugriff und Version. |