Skip to main content

Tool for building CTFs

Project description

🚩 CTF Builder

A tool to build, test, and deploy CTFs.

📥 Installation

📦 Requirements

✋ Manual Installation

The package is not yet part of the package manager. The repository has to be manually installed.

git clone https://github.com/alexandre-lavoie/ctf-builder

The repository can be built/installed system wide.

pip install .

The repository can also be built/installed in a venv.

python -m venv .venv
source .venv/bin/activate
pip install .

⚙️ Usage

All tools are available through the ctf executable. Documentation can found in the help menu.

ctf -h

Note: use the environment variable CTF=/path/to/ctf if the command is not being run inside a CTF package.

Have a look at the sample CTF for the structure of a CTF package.

🎨 Schema

ctf schema

Provides the JSON schema for challenge.json. This is automatically generated from schema.py.

🔨 Build

ctf build

Builds challenge static files. This is useful for challenges that requires compiling binaries, making assets, etc. Instead of uploading the artifacts part of the repository they can stay separate.

🧪 Test

ctf test

Checks that solve scripts produce the provided flag. This is useful to validate that the challenge logic.

🌱 Environment Variables

The automatic testing provides the following environment variables to solve scripts.

CHALLENGE_ID - the challenge offset inside 'challenges' array.
CHALLENGE_HOST - deploy only: the challenge host name.
CHALLENGE_PORT - deploy only: the challenge port.

FLAG - the value of the flag to test.
FLAG_TYPE - the type of flag to test (static, regex).

☁️ Deploy

ctf start
ctf stop

Deploys challenges to their containerized environment. This is useful for network-based challenges.

🔌 Ports

Exposed/public ports (through "public": true) DO NOT match the host port. This is to prevent collisions between challenges. Each challenge is allocated 5 public ports. These ports are assigned to challenges alphabetically, so if a has 1-5 then b will 6-10 etc. Integrations will make sure handle this. Ports can also be determined through Docker.

docker container ls

🌐 Multi-deployment

Challenges can be deployed on multiple virtual hosts. This can be used to provide every team their own infrastructure.

Setup Hosts

Determine the IP range and interface for the network.

ip addr

Let's assume this is eth0 and 192.168.0.0/24. New IPs can be added for the number of infrastructures.

sudo ip addr add 192.168.0.2/24 dev eth0
sudo ip addr add 192.168.0.3/24 dev eth0
...

Deploy

The infrastructures can be deployed as follows.

ctf start --network team1 --ip 192.168.0.2 --network team2 --ip 192.168.0.3 ...

The shorthand version can also be used.

ctf start -n team1 -i 192.168.0.2 -n team2 -i 192.168.0.3 ...

🚩 CTFd

ctf ctfd init
ctf ctfd deploy teams
ctf ctfd deploy challenges

CTFd is supported out of the box. This allows to automate deploying challenges.

Usage

Easiest way to get started is to run the Docker container for CTFd.

docker run -p 8000:8000 -it ctfd/ctfd

The CTF can be initialized from the ctfd/setup.json.

ctf ctfd init -p ADMIN_PASSWORD

An access token is needed to make more changes. It should have the ctfd_... format.

http://localhost:8000/settings > Access Tokens > Generate

Teams can be added through ctfd/teams.json. A ctfd/teams.out.json will generated with the teams/users credentials.

ctf ctfd deploy teams -k ctfd_...

Challenges can be deploy as follows.

ctf ctfd deploy challenges -k ctfd_...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ctf_builder-0.0.1.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

ctf_builder-0.0.1-py3-none-any.whl (31.2 kB view details)

Uploaded Python 3

File details

Details for the file ctf_builder-0.0.1.tar.gz.

File metadata

  • Download URL: ctf_builder-0.0.1.tar.gz
  • Upload date:
  • Size: 22.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.1.dev0+g94f810c.d20240510 CPython/3.12.4

File hashes

Hashes for ctf_builder-0.0.1.tar.gz
Algorithm Hash digest
SHA256 e400fff268443e2eafcd07f96dd42747b9f2a424eb413cf3c4dddc9b4856297e
MD5 ced81becf3baac6d365c2c94a1fbecd3
BLAKE2b-256 726250a961db541be82263db0c283f5a673a29b93b88d7ddea79c425e6b437c5

See more details on using hashes here.

File details

Details for the file ctf_builder-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: ctf_builder-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 31.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.1.dev0+g94f810c.d20240510 CPython/3.12.4

File hashes

Hashes for ctf_builder-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d5421a7a2952d697384400acb58a6aa781c24efe174f59bb1f350ba1799f96f7
MD5 ae41853bbcb604cea44f8f4066af0e10
BLAKE2b-256 8618b39c69d533b8942ef8b02b6d08c34d63e74910df1bb6221ceaf8d44c8826

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page