Skip to content

0RAYS/CBCTF

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,923 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CBCTF

Go Version React Kubernetes PostgreSQL Redis License

CBCTF 是一个基于 Go 语言开发的高性能 CTF 竞赛平台,前后端一体化编译,支持动态容器、动态附件、VPC 网络隔离等特性。

特性概览

题目系统

  • 静态题目 / 动态题目 / 动态容器,支持问答类题目
  • Flag 类型:静态 Flag、动态 Flag、UUID Flag,可注入环境变量或文件挂载
  • 分值系统:静态 / 线性 / 非线性动态分值,支持三血奖励

竞赛管理

  • 团队管理、实时排行榜、公告系统
  • Writeup 收集与批量下载
  • 完整的比赛事件日志

动态容器

  • 基于 Kubernetes 的队伍隔离容器环境
  • Pod / VPC 两种网络模式,VPC 基于 Kube-OVN 实现网络隔离
  • 支持 Frp 端口转发、镜像预热、容器预热、流量抓取

动态附件生成

  • 基于 Kubernetes 的容器化隔离生成
  • 可基于通用 Docker 镜像,通过上传 Python 脚本进行生成

安全特性

  • 设备指纹 (FingerprintJS) + JWT 双重认证
  • 作弊检测(Flag 共享、设备指纹异常)
  • 基于 Redis 的速率限制,支持全局及 IP 白名单

其他

  • 异步任务队列(邮件、Webhook、附件生成、图片处理)
  • OAuth / OIDC 第三方认证
  • 国际化 (i18n) 支持
  • Prometheus 监控指标

技术栈

后端

组件 技术 版本
语言 Go 1.26
Web 框架 Gin 1.11
ORM GORM 1.31
数据库 PostgreSQL 16+
缓存 / 消息队列 Redis 6.0+
异步任务 Asynq 0.26
定时任务 robfig/cron v3
容器编排 Kubernetes 1.20+
网络插件 Kube-OVN / Multus -
JWT golang-jwt v5
配置管理 Viper 1.21

前端

组件 技术 版本
框架 React 19
构建工具 Vite 7
状态管理 Redux Toolkit 2
HTTP 客户端 Axios 1.13
CSS Tailwind CSS 4
路由 React Router 7
国际化 i18next 25
图表 ECharts 6
代码编辑器 Monaco Editor 4
设备指纹 FingerprintJS 5

快速开始

环境要求

  • Go 1.26+
  • Node.js 22+ / pnpm
  • PostgreSQL 16+
  • Redis 6.0+
  • Kubernetes 1.20+(动态容器功能需要)

启动依赖服务

项目根目录提供的依赖示例可用于本地启动 PostgreSQL 和 Redis:

docker compose up -d

构建

# 构建前端
cd frontend && pnpm install && pnpm run build && cd ..

# 构建后端(前端静态文件会被嵌入二进制)
go build -ldflags="-s -w" -trimpath

运行

首次运行会自动生成 config.yaml 配置文件,修改配置后重新启动:

./CBCTF

如需使用动态容器功能,需先初始化 Kubernetes 资源(命名空间、NFS PV/PVC、外部网络子网):

./CBCTF k8s init

配置说明

配置文件 config.yaml 在首次运行时从内置默认配置自动生成。主要配置段:

配置段 说明
host 后端服务对外地址
path 数据存储路径
log 日志级别 (DEBUG/INFO/WARNING/ERROR)、是否持久化
gin 服务监听地址/端口、上传限制、速率限制、CORS、JWT
gorm.postgres PostgreSQL 连接配置、连接池参数
redis Redis 连接配置
k8s Kubeconfig 路径、命名空间、外部网络 CIDR、Frp 配置
cheat 作弊检测 IP 白名单
webhook Webhook 目标地址黑名单
asynq 异步任务并发数

支持环境变量覆盖,前缀为 CBCTF_,例如 CBCTF_GIN_PORT=9000

题目系统

题目类型

  • 静态题目 - 队伍间共用附件,适合传统 CTF 题目
  • 动态题目 - 实时生成唯一附件,确保每个队伍获得不同的挑战
  • 动态容器 - 自动生成并启动队伍隔离的容器环境

Flag 类型

类型 格式 说明
静态 Flag static{固定内容} 每次生成的 Flag 均相等
动态 Flag dynamic{随机内容} 基于模板随机变化,保持可读性
UUID Flag uuid{} 标准 UUID 格式

动态容器支持将 Flag 注入至环境变量或作为文件挂载至指定路径。

分值系统

  • 静态分数 - 分值固定,不随解题人数变化
  • 线性分数 - 随解题人数增加等量递减
  • 非线性分数 - 计算公式:(MinScore - InitScore) / (Decay^2) * (Solvers^2) + InitScore

三血奖励:一血 / 二血 / 三血分别额外获得初始分数的 5% / 3% / 1%。

动态容器系统

网络模式

后端通过 docker-compose 配置自动区分网络环境:

模式 判断条件 说明
Pod 未配置 networks 字段 使用默认网络,容器间可直接通信
VPC 配置了 networks 字段 基于 Kube-OVN 的 VPC 网络隔离,需手动指定 IP

配置示例

Pod 模式:

version: '3'
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"

详细示例:Pod 配置示例

VPC 模式:

version: '3'
services:
  web:
    image: nginx:alpine
    networks:
      vpc:
        ipv4_address: 192.168.1.10
networks:
  vpc:
    external: true

详细示例:VPC 配置示例

动态附件系统

基于 Kubernetes 容器化生成,支持上传 Python 脚本在隔离环境中为每个队伍生成唯一附件。

详细示例:动态附件示例

环境依赖(Kubernetes)

动态容器和动态附件功能依赖以下 Kubernetes 组件:

组件 说明
Kube-OVN VPC 网络隔离支持
Multus 多网络接口支持

Multus 插件选择建议:

推荐使用 Thin Plugin,无需手动配置且稳定性更好。避免使用 Thick Plugin,已知存在以下问题:

如需使用 Thick Plugin,请参考:

许可证

本项目采用 Apache License 2.0

About

预期中,是一个CTF平台

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors