SolidCTF is an infrastructure solution that simplifies the build of Solidity Capture the Flag (CTF) challenges. It provides the ability to CTF organizers to rapidly set up a playable Solidity CTF environment, freeing them up to concentrate on designing smart contracts for puzzles.
Use the following command to run a quick demo:
docker run -it -p 20000:20000 -e WEB3_PROVIDER_URI=https://rpc.sepolia.org chainflag/solidctf:1.0
nc 127.0.0.1 20000
- Clone the solidity-ctf-template using
git clone git@github.com:chainflag/solidity-ctf-template.git
command to create a new challenge project. - Open the contract directory and code your challenge contract that contains the isSolved() to replace the example contract. For the multi-contract challenges, you can deploy them in a setup contract's constructor.
- Edit the challenge.yml to configure your challenge. See to the comments in this file for more details on how to configure it.
- Place your flag in the file flag.txt file and change the alloc address private key in the .env to your own.
- Run the
docker-compose pull && docker-compose up -d
command to start serving your challenge.
Before you start, make sure you have the following installed:
- Docker
- Python3
- Required packages (
pip install -r requirements.txt
)
- Clone the repository
git clone git@github.com:chainflag/solidctf.git
git submodule update --init --recursive
- Generate protobuf code and run server
make protoc
export WEB3_PROVIDER_URI="your web3 provider"
make dev
To format the Python source code, you will need to install additional packages (pip install -r requirements-dev.txt
) and run the following command:
make format
Many thanks to JetBrains for providing their excellent tools and an open source license to support the development of this project.
Distributed under the MIT License. See LICENSE for more information.