SolidCTF
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.
Getting Started
Quick Demo
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
Usage
- Clone the solidity-ctf-template using
git clone [email protected]: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.
Development
Prerequisites
Before you start, make sure you have the following installed:
- Docker
- Python3
- Required packages (
pip install -r requirements.txt
)
Run in development mode
- Clone the repository
git clone [email protected]: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
Format python source
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
Acknowledgements
Many thanks to JetBrains for providing their excellent tools and an open source license to support the development of this project.
License
Distributed under the MIT License. See LICENSE for more information.