forked from ChristopherMorrison/ctf-tool
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
02bbcb1
commit 77d6ca8
Showing
9 changed files
with
145 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# CTF-TOOL | ||
A tool for building modular CTFs with minimum effort. | ||
|
||
|
||
# Concepts | ||
## Challenges: | ||
| Challenges Type | Definition | | ||
| ------------------ | ---------- | | ||
| Standard | Standard challenges present the player with a question and optionally a set of files. The player is expected to input a flag to solve the problem. | ||
| Service-Required | Service-required challenges are similar to standard challenges but require a service to be running that the player can connect to (typically via netcat). | ||
| Machine-Required | Machine-required challenges are similar to both standard and service-required problems but instead require a dedicated machine to be presented to the players. This type is planned for future and not currently supported. | ||
| Container-required | Same as Machine-required but use containers instead of machines. Also planned for future and not currently supported. | ||
|
||
## Challenge Packs: | ||
ctf-tool's design revolves around the concept of challenge packs which are in essence directories with the subdirectories that represent individual challenges. The reasoning of using challenge packs as a building block is that it allows problems to be neatly sorted, reused, and even allows the CTF builder to adjust the difficulty for the audience's proficiecy level. The actual content and structure of challenge packs is unfortunately still volatile as ctf-tool is developed into version 1. | ||
|
||
## Flags: | ||
For the sake of simplicity, ctf-tool only currently supports a single static flag per problem. CTFd supports multiple flags and regex flags which is a planned feature for ctf-tool's future. Additionally, static flag randomization and per-player flags are planned for the future. | ||
|
||
## CTF Host / Challenge Host: | ||
The CTF Host is the machine that the players will be directed to in order to submit flags for points. In the current version, ctf-tool expects the CTF host to be an instance of CTFd, but in future versions, FBCTD support is planned. | ||
|
||
The Challenge Host is the machine that ctf-tool expects to install services on for players to be able to connect to. This is the machine that the tool is expected to be run on. | ||
|
||
ctf-tool considers the challenge host and the ctf host to be two seperate machines, although this is not inforced in any way and using one machine for both should be perfectly fine. | ||
|
||
# Supported Systems | ||
*Linux:* Currently, only Ubuntu 18.04 is considered stable, although other debian-based distros should work. Really any host all the dependency packages installed should work. | ||
|
||
*Windows:* No offical support currently | ||
|
||
*Mac:* No offical support currently | ||
|
||
## Setup for ubuntu 18.04 machines | ||
1. Clone this repo | ||
2. Install docker-ce | ||
3. sudo scripts/install_required_packages.sh | ||
4. run the tool with the --install flag unless you don't need services for challenges | ||
|
||
# Tool instructions | ||
## ctf-tool.py | ||
Builds a CTFd config from a problem set and optionally installs the problem set onto the local machine for socat connections. Meant to be a plug and play clone of the capability seen at Battelle/Hack Ohio 2017 CTF wiht major extentions. | ||
|
||
# Development Roadmap | ||
## Features | ||
* add the challenge host setup script (default behaviour) | ||
* Add prereq challenges ability | ||
* some kind of more interactive way to setup | ||
* FBCTF output format | ||
* checkout some vulnerable vm generators and vulnhub for a self-randomizing event every time | ||
* [x] Need to support flags that are hardcoded in challenges (different flag value for running server than in distributed zip) | ||
|
||
## Challenge packs/integrations | ||
* OTW challenges | ||
* Various vulnhub challenges | ||
* Battelle.org/cyber-challenge - This is a good med/hard/hard pack | ||
* Advent of Code clone? | ||
* Google CTF beginners ctf | ||
* Lock pick challenge? | ||
* Juice Shop | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
# -*- mode: ruby -*- | ||
# vi: set ft=ruby : | ||
|
||
# All Vagrant configuration is done below. The "2" in Vagrant.configure | ||
# configures the configuration version (we support older styles for | ||
# backwards compatibility). Please don't change it unless you know what | ||
# you're doing. | ||
Vagrant.configure("2") do |config| | ||
# The most common configuration options are documented and commented below. | ||
# For a complete reference, please see the online documentation at | ||
# https://docs.vagrantup.com. | ||
|
||
# Every Vagrant development environment requires a box. You can search for | ||
# boxes at https://vagrantcloud.com/search. | ||
config.vm.box = "ubuntu/bionic64" | ||
|
||
# Disable automatic box update checking. If you disable this, then | ||
# boxes will only be checked for updates when the user runs | ||
# `vagrant box outdated`. This is not recommended. | ||
# config.vm.box_check_update = false | ||
|
||
# Create a forwarded port mapping which allows access to a specific port | ||
# within the machine from a port on the host machine. In the example below, | ||
# accessing "localhost:8080" will access port 80 on the guest machine. | ||
# config.vm.network "forwarded_port", guest: 80, host: 8080 | ||
|
||
# Create a private network, which allows host-only access to the machine | ||
# using a specific IP. | ||
# config.vm.network "private_network", ip: "192.168.33.10" | ||
|
||
# Create a public network, which generally matched to bridged network. | ||
# Bridged networks make the machine appear as another physical device on | ||
# your network. | ||
# config.vm.network "public_network" | ||
|
||
# Share an additional folder to the guest VM. The first argument is | ||
# the path on the host to the actual folder. The second argument is | ||
# the path on the guest to mount the folder. And the optional third | ||
# argument is a set of non-required options. | ||
# config.vm.synced_folder "../data", "/vagrant_data" | ||
|
||
# Provider-specific configuration so you can fine-tune various | ||
# backing providers for Vagrant. These expose provider-specific options. | ||
# Example for VirtualBox: | ||
# | ||
# config.vm.provider "virtualbox" do |vb| | ||
# # Display the VirtualBox GUI when booting the machine | ||
# vb.gui = true | ||
# | ||
# # Customize the amount of memory on the VM: | ||
# vb.memory = "1024" | ||
# end | ||
# | ||
# View the documentation for the provider you are using for more | ||
# information on available options. | ||
|
||
# Enable provisioning with a shell script. Additional provisioners such as | ||
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the | ||
# documentation for more information about their specific syntax and use. | ||
# config.vm.provision "shell", inline: <<-SHELL | ||
# apt-get update | ||
# apt-get install -y apache2 | ||
# SHELL | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,3 @@ | ||
my docker ctfd image id is 319a1904748e, it seems like one of the ones pushed leading up to the rev uc broke | ||
1. my docker ctfd image id is 319a1904748e, it seems like one of the ones pushed leading up to the rev uc broke | ||
2. zip testo.zip -X -r db/ uploads/*/* , for some reason ctfd does not like empty dirs being added to the zip file | ||
|
This file was deleted.
Oops, something went wrong.
File renamed without changes.