Challenges
Specification
ctfcli
provides a challenge specification (challenge.yml
) that outlines the major details of a challenge.
Every challenge generated by or processed by ctfcli
should have a challenge.yml
file.
The specification format has already been tested and used with CTFd in production events but comments, suggestions, and PRs are welcome on the format of challenge.yml
.
Working with Challenges
1. Add challenges
Events are made up of challenges. Challenges can be made from a subdirectory or pulled from another repository. Remote challenges are pulled into the event repo and a reference is kept in the .ctf/config
file.
❯ ctf challenge add [REPO | FOLDER]
❯ ctf challenge add crypto/stuff
❯ ctf challenge add https://github.com/challenge.git
challenge
Cloning into 'challenge'...
remote: Enumerating objects: 624, done.
remote: Counting objects: 100% (624/624), done.
remote: Compressing objects: 100% (540/540), done.
remote: Total 624 (delta 109), reused 335 (delta 45), pack-reused 0
Receiving objects: 100% (624/624), 6.49 MiB | 21.31 MiB/s, done.
Resolving deltas: 100% (109/109), done.
2. Install challenges
Installing a challenge will automatically create the challenge in your CTFd instance using the API.
❯ ctf challenge install [challenge.yml | DIRECTORY]
❯ ctf challenge install buffer_overflow
Found buffer_overflow/challenge.yml
Loaded buffer_overflow
Installing buffer_overflow
Success!
3. Update challenges
Syncing a challenge will automatically update the challenge in your CTFd instance using the API. Any changes made in the challenge.yml
file will be reflected in your instance.
❯ ctf challenge sync [challenge.yml | DIRECTORY]
❯ ctf challenge sync buffer_overflow
Found buffer_overflow/challenge.yml
Loaded buffer_overflow
Syncing buffer_overflow
Success!