Dynamic Check Challenges with docker-compose for CTFd
Modify from H1ve/CTFd/plugins/ctfd-owl and CTFd-Whale.
适合的 CTFd 版本: Version 3.4.0.(如果你想使用 V3.4.2+, 请先阅读 使用 V3.4.2+ 版本)
-
每次 launch 容器时端口随机。
-
适配了
teams和users模式. 在teams模式中, 同一个队的用户会使用同一个容器. -
Flag 可以是动态生成的(
dynamic),或者像正常题目一样添加静态的(static).
......
REQUIRES: CTFd >= v3.4.0
如果你之前没有使用过 CTFd(请保证下面的命令都是以 root 权限执行):
# install docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
# replace <workdir> to your workdir
cd <workdir>
git clone https://github.com/CTFd/CTFd.git -b 3.4.0
git clone https://github.com/BIT-NSC/ctfd-owl.git
# replace file in CTFd
mv -f ctfd-owl/* CTFd
mkdir -p /home/docker
# make sure you have pip3 installed on your server
pip3 install docker-compose上面的命令会尝试安装 docker-ce,python3-pip 和 docker-compose。 在执行它们之前,请确保满足以下要求:
- 安装了
curl、git、python3和pip - GitHub 可访问(可尝试国内镜像站或手动通过其他方式下载)
- Docker Registry 是可访问的(可以换源为国内镜像)
如果要使用 nginx,请使用 single-nginx.yml,否则使用 single.yml(nginx的配置请在conf下自行修改)。
请在您要使用的 *.yml 中随机生成 SECRET_KEY、MYSQL_PASSWORD 等敏感信息。
# if you want to use nginx
docker-compose -f CTFd/single-nginx.yml up -d
# or no nginx
docker-compose -f CTFd/single.yml up -d
# wait till the containers are ready然后,您可以访问 localhost 使用 CTFd-owl 去利用 docker-compose 为 CTFd 部署动态容器的题目。
参见图片和表格进行默认配置。
| Options | Content |
|---|---|
| Docker Flag Prefix | Flag前缀 |
| Docker APIs URL | API名称(默认为unix://var/run/docker.sock) |
| Max Container Count | 最大容器数量(默认无限制) |
| Docker Container Timeout | 容器最长运行时间(达到时间后会自动摧毁) |
| Max Renewal Time | 最大容器延长次数(超过次数将无法延长) |
| Options | Content |
|---|---|
| FRP Http Domain Suffix | FRP域名前缀(如开启动态域名转发必填) |
| FRP Direct IP Address | frp服务器IP |
| FRP Direct Minimum Port | 最小端口(保持和docker-compose中frps对外映射的端口段最小一致) |
| FRP Direct Maximum Port | 最大端口(与上同理) |
| FRP config template | frpc 热重载配置头模版(如不会自定义,尽量按照默认配置) |
token 请随机生成,替换掉random_this,并修改frp/conf/frps.ini中的token 与其一致.
[common]
token = random_this
server_addr = frps
server_port = 80
admin_addr = 10.1.0.4
admin_port = 7400详见添加题目 - Wiki.
下图的主题为CTFd-theme-pixo
- CTFd-Whale (Support docker-swarm)



