GZ靶场搭建

GZ靶场搭建以及pwn题部署

成果图展示

Untitled

靶场搭建

使用的是阿里云的ubuntu20.04服务器搭建的,首先得自己安装docker和docker-compose(使用他市场里面那个自带docker的ubuntu20.04貌似会有点问题,最后还是自己安装docker方便点)

新建两个文件,位于同一个文件夹。这里的文件夹名称为GZCTF,文件为appsettings.json和docker-compose.yml。

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
{
"AllowedHosts": "*",
"ConnectionStrings": {
"Database": "Host=db:5432;Database=gzctf;Username=postgres;Password=<String1>"
//<String1>换成数据库密码,随机密码且长度足够
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
//邮箱配置
"EmailConfig": {
"SendMailAddress": "[email protected]", // 填入邮箱
"UserName": "ctf_noreply", // 发件人名称
"Password": "UWPTINWMFPQVMPAH", // 邮箱密码,部分服务商需要填入授权码
"Smtp": {
"Host": "smtp.163.com", // 此处为163邮箱服务器,具体自定
"Port": 465
}
},
"XorKey": "<String2>", // 自定XorKey
"ContainerProvider": {
"Type": "Docker",
"PublicEntry": "xx.xx.xx.xx", // 域名或IP配置,用于容器生成,域名不带http/https
"DockerConfig": {
"SwarmMode": false,
"Uri": "" // 本地配置Docker因此此处置空
}
},
"RequestLogging": false,
"DisableRateLimit": false,
"RegistryConfig": {
"UserName": "",
"Password": "",
"ServerAddress": ""
},

//谷歌验证码配置
"GoogleRecaptcha": {
"VerifyAPIAddress": "https://www.recaptcha.net/recaptcha/api/siteverify",
"Sitekey": "",
"Secretkey": "",
"RecaptchaThreshold": "0.5"
}
}

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
28
29
30
31
32
33
34
35
36
37
version: '3.0'
services:
gzctf:
image: gztime/gzctf:latest
restart: always
environment:
- "GZCTF_ADMIN_PASSWORD=<String3>" # <String3>换成管理员账户密码,账号为Admin
ports:
- "80:80" # 对外端口号,前为外部端口。
networks:
default:
volumes:
- "./data/files:/app/uploads"
- "./appsettings.json:/app/appsettings.json:ro"
- "./logs:/app/log"
- "./data/keys:/root/.aspnet/DataProtection-Keys"
# - "./k8sconfig.yaml:/app/k8sconfig.yaml:ro"
- "/var/run/docker.sock:/var/run/docker.sock"
depends_on:
- db

db:
image: postgres:alpine
restart: always
environment:
- "POSTGRES_PASSWORD=<String1>" # 数据库密码,务必要和appsettings.json中的配置一致
networks:
default:
volumes:
- "./data/db:/var/lib/postgresql/data"

networks:
default:
driver: bridge
ipam:
config:
- subnet: 192.168.12.0/24

通过ssh连接服务器,将文件夹上传。开始部署

1
2
cd GZCTF
docker-compose up -d

部署完成后,建议查看Logs,看部署是否成功。主要是看gzctf容器是否连接上了数据库。

Untitled

这里连接失败貌似不影响靶场使用,反正我正常测试了几个功能都没什么影响 ### pwn题部署 这里使用Admin登录创建一个比赛,然后创建赛题,会发现pwn题这里动态容器部署需要使用dockerhub来上传pwn的docker

image.png

将docker上传dockerhub首先得去注册一个dockerhub的账号,然后创建好一个仓库之后记住用户名和仓库的名字,在虚拟机上登录dockerhub

1
sudo docker login -u 用户名

然后就是制作自己pwn题的docker镜像 首先得有一个pwn题的板子 docker.zip 记得将里面的run.sh改一下,这里已经改过了,直接将环境变量GZCTF_FLAG,echo给flag和flag.txt就可以了,然后build一下,build之后再讲他改下名字和tag

1
2
sudo docker build -t "pwn" ./
sudo docker tag pwn:latest youlinyo/youlin:pwn #这里youlinyo是用户名,youlin是仓库名

接着将这个镜像push到dockerhub上面去就可以了

1
sudo docker push youlinyo/youlin:pwn

然后就可以直接在靶场里面测试这个靶机了,在比赛的时候也可以直接创建动态容器(别忘记可以去设置flag格式和上传题目附件,这里会把flag直接给环境变量GZCTF_FLAG)


GZ靶场搭建
http://blogyoulin.top/2023/09/25/GZ靶场搭建/
Author
John Doe
Posted on
September 25, 2023
Licensed under