GZ靶场搭建以及pwn题部署
成果图展示
![Untitled](https://cdn.jsdelivr.net/gh/PwnYouLin/blogimage@main/img/202309251331957.png)
靶场搭建
使用的是阿里云的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" - "/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](https://cdn.jsdelivr.net/gh/PwnYouLin/blogimage@main/img/202309251331972.png)
这里连接失败貌似不影响靶场使用,反正我正常测试了几个功能都没什么影响 ### pwn题部署 这里使用Admin登录创建一个比赛,然后创建赛题,会发现pwn题这里动态容器部署需要使用dockerhub来上传pwn的docker
![image.png](https://cdn.jsdelivr.net/gh/PwnYouLin/blogimage@main/img/202309251331962.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
|
接着将这个镜像push到dockerhub上面去就可以了
1
| sudo docker push youlinyo/youlin:pwn
|
然后就可以直接在靶场里面测试这个靶机了,在比赛的时候也可以直接创建动态容器(别忘记可以去设置flag格式和上传题目附件,这里会把flag直接给环境变量GZCTF_FLAG)