本文最后更新于 2024年9月21日 下午
前言:因为学校需要招新生要搭建平台,简单的学习了一下。
GZCTF配置
环境 ubuntu 22.04
第一步
更新源
第二步
安装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", "PortMappingType": "Default", "EnableTrafficCapture": false, "PublicEntry": "xx.xx.xx.xx", "DockerConfig": { "SwarmMode": false, "Uri": "unix:///var/run/docker.sock" } }, "RequestLogging": false, "DisableRateLimit": true, "RegistryConfig": { "UserName": "", "Password": "", "ServerAddress": "" }, "CaptchaConfig": { "Provider": "None", "SiteKey": "<Your SITE_KEY>", "SecretKey": "<Your SECRET_KEY>", "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=这里填管理员密码" - "LC_ALL=zh_CN.UTF-8" ports: - "8080:8080" volumes: - "./data/files:/app/files" - "./appsettings.json:/app/appsettings.json:ro" - "/var/run/docker.sock:/var/run/docker.sock" depends_on: - db db: image: postgres:alpine restart: always environment: - "POSTGRES_PASSWORD=数据库密码" volumes: - "./data/db:/var/lib/postgresql/data"
|
这里填写管理员密码,数据库密码(必须个上一个的保持一致),端口看情况进行修改。
第五步
拉取docker
等出现两个done之后就完成了,访问一下网页
动态容器出题
我用的是探姬和巨魔师傅的项目,这里贴一下。项目
正常的题型直接更换src就行了,我用的xftp上传到服务器,最后docker 拉取一下就行,这里以web题目为例子。
默认的网页是index需要注意一下。
这是准备好的例题,然后我们使用xftp上传到服务器上
弄好之后创建比赛,选个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"
|
然后可以在本地进行连接(注意安全问题!!!)