FAQ
Basic info
This platform was made to provide fun challenges for you to get familiar with different fields of cybersecurity. The following page will provide you with some basic information on how to get started with the challenges. For startes here are some basic information about the different challenge types:
Cryptography challenges give you a cryptosystem that encrypts/encodes/signs messages and some ciphertext generated by the challenge. You must find some issues with the cryptosystem and somehow recover the plaintext from the ciphertext. These are mostly mathematical challenges that you might start solving with a pen and paper before you start writing code.
Web challenges give you a website and test your skills in knowing standard web technologies and vulnerabilities.
You often get the whole website source code and are expected to find issues that can be exploited.
Most of these challenges can be solved with a web browser and some terminal tools like curl.
Reverse engineering challenges give you a compiled binary and test your skills to recover and understand the original source.
With that knowledge you can code a solution to get through this often algorithmic challenge.
You can start by using a disassembler like ghidra.
Pwn challenges expand on reverse engineering challenges and expect you also find vulnerabilities in the reverse engineered code.
Then exploit these vulnerabilities to convince the program to run something it's not meant to do.
Most of these challenges are considered among the hardest and you can begin by using a debugger like gdb and an exploitation framework like pwntools.
Docker
Docker is used to create a consistent environment of the challenges on your end as well as on the instancer. Linux users can look up the docker engine installation for their distribution. Windows and Mac users can install Docker Desktop.
Each challenge will come with a Dockerfile. To build and run the image, you need to run the following commands in the terminal:
docker build -t <image_name> .
docker run -ti --rm -p <host_port>:<container_port> <image_name>
Replace the <image_name> with whatever name you want, and the <host_port> and <container_port> with the needed port (usually 8000 for web and 1337 for pwn challenges).
Pwntools usage and sample
Pwntools is an exploitation framework for pwn challenges. Debian (and most Debian based distributions) users can install it with the following command:
apt install python3-pwntools
Otherwise you can install it with pip:
pip install pwntools
You will need a python environment for this command to work, otherwise you can also run it with --break-system-packages.
To test the install you can run the following code in a python file:
from pwn import *
Below is a sample pwntools script that shows how to run a local process, a debugger, a remote connection and a remote connection to the instancer:
from pwn import *
# Use one of the following at a time
p = process('./challenge') # Local challenge
p = gdb.debug('./challenge', gdbscript='''
b *main
''') # Local challenge with debugger
p = remote('localhost', 1337) # Docker challenge
p = remote('inst-xxxxxxxxxx.tls.vuln.si', 443, ssl=True) # Remote challenge on the instancer
# Exploit goes here
p.interactive()
Netcat
Netcat is used to connect to remote instances. Linux users can install it with the following command:
apt install netcat-openbsd
Mac users can install it with Homebrew:
brew install netcat
Windows users can install the nmap version of netcat.
Connecting to instances
Click on the Instancer on the top left corner and select a challenge to run. Alternatively you can start it with the button when you open a challenge.
If the challenge is a web challenge you can copy the url by clickin on the clipboard icon or the url.
If the challenge is a pwn challenge you can copy the connection details by clicking on the clipboard icon or the url.
The connection string uses nmap's ncat by default, but you can also connect to it via the remote function of pwntools or with openssl:
openssl s_client -connect inst-xxxxxxxxxx.tls.vuln.si:443
GDB & Pwndbg
To debug the challenges you need to install gdb and pwndbg. Debian (and most Debian based distributions) users can install gdb with the following command:
apt install gdb
The prefered way of running pwndbg is by cloning and installing it from source. To do that run the following commands:
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
Verify the installation by running gdb and you should see a pwndbg> prompt.
ropr
rop is a tool used to find ROP gadgets in the binary. You can install it with cargo:
cargo install rop
By default it gets installed in ~/.cargo/bin/ropr, so make sure to add that folder to your PATH.