There are three basic challenge structure types:
static-attachment: This challenge type is static and provides the player only the./distfolder as a ZIP file.static-attachment-with-compose: This type provides the./distfolder as a ZIP file and grants the player access to a Docker Compose instance.static-container: This type provides the./distfolder as a ZIP file and deploys a single container instance per team.
Choose the appropriate type based on your requirements.
Each challenge should include four basic folders/files:
-
./dist:- This folder is the attachment provided to players.
- Remove flags from this folder before distribution, as players will receive it.
- If no attachment is needed, delete the line
provide: "./dist"fromchallenge.yml.
-
./solver:- A folder for your challenge's solver script or a simplified explanation (TL;DR) of the solution.
-
./src:- The source code for your challenge.
- If using Docker Compose, randomize open ports using a tool like the CyberChef Random Port Generator.
-
challenge.yml:- The challenge configuration file. Update the following fields:
name: Your challenge's name.author: Your Discord username.description: A brief description. If the challenge requires a connection, specify it here (e.g.,nc {{ .host }} 8888orhttp://{{ .host }}/).flags: The flag(s) for the challenge. Multiple flag formats are allowed.
- The challenge configuration file. Update the following fields: