# 前言

一直不想更新博客,最近组织了校内 ctf 内部比赛,之前学长搭建的 CTFd 平台版本有点过时于是打算重新部署一个最新版的,期间遇到了很多问题 同时也十分感谢 VaalaCat 师傅的耐心指点。

现将本人搭建 CTFd 的一点经验分享出来

CTFd Version 3.4.3

# 搭建

我这里参考的是 vaalacat 师傅的博客再次致谢

# 准备环境

  • docker
  • docker-compose

# 配置准备

首先创建一个 swarm

1
docker swarm init

然后加入

1
docker node update --label-add='name=linux-1' $(docker node ls -q)

镜像源可以根据自己网络需要进行更改 /etc/docker/daemon.json

修改后 重启生效

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

# 安装

参考以及使用 VaalaCat 师傅的仓库

# 下载

首先使用 VaalaCat 师傅仓库中的 ctfd ,已经做好了镜像换源等工作。

1
2
PLAINTEXT
git clone https://github.com/VaalaCat/CTFd.git --depth=1

# 配置

1
2
conf/frp/frps.ini # token 保持一致
conf/frp/frpc.ini # token 保持一致

由于我 frps 使用的是 host 网络模式 将原有配置修改

host 模式 frps 端口随容器开起

1
2
3
4
[common]
bind_port = 7000
vhost_http_port = 9123
token = your_token
1
2
3
4
5
6
[common]
token = your_token
server_addr = 172.17.0.1 #此处需要将ip修改为frps 中docker0 网卡的ip
server_port = 7000
admin_addr = 172.1.0.4
admin_port = 7400

image-20220507211154919

docker-compose.yml 修改如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
version: '3'

services:
ctfd:
build: .
user: root
restart: always
ports:
- "8000:8000"#看自己需要修改此处我修改为8000端口访问面板

#省略中间保持不变即可

frps:
image: glzjin/frp
restart: always
volumes:
- ./conf/frp:/conf
entrypoint:
- /usr/local/bin/frps
- -c
- /conf/frps.ini
network_mode: host #此处改为host 下面注释
# ports:
# - 27000-27200:27000-27200 # 映射direct类型题目的端口
# - 9123:9123 # 映射http类型题目的端口
# networks:
# default:
# frp_connect:
# ipv4_address: 172.1.0.3

……
networks:
default:
internal:
internal: true
frp_connect:
driver: overlay
# internal: true 此处注释
attachable: true
#其余均保持不变

然后安装 whale 插件以及启动

1
2
git submodule update --init
docker-compose up -d

启动后访问你设置的端口 进入面板让后在 admin panle 中 whale 修改 frp

名称参数
API URLhttp://frpc:7400
Http Domain Suffix看自己是否有配置需求我直接采用 IP + 端口映射此处保持默认
Direct IP AddressFor服务器的 ip 地址
Direct Minimum Port27000 #最小端口号看自己需求设置
Direct Maximum Port27200
Frpc config template复制上面 frpc 配置即可
Frps config template [generated]复制上面 frps 配置即可

submit 提交

# 题目创建

此处以 WEB 动态容器为例

名称参数
Challenge Typesdynamic_docker
Name:题目名称随意
Category:WEB
Message:题目信息随意
Docker Image选择你本地构建的镜像或者是云端镜像
Frp Redirect TypeDirect
Frp Redirect Port80 #设置你镜像中开发服务的端口
其它默认

image-20220507210859859

随后开起容器即可 不出意外搭建完成

如果出现故障 docker logs xxx 查看具体日志 可以 exec -it 进入容器具体分析

# 美化工作

# 主题推荐

我用的主题是 ctfd-neon-theme

img

还有推荐 CTFd-theme-pixo

img

更多主题 <-<-

# 主题使用教程

1
git clone https://github.com/hmrserver/CTFd-theme-pixo.git ./CTFd/themes/pixo

登录 进入 admin panel -> config -> Theme 修改即可

# 参考

ctfd 使用 ctfd-whale 动态靶机插件搭建靶场指南

校赛 CTFd 平台 docker 搭建 —pixo 主题

CTFd&ctfd-whale 动态靶机搭建与维护