CBCTF 是由 0RAYS 维护的 CTF 竞赛平台,基于 Go 语言构建,原生支持 Kubernetes编排。平台支持动态附件生成、动态容器分发、容器与虚拟机混合部署、网络渗透场景构建等特性。
| 类型 | 说明 |
|---|---|
| 静态题目 | 所有队伍共用附件,flag 相同 |
| 动态附件 | 容器为每个队伍独立生成附件,flag 各不相同 |
| 动态容器 · Pod 模式 | 多容器共享同一 Pod 网络,容器间通过 localhost 通信 |
| 动态容器 · VPC 模式 | 每个容器独立 Pod,须分配静态 IP,适合渗透场景 |
每道题目均可配置多个 flag,每个 flag 独立计分。
flag 前缀可在赛事设置中自定义(默认 CBCTF):
| 类型 | 原始值 | 实际 Flag |
|---|---|---|
static |
static{this_is_a_flag} |
CBCTF{this_is_a_flag} |
leet |
leet{this_is_a_flag} |
CBCTF{ThiS-ls_4-fIaG} |
uuid |
uuid{} |
CBCTF{1301ea62-ccd2-4543-b663-993f87b6d44a} |
- 动态分值 — 一二三血额外获得题目分值的 5% / 3% / 1%
- Frp 内网穿透 — 容器端口转发,保留原始客户端 IP
- SMTP 邮件验证 — 注册验证与密码找回
- Writeup 管理 — 支持收集与批量下载
- OAuth / OIDC — 第三方认证,支持用户组自动分配
- 平台品牌化 — Logo、名称、主题色等全局配置
- 热重载配置 — 所有系统配置修改即时生效,无需重启
- Webhook - GET / POST
- 国际化(i18n) — 多语言界面支持
- Prometheus 监控 — 完整的运行时指标暴露
- Redis 缓存 / 任务队列 + PostgreSQL 数据存储 + NFS 网络存储
# 1. 构建前端(静态文件会被嵌入二进制)
cd frontend && pnpm install && pnpm run build && cd ..
# 2. 构建后端(流量抓取功能依赖 libpcap,需启用 CGO)
CGO_ENABLED=1 go build -ldflags="-s -w" -trimpath -o CBCTF .也可直接使用 Docker 完成两阶段构建:
docker build -t cbctf .后端通过 docker-compose 配置自动识别网络模式:
| 模式 | 判断条件 | 说明 |
|---|---|---|
| Pod | 未配置 networks 字段 |
使用默认网络,容器间可直接通信 |
| VPC | 配置了 networks 字段 |
基于 Kube-OVN 的 VPC 网络隔离,需手动指定 IP |
Pod 模式
version: '3'
services:
web:
image: nginx:alpine
x-kubevirt: false
ports:
- "80:80"VPC 模式(含 KubeVirt 虚拟机)
version: '3'
services:
web:
image: nginx:alpine
x-kubevirt: true
x-boot:
bootloader: efi
secure_boot: false
x-cloudinit:
users:
- name: root
networks:
vpc:
ipv4_address: 192.168.1.10
mac_address: "00:00:00:00:01:01"
networks:
vpc:
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1基于 Kubernetes 容器化生成,支持上传 Python 脚本,在隔离环境中为每个队伍生成唯一附件。
生成器合约:
- 容器必须包含
sleep和unzip - 脚本路径固定为
/root/run.sh <team_id> <base64_encoded_flags> - 产物须写入
/root/mnt/attachments/{id}.zip - 禁止使用
latest镜像标签
动态容器与动态附件功能依赖以下组件:
| 组件 | 用途 |
|---|---|
| Kube-OVN | VPC 网络隔离 |
| Multus CNI | 多网络接口 |
| KubeVirt | 虚拟机调度 |
本项目采用 GNU Affero General Public License v3.0 开源协议。














