.jpg)
GZCTF平台搭建(Docker)
GZCTF平台Docker搭建详细教程
一、GZCTF平台简介
GZCTF 是一个基于 ASP.NET Core 的开源 CTF(Capture The Flag)平台,主要面向网络安全竞赛和技能提升。以下是关于 GZCTF 的详细介绍:
(一)核心功能
- 题目类型:支持多种题目类型,包括静态附件、动态附件、静态容器和动态容器。静态附件是共享的,而动态附件则根据队伍数量进行分发.
- 动态分值:题目分值可以根据解决次数动态调整,支持三血奖励机制.
- 实时监控:基于 SignalR 实现实时比赛通知、比赛事件和 flag 提交监控.
- 权限管理:提供三级用户权限管理,包括管理员、参赛者等.
- Writeup 收集:支持 Writeup 的收集、查阅和批量下载.
- 流量代理:题目流量可以通过 TCP over WebSocket 代理转发,并支持流量捕获.
(二)部署方式
- K8s 集群部署:适用于大型比赛和长期比赛,利用 Kubernetes 的优势进行部署.
- Docker 和 K8s 分离部署:适用于小型比赛和校赛,部署过程相对简单.
- Docker 单机部署:适用于单机测试和最小化部署,不适用于生产环境.
(三)开源协议
GZCTF 基于 AGPLv3 协议开源,使用和修改均需遵守该协议.
(四)适用场景
- 网络安全初学者:通过解决实际题目来入门和提高技能.
- 教育机构:可用于教学和实践环节,帮助学生掌握网络安全知识.
- 企业培训:作为内部安全意识培训工具,增强员工的安全防护能力.
- 社区活动:举办线上或线下的 CTF 比赛,促进技术交流与切磋.
二、环境准备
1. 换源
Centos操作系统请参考:[Centos换源]
Ubuntu操作系统请参考:[Ubuntu换源]
2. Docker安装
你需要安装docker以及docker-compose请参考:[Docker安装]
好啦,到此结束,基本工作已经结束,开始开心部署吧【可能会有各种各样的问题,不要着急,最后部署完毕你会开心的】!
三、GZCTF正式部署
本篇讲述的主要是Docker方式部署
如果你是K8s方式部署,可以参考这篇文章[GZCTF平台仅k8s搭建]
如果你是Docker+K8s混合方式部署,可以参考这篇文章[GZCTF平台Docker+K8s搭建]
(一)创建根文件夹GZCTF
1、创建根文件夹
1 | mkdir GZCTF |
2、进入根文件夹
1 | cd GZCTF |
(二)准备信息
根据官方的文档,在配置appsttings.json和docker-compose.yaml这两个配置文件之前,我们需要准备几个关键的参数信息
1 | GZCTF_ADMIN_PASSWORD: Admin123..(GZCTF管理员密码) |
- GZCTF_ADMIN_PASSWORD:初始管理员密码,在数据库未初始化时生效,需要在第一次启动时进行设置,配置在 docker-compose.yml 中。
- POSTGRES_PASSWORD: 数据库密码,需要配置在 docker-compose.yml 中及 appsettings.json 中。
- XOR_KEY: 用于加密比赛私钥的随机字符串,需要配置在 appsettings.json 中。
- PUBLIC_ENTRY: 外部访问地址,可以是 IP 或域名,需要配置在 appsettings.json 中,用于提供给选手访问题目容器的地址。
(三)配置文件
- appsettings.json
- (1)在GZCTF目录中创建 appsettings.json 文件
1
touch appsettings.json
- (2)编写并配置 appsettings.json 文件内容
1
vim appsettings.json
将以下内容复制并粘贴进入 appsettings.json 文件,并根据你的信息进行修改
“Database”:这条中的Password,需要替换成你的数据库密码
“Xorkey”:这条中的XorKey,需要替换成你的XorKey,用于进行flag加密
“PublicEntry”:这条中的PublicEntry,需要替换成你的PublicEntry,用于提供给选手访问的IP地址
1 | { |
- docker-compose.yaml
- (1)在GZCTF目录中创建 docker-compose.yaml 文件
1
touch docker-compose.yaml
- (2)编写并配置 docker-compose.yaml 文件内容
1
vim docker-compose.yaml
将以下内容复制并粘贴进入 docker-compose.yaml 文件,并根据你的信息进行修改
‘GZCTF_ADMIN_PASSWORD’:这条中的Admin Password,需要替换成你的GZCTF管理员密码
‘POSTGRES_PASSWORD’:这条中的Database Password,需要替换成你的数据库密码
‘LC_ALL’:替换为你的语言,比如LC_ALL=zh_CN.UTF-8
(中文),LC_ALL=en_US.UTF-8
(英文)
‘ports’: 如果运行在本地环境,需要将端口号替换成你的本地端口号,比如80:8080
(本地端口:远程端口)如果本地端口发生冲突,需要更改本地端口,同时需要在防火墙放行相应的端口出站
1 | services: |
(四)启动项目
进入GZCTF目录
1
cd GZCTF
查看GZCTF目录下的文件
按照以上内容进行操作的话,我们创建并配置了两个文件:appsettings.json,docker-compose.yaml,现在可以启动GZCTF了1
ls
启动GZCTF
1
docker-compose -f docker-compose.yml up -d
正常的情况,会有一下内容显示【镜像的拉取】,镜像拉取成功后并运行镜像
如果出现异常的情况,可能:
- 网络问题:没有换源,或者是换源失效,导致的镜像拉取超时或者拉取失败
- 端口占用:镜像拉取成功后,因为端口占用无法正常启动,导致无法访问
如果出现了异常问题,请参考这篇文章[GZCTF平台搭建问题合集]
恭喜啦~!我们已经部署完成啦,接下来我们可以开心的玩耍了,祝你好运!
- 访问GZCTF
本地浏览器输入:127.0.0.1:本地端口
外部访问: 虚拟IP地址:远程端口
- 登录管理员账户
登录管理员账号可以创建比赛、发布题目、进行详细的配置等
- Thanks for your appreciation. / 感谢您的赞赏