GZCTF搭建记录
# GZCTF搭建记录
本地搭建一个GZCTF平台(docker)
1c2g ubuntu server22.04搭建GZCTF后,没有运行web容器时,占用550m左右
以下操作均在本地虚拟机
这篇文章包含以下内容:
- 换源
- 安装docker,docker-compose
- docker配置镜像加速
- 配置编译GZCTF
悦读官方文档一定是最好的选择:【快速上手】 (opens new window)
GZCTF官网:GZCTF 通过 Docker 镜像的方式提供,你可以通过 docker-compose 的方式快速部署一个功能完善的 CTF 平台。请注意,这并不是唯一的部署方式,我们更推荐使用 Kubernetes 的方式部署
所以如果docker可用,可以拉取镜像快速搭建一个GZCTF平台
# 换源
在一个新的ubuntu系统时,更换到阿里源加快下载
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 备份原有源
sudo rm /etc/apt/sources.list # 删除原有源
sudo vim /etc/apt/sources.list # 创建
2
3
粘贴以下内容,保存退出
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ jammy universe
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates universe
deb http://mirrors.aliyun.com/ubuntu/ jammy multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ jammy-security universe
deb http://mirrors.aliyun.com/ubuntu/ jammy-security multiverse
2
3
4
5
6
7
8
9
10
更新软件列表
sudo apt update
# 安装docker docker-compose
使用腾讯云镜像源,安装docker
添加 Docker 软件源
sudo apt-get update
sudo apt-get install ca-certificates curl -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/ \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2
3
4
5
6
7
8
安装docker
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io docker-buildx-plugin docker-compose-plugin -y
验证是否安装成功
docker -v
docker-compose -v
docker compose version
2
3
启动docker
sudo systemctl start docker
sudo systemctl enable docker
2
添加当前用户到docker组
sudo usermod -aG docker $USER
newgrp docker
2
# 配置docker镜像加速
添加 Docker 镜像加速
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
2
粘贴以下内容
{
"registry-mirrors": ["https://docker.the0n3.top"]
}
2
3
保存退出,重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
2
现在回归主题:搭建一个GZCTF平台
在根目录/
或/home
方便找到的目录都可以,那就根目录了
cd /
sudo mkdir GZCTF
cd GZCTF
2
3
# 搭建GZCTF
根据官方文档要求做
警告
为了后续的配置,请准备好如下的初始化参数:
GZCTF_ADMIN_PASSWORD
:初始管理员密码,在数据库未初始化时生效,需要在第一次启动时进行设置,配置在compose.yml
中。POSTGRES_PASSWORD
: 数据库密码,需要配置在compose.yml
中及appsettings.json
中。XOR_KEY
: 用于加密比赛私钥的随机字符串,需要配置在appsettings.json
中。PUBLIC_ENTRY
: 外部访问地址,可以是 IP 或域名,需要配置在appsettings.json
中,用于提供给选手访问题目容器的地址。
这里我准备了以下参数
GZCTF_ADMIN_PASSWORD: Admin123..(GZCTF管理员密码)
POSTGRES_PASSWORD: gzctf123.. (数据库密码)
XOR_KEY: thisXorKey (加密比赛的随机字符串)
PUBLIC_ENTRY: 192.168.237.140 (虚拟机ip)
2
3
4
手动替换到具体位置
创建appsettings.json
文件,写入内容,注意手动把准备的参数替换进去,这里我已经把我准备的替换进去了
sudo vim appsettings.json
警告
注意手动修改入口ip PublicEntry参数
文件内容
{
"AllowedHosts": "*",
"ConnectionStrings": {
"Database": "Host=db:5432;Database=gzctf;Username=postgres;Password=gzctf123.." // database password
},
"EmailConfig": {
"SenderAddress": "",
"SenderName": "",
"UserName": "",
"Password": "",
"Smtp": {
"Host": "localhost",
"Port": 587
}
},
"XorKey": "thisXorKey", // XOR key
"ContainerProvider": {
"Type": "Docker", // or "Kubernetes"
"PortMappingType": "Default", // or "PlatformProxy"
"EnableTrafficCapture": false,
"PublicEntry": "192.168.237.140", // or "xxx.xxx.xxx.xxx" PublicEntry
// optional
"DockerConfig": {
"SwarmMode": false,
"Uri": "unix:///var/run/docker.sock"
}
},
"RequestLogging": false,
"DisableRateLimit": true,
"RegistryConfig": {
"UserName": "",
"Password": "",
"ServerAddress": ""
},
"CaptchaConfig": {
"Provider": "None", // or "CloudflareTurnstile" or "GoogleRecaptcha"
"SiteKey": "<Your SITE_KEY>",
"SecretKey": "<Your SECRET_KEY>",
// optional
"GoogleRecaptcha": {
"VerifyAPIAddress": "https://www.recaptcha.net/recaptcha/api/siteverify",
"RecaptchaThreshold": "0.5"
}
},
"ForwardedOptions": {
"ForwardedHeaders": 7,
"ForwardLimit": 1,
"TrustedNetworks": ["192.168.12.0/8"]
}
}
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
41
42
43
44
45
46
47
48
49
50
创建compose.yml
文件,写入内容,注意手动把准备的参数替换进去,这里我已经把我准备的替换进去了
sudo vim compose.yml
文件内容
services:
gzctf:
image: registry.cn-shanghai.aliyuncs.com/gztime/gzctf:develop
restart: always
environment:
- "GZCTF_ADMIN_PASSWORD=Admin123.." # GZCTF admin password
# choose your backend language `en_US` / `zh_CN` / `ja_JP`
- "LC_ALL=zh_CN.UTF-8"
ports:
- "80:8080"
volumes:
- "./data/files:/app/files"
- "./appsettings.json:/app/appsettings.json:ro"
# - "./kube-config.yaml:/app/kube-config.yaml:ro" # this is required for k8s deployment
- "/var/run/docker.sock:/var/run/docker.sock" # this is required for docker deployment
depends_on:
- db
db:
image: postgres:alpine
restart: always
environment:
- "POSTGRES_PASSWORD=gzctf123.." # database password
volumes:
- "./data/db:/var/lib/postgresql/data"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
在使用docker compose up -d
时报错了
提示
现在docker-compose、docker compose都安装了,应该都能正常使用(补充)
我们在开始时安装的是docker-compose
所以执行下面命令
docker-compose -f compose.yml up -d
访问http://192.168.237.140
,可以看到已经搭建成功
登录前面的管理员账号可以创建比赛,发布题目等等
安装neofetch
(毫不相干)
sudo apt install neofetch -y
neofetch
2
第一次以管理员身份进入GZCTF,好陌生,仔细探索可以找到很多细节的功能。这个平台真的很不错,感谢GZCTF开发。
Ciallo ~(∠・ω< )⌒★ Ciallo ~(∠・ω< )⌒★ Ciallo ~(∠・ω< )⌒★
参考、致谢: