Skip to content

BIT-NSC/CTFd-owl

Repository files navigation

CTFd-owl

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+ 版本)

Features

  1. 每次 launch 容器时端口随机。

  2. 适配了 teamsusers 模式. 在 teams 模式中, 同一个队的用户会使用同一个容器.

  3. Flag 可以是动态生成的(dynamic),或者像正常题目一样添加静态的(static).

......

Installation

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-cepython3-pipdocker-compose。 在执行它们之前,请确保满足以下要求:

  • 安装了 curlgitpython3pip
  • GitHub 可访问(可尝试国内镜像站或手动通过其他方式下载)
  • Docker Registry 是可访问的(可以换源为国内镜像)

如果要使用 nginx,请使用 single-nginx.yml,否则使用 single.yml(nginx的配置请在conf下自行修改)。

请在您要使用的 *.yml 中随机生成 SECRET_KEYMYSQL_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 部署动态容器的题目。

How to Use

Configuration

参见图片和表格进行默认配置。

Docker Settings

Docker Settings

Options Content
Docker Flag Prefix Flag前缀
Docker APIs URL API名称(默认为unix://var/run/docker.sock
Max Container Count 最大容器数量(默认无限制)
Docker Container Timeout 容器最长运行时间(达到时间后会自动摧毁)
Max Renewal Time 最大容器延长次数(超过次数将无法延长)

FRP Settings

FRP Settings

Options Content
FRP Http Domain Suffix FRP域名前缀(如开启动态域名转发必填)
FRP Direct IP Address frp服务器IP
FRP Direct Minimum Port 最小端口(保持和docker-composefrps对外映射的端口段最小一致)
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

Add Challenge

详见添加题目 - Wiki.

Demo

下图的主题为CTFd-theme-pixo

challenges.png

containers

Twins