constelia
is a distributed system for running CTF exploits against multiple targets and submitting flags to a CTFd-compatible API.
It achieves this by being fully modular, with each runner connecting to the primary Scheduler in order to broadcast its own presence and availability, and by receiving and executing Job requests, returning the captured flags.
This allows constelia
to be extremely fast, as each attack is fully decoupled from the rest, resulting in perfect parallelism.
- Scheduler: Generates and dispatches jobs to the runner
- Runner: Executes Python exploits in Docker containers
- Submitter: Deduplicates and submits flags to CTFd
- Common: Shared types and utilities
- Rust 2021 edition
- Docker, on each Runner instance
- Python 3.9+ (for exploits)
cargo build
Define your targets in targets.toml
:
[[targets]]
id = "web1"
host = "web1.ctf.example.com"
port = 80
service = "http"
tags = ["web", "php"]
Place your Python exploits in the exploits/
directory. Each exploit should have a corresponding TOML metadata file:
name = "web_exploit.py"
description = "SQL injection exploit for PHP web challenges"
author = "CTF Team"
tags = ["web", "php", "sql"]
timeout_seconds = 30
cargo run --bin scheduler -- --targets targets.toml --exploits exploits/
cargo run --bin runner
cargo run --bin submitter -- --api-url https://ctf.example.com --api-token your-token
The project uses:
tokio
for async runtimetracing
for structured loggingserde
+toml
for configurationbollard
for Docker integrationreqwest
for HTTP clients
See [LICENSE] for more details.