GZCTF-QUICK-DEPLOY

一键化GZCTF部署脚本,如有帮助,还望各位大佬不吝点个star✨:https://github.com/Cyr1s-dev/GZCTF-QUICK-DEPLOY

Docker

更新软件包索引:

1
2
sudo apt-get update
sudo apt-get upgrade

安装 Docker

1
sudo apt install docker.io docker-compose

Vim

1
sudo apt install vim

GZCTF

配置

创建文件夹:

1
2
mkdir GZCTF
cd GZCTF

创建配置文件:

1
2
sudo touch appsettings.json
sudo touch docker-compose.yml

将以下内容保存为 appsettings.json 文件,并替换为你的初始化参数,具体配置说明请参考 appsettings.json 配置

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
41
42
43
44
45
46
47
48
49
{
"AllowedHosts": "*",
"ConnectionStrings": {
"Database": "Host=db:5432;Database=gzctf;Username=postgres;Password=Admin123" // 修改密码
},
"EmailConfig": {
"SendMailAddress": "a@a.com",
"UserName": "",
"Password": "",
"Smtp": {
"Host": "localhost",
"Port": 587
}
},
"XorKey": "123456",
"ContainerProvider": {
"Type": "Docker", // or "Kubernetes"
"PortMappingType": "Default", // or "PlatformProxy"
"EnableTrafficCapture": false,
"PublicEntry": "66.42.51.155", // or "xxx.xxx.xxx.xxx"
// 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": 5,
"ForwardLimit": 1,
"TrustedNetworks": ["192.168.12.0/8"]
}
}

这个文件中必须修改的参数如下:

POSTGRES_PASSWORD: 数据库密码

XOR_KEY: 用于加密比赛私钥的随机字符串

PUBLIC_ENTRY: 外部访问地址,可以是 IP 或域名

TrustedNetworks:修改成自己的对应ip,防止网段冲突问题

然后编辑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
version: "3.0"
services:
gzctf:
image: gztime/gzctf:latest
restart: always
environment:
# 修改密码
- "GZCTF_ADMIN_PASSWORD=Admin123"
# 切换语言 `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=Admin123"
volumes:
- "./data/db:/var/lib/postgresql/data"

这个文件中必须修改的参数如下:

GZCTF_ADMIN_PASSWORD:初始管理员密码,在数据库未初始化时生效,需要在第一次启动时进行设置

POSTGRES_PASSWORD: 数据库密码

部署&关闭

1
2
3
4
部署:
sudo docker-compose up -d
关闭:
sudo docker-compose down

数据库用户管理

  1. 安装 PostgreSQL 客户端
1
sudo apt install postgresql-client
  1. 查看正在运行的容器
1
docker ps
  1. 查看 PostgreSQL 容器的 IP 地址: 使用以下命令获取 PostgreSQL 容器(root_db_1)的 IP 地址:

(查看到 postgres:alpine 镜像的 NAME 是 gzctf_db_1)

1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' gzctf_db_1
  1. 使用正确的 IP 地址连接到 PostgreSQL: 一般获取到的 IP 地址是 172.18.0.2(实际可能有出入,请替换为实际获取的 IP 地址),然后使用该地址连接到 PostgreSQL 数据库:
1
psql -h 172.18.0.2 -p 5432 -U postgres -d gzctf
  1. 数据库设置管理员
1
UPDATE "AspNetUsers" SET "Role"=3 WHERE "UserName"='admin';

Docker 模板

获取ctf-docker-template项目

git clone https://github.com/CTF-Archives/ctf-docker-template

Pwn 题目可以通过 https://download-directory.github.io/ 下载22.04版本路径下的文件: https://github.com/CTF-Archives/ctf-docker-template/tree/main/pwn-ubuntu_22.04 (如果是服务器不建议使用,WSL可以复制到共享文件夹里面build)

Pwn 题目部署

在Dockerfile同目录build即可

1
docker build -t test . 

端口默认是9999,若需要修改,修改./docker/docker-compose.yml./config/ctf.xinetd./Dockerfile对应的端口即可