JUSTCTF比赛平台搭建

环境:ubuntu22.04、docker、GZCTF、

一、ubuntu安装docker

安装命令:

1
sudo apt install docker.io docker-compose

然后换源:

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
{
"registry-mirrors": [
"https://6kx4zyno.mirror.aliyuncs.com",
"https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com/",
"https://dockerproxy.com",
"https://docker.nju.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://dockerhub.azk8s.cn",
"https://docker.m.daocloud.io",
"https://docker.m.daocloud.io",
"https://0c105db5188026850f80c001def654a0.mirror.swr.myhuaweicloud.com",
"https://noohub.ru",
"https://huecker.io",
"http://mirror.azure.cn/",
"https://dockerhub.timeweb.cloud",
"https://5tqw56kt.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev/",
"https://docker.ckyl.me/",
"https://docker.chenby.cn",
"https://docker.hpcloud.cloud",
"http://mirrors.ustc.edu.cn/"
]
}

然后重启进程:

1
2
sudo systemctl daemon-reload        #重启daemon进程
sudo systemctl restart docker #重启docker

docker安装成功,可以拉取镜像。

还有一种方法通过安装宝塔面板,面板里安装docker,自定义源。==》来安装docker。(推荐这种)

二、拉取GZCTF

1
2
3
4
5
cd /home
mkdir JUSTCTF
cd JUSTCTF
sudo touch appsettings.json
sudo touch docker-compose.yml

这两个创建好的文件,GZCTF的配置文件

1、首先是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=<Your POSTGRES_PASSWORD>"
},
"EmailConfig": {
"SendMailAddress": "a@a.com",
"UserName": "",
"Password": "",
"Smtp": {
"Host": "localhost",
"Port": 587
}
},
"XorKey": "<Your XOR_KEY>",
"ContainerProvider": {
"Type": "Docker", // or "Kubernetes"
"PortMappingType": "Default", // or "PlatformProxy"
"EnableTrafficCapture": false,
"PublicEntry": "<Your PUBLIC_ENTRY>", // 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"]
}
}

需要修改部分:

1
2
3
4
5
6
7
<Your POSTGRES_PASSWORD>: 数据库密码、自己定义

<Your XOR_KEY>: 用于加密比赛私钥的随机字符串、随机定义

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

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

2、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
version: "3.0"
services:
gzctf:
image: gztime/gzctf:latest
restart: always
environment:
- "GZCTF_ADMIN_PASSWORD=<Your 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=<Your POSTGRES_PASSWORD>"
volumes:
- "./data/db:/var/lib/postgresql/data"

需要修改部分有:

1
2
<Your GZCTF_ADMIN_PASSWORD>:初始管理员密码一定要和平台相符,GZ的是大于8位并且有大小写字母和数字。
<Your POSTGRES_PASSWORD>: 数据库密码和刚刚appsettings里面的数据库密码必须保持一致

平台创建,使用这个命令来搭建平台:

1
sudo docker-compose up -d
image-20241230224801716

拉取成功。

访问ip+80

image-20241230225001059

三、上传镜像到自己github镜像库

1、准备条件

  • 获取Github的个人访问令牌(PAT),即Personal Access Token,需要确保 PAT 具有 read:packageswrite:packages 权限。

    image-20241230225836642

    image-20241230230020184

2、推送镜像

  • 登录 GitHub Container Registry: 在终端或命令行中,使用 GitHub 用户名和 GitHub 的个人访问令牌(PAT)登录 GitHub Container Registry。

    1
    echo <PAT> | docker login ghcr.io -u <your-github-username> --password-stdin 

​ 将 <PAT> 替换为个人访问令牌,将 <your-github-username> 替换为 GitHub 用户名。

  • 标记你的 Docker 镜像: 使用以下命令将 Docker 镜像标记为 GitHub Container Registry 镜像:

  • docker tag <your-image-name>:<tag> ghcr.io/<your-github-username>/<your-image-name>:<tag>
    
    1
    2
    3
    4
    5

    ​ 将 `<your-image-name>:<tag>` 替换为本地 Docker 镜像名与tag名,`<your-github-username>` 替换为 GitHub 用户名,`<tag>` 替换想要使用的标签(例如默认的`latest`标签)。

    - **推送 Docker 镜像到 GitHub:** 使用以下命令将 Docker 镜像推送到 GitHub Container Registry:

    docker push ghcr.io/<your-github-username>/<your-image-name>:<tag>

完成以上步骤后,就可以在 GitHub个人账号的 的 “Packages” 部分看到Docker 镜像了,但是该镜像默认为private镜像,Pull使用时需要先登录。

参考文献:推送 Docker 镜像到Github Registry – 老梅笔记 laomeinote

docker详解(关于CTF的出题和搭建CTF赛场) - 先知社区