
An modular asset discovery framework written in python to automate the repeating manual work
Cygor is a modular asset discovery framework that brings scanning, parsing, and service enumeration together in one workflow. It replaces the patchwork of separate tools with an automated process that handles discovery, enrichment, and targeted enumeration seamlessly — reducing manual overhead and letting you focus on results instead of tool management.
Cygor’s Web UI takes the chaos of raw scan data and organizes it into a single, visual command center. Instead of combing through endless XML, JSON, or flat text, results are automatically parsed, enriched, and displayed in one space that’s built for fast triage and decision-making.
Powered by FastAPI and Bootstrap 5, the dashboard makes it easy to:
The Web UI isn’t just for presentation — it’s about efficiency and clarity. By bringing all collected data into a single, interactive workspace, it cuts down the time spent parsing files or reconciling outputs and lets testers focus on what matters: understanding the environment and acting on it.
A lot of tools, techniques, and tradecrafts that I create are inspired from the Spawn Universe. If you have never read a Spawn comic, it's okay as I will share some information as to why I selected the character to be the name of this tool.
The name Cygor draws from Cy-Gor, a tragic anti-hero in the Spawn universe. Once Michael Konieczny — a government operative and close friend of Al Simmons — he tried to expose corruption after Simmons’s murder. However, he was captured and forced into Project Sim, the Simian experiments of Dr. Frederick Willheim, where a gorilla’s body was merged with Konieczny’s mind through invasive cybernetics. The result was the beast known as Cy-Gor — short for Cybernetic Gorilla.
After escaping captivity, Cy-Gor went on violent rampages, even tearing through government data centers in fits of confusion and rage. Though hunted and recaptured multiple times, he eventually fought back against the systems that sought to control him — removing tracking implants and breaking free to forge his own path, torn between machine, beast, and man.
webenum module (only the installed tools run).There are a few methods that are supported to install Cygor: pip, pipx, uv, and docker.
Some dependencies (e.g. gssapi for Kerberos/WinRM) build C extensions, so install the build toolchain and Kerberos headers first:
# 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 .
Cygor's Docker setup includes both the application and a PostgreSQL database service. The system automatically falls back to SQLite if PostgreSQL is unavailable.
Production (recommended):
# 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
Development (with source code mounted):
# 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
The Docker Compose setup includes:
results/: Scan outputs, credrecon results, and database filescygor-config/: Local config volume (created automatically)By default:
5432 (if available)5434 (if available)5432 internally (Docker network)If ports are in use, you can:
Use the wrapper script (recommended - auto-detects available ports):
./docker-compose-up.sh up --build
Set port manually:
export POSTGRES_HOST_PORT=5435
docker compose up --build
Remove port mapping (if you don't need external PostgreSQL access):
Comment out the ports: section in docker-compose.yaml
To build the Docker image manually:
docker build -t cygor .
Run a single container (without PostgreSQL service):
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 is set)Key environment variables for Docker:
Data & Workspace:
CYGOR_RESULTS_DIR: Results directory (default: /opt/cygor/results)CYGOR_WORKSPACE: Workspace directory (default: /opt/cygor/results)CYGOR_RESULTS_PATH: Host path for results volume (default: ./results)CYGOR_CONFIG_PATH: Host path for authentication config volume (default: ./cygor-config)