目录

GZCTF搭建记录

# GZCTF搭建记录

本地搭建一个GZCTF平台(docker)

1c2g ubuntu server22.04搭建GZCTF后,没有运行web容器时,占用550m左右

1

这篇文章包含以下内容:

  • 换源
  • 系统配置代理
  • 安装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 # 创建
1
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
1
2
3
4
5
6
7
8
9
10

更新软件列表

sudo apt update
1

# 系统配置代理

如果主机上运行了Cla*h服务在7890端口,配置虚拟机走主机的7890代理

2

配置ubuntu代理

cd /etc/profile.d
sudo vim proxy.sh
1
2

注意

注意下面修改为你主机的实际VMware Network Adapter VMnet ip和端口

看哪个和虚拟机ip处于同一网段

3

我的虚拟机ip192.168.237.140,所以用192.168.237.1这个

注意你的桥接ip和端口,保存退出

export proxy="http://192.168.237.1:7890"
export http_proxy=$proxy
export https_proxy=$proxy
export HTTP_PROXY=$proxy
export HTTPS_PROXY=$proxy
1
2
3
4
5

保存退出,执行,立即生效

source proxy.sh
1

现在可以直接安装docker,docker-compose

sudo apt install docker.io docker-compose
1

验证是否安装成功

gzctf@ubuntu:~$ docker -v
Docker version 24.0.7, build 24.0.7-0ubuntu2~22.04.1
gzctf@ubuntu:~$ docker-compose -v
docker-compose version 1.29.2, build unknown
1
2
3
4

# docker配置代理

配置一下docker方便拉取镜像

/etc/systemd/system/docker.service.d/这个目录可能不存在,先尝试创建

sudo mkdir -p /etc/systemd/system/docker.service.d/
1

创建配置文件,写入内容

sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
1

注意

注意修改为你主机的实际VMware Network Adapter VMnet ip和端口

内容

[Service]
Environment="HTTP_PROXY=http://192.168.237.1:7890"
Environment="HTTPS_PROXY=http://192.168.237.1:7890"
1
2
3

重新加载,启动docker。查看信息

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info
1
2
3

把当前用户加入docker组,授权当前用户docker权限,可以直接使用docker命令

# 添加用户组
sudo usermod -aG docker $USER
# 直接刷新
newgrp docker
1
2
3
4

现在回归主题:搭建一个GZCTF平台

在根目录//home方便找到的目录都可以,那就根目录了

cd /
mkdir GZCTF
cd GZCTF
1
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)
1
2
3
4

手动替换到具体位置

创建appsettings.json文件,写入内容,注意手动把准备的参数替换进去,这里我已经把我准备的替换进去了

sudo vim appsettings.json
1

文件内容

{
  "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"]
  }
}
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
50

创建compose.yml文件,写入内容,注意手动把准备的参数替换进去,这里我已经把我准备的替换进去了

sudo vim compose.yml
1

文件内容

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"
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

在使用docker compose up -d时报错了

5

我们在开始时安装的是docker-compose

所以执行下面命令

docker-compose -f compose.yml up -d
1

6

7

访问http://192.168.237.140,可以看到已经搭建成功

登录前面的管理员账号可以创建比赛,发布题目等等

8

安装neofetch(毫不相干)

sudo apt install neofetch -y
neofetch
1
2

9

第一次以管理员身份进入GZCTF,好陌生,仔细探索可以找到很多细节的功能。这个平台真的很不错,感谢GZCTF团队。

Ciallo ~(∠・ω< )⌒★ Ciallo ~(∠・ω< )⌒★ Ciallo ~(∠・ω< )⌒★

参考、致谢:

最后一次更新于: 2024/11/01, 23:56:01