记一次GZCTF搭建及动态容器

本文最后更新于 2024年9月21日 下午

前言:因为学校需要招新生要搭建平台,简单的学习了一下。

GZCTF配置

环境 ubuntu 22.04

第一步

更新源

1
sudo apt update 

update

第二步

安装docker和docker-compose

1
sudo apt install docker.io docker-compose

中途按Y和Enter即可。

第三步

docker换源

由于docker今年在中国地区的限制,需要换源才能正常的拉取。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

第四步

配置文件appsettings.json和docker-compose.yml,可以新建GZCTF,然后将这两个文件放在这里

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=这里填写数据库密码"
},
"EmailConfig": {
"SendMailAddress": "a@a.com",
"UserName": "",
"Password": "",
"Smtp": {
"Host": "localhost",
"Port": 587
}
},
"XorKey": "asdqwe",
"ContainerProvider": {
"Type": "Docker", // or "Kubernetes"
"PortMappingType": "Default", // or "PlatformProxy"
"EnableTrafficCapture": false,
"PublicEntry": "xx.xx.xx.xx",//服务器官网ip
// 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": [""]
}
}

上面的内容对于邮箱的验证没有填写,你需要填写数据库的密码,如果使用服务器的换填写服务器的ip,完全的功能请参照GZCTF官方文档

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=这里填管理员密码"
# choose your backend language `en_US` / `zh_CN` / `ja_JP`
- "LC_ALL=zh_CN.UTF-8"
ports:
- "8080:8080" #如果备案了可以选择80
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=数据库密码"
volumes:
- "./data/db:/var/lib/postgresql/data"

这里填写管理员密码,数据库密码(必须个上一个的保持一致),端口看情况进行修改。

配置

第五步

拉取docker

1
docker-compose up -d

docker

等出现两个done之后就完成了,访问一下网页

网页

动态容器出题

我用的是探姬和巨魔师傅的项目,这里贴一下。项目

正常的题型直接更换src就行了,我用的xftp上传到服务器,最后docker 拉取一下就行,这里以web题目为例子。

默认的网页是index需要注意一下。

例题

这是准备好的例题,然后我们使用xftp上传到服务器上

1

弄好之后创建比赛,选个web题动态容器,输入webtest就行,然后测试一下。

有dockerhub的也可以选择先传到那上面,看自己的选择。

tip

1.探姬项目的pwn题目默认是9999端口需要自己改一下

2.环境不能上传内容过大的附件,可以先上传网盘,再把链接贴上去。

3.流量抓捕我并没有设置,当时也忘了,等明年再说吧,详情也可以看官方文档

4.弄不好可以全删重新弄,orz,好事多磨。

缝缝补补

数据库相关

  • 为了方便数据库修改,给数据库映射了端口,当然有一定的安全隐患,需要对安全组,密码强度有一定要求
1
2
3
4
5
6
7
8
9
db:
image: postgres:alpine
restart: always
environment:
- "POSTGRES_PASSWORD=XXXXX"
ports:
- "5432:5432"
volumes:
- "./data/db:/var/lib/postgresql/data"

然后可以在本地进行连接(注意安全问题!!!)

  • 修改数据库密码记得两个文件同时修改

记一次GZCTF搭建及动态容器
https://0ran9ewww.github.io/2024/09/02/杂谈/记一次GZCTF搭建及动态容器/
作者
orange
发布于
2024年9月2日
许可协议