题目管理
题库与比赛题目
CBCTF 采用两层题目管理:
对全局题库的修改(如更新附件)会影响所有使用该题目的比赛。对比赛题目的覆盖配置(name、description 等)仅影响该场比赛。
创建题目
必填字段:name(题目名称)、type(题目类型)、category(分类)。
可选字段:
description:题目描述(Markdown)generator_image:动态附件题的生成器容器镜像network_policies:Kubernetes NetworkPolicy 配置(JSON)
上传附件
- 静态/容器题:上传
attachment.zip,所有队伍共享下载 - 动态附件题:上传
generator.zip,平台在生成时上传到生成器容器的/root目录(可选)
题目测试模式
需要 admin:challenge:test 权限。管理员可在题目加入比赛前,通过测试模式验证容器靶机配置:
- 访问题目详情,点击「测试」
- 平台以管理员身份启动靶机容器或 KubeVirt VM(不绑定任何队伍)
- 普通 Pod 题验证端口连通性和访问地址;VM 题验证 VM 启动、网络接入、Flag 注入和 cloud-init 写入
- 测试完成后停止靶机
测试模式下不产生实际的 flag 和队伍记录。如果题目使用 x-kubevirt: true,测试前应确认集群已安装 KubeVirt,题目使用 VPC
网络并配置了每张网卡的 ipv4_address 和 mac_address。VM 模式的 ports 不会生成平台访问地址;普通环境变量和 x-volumes
不会注入到虚拟机,需改用 x-cloudinit.write_files 注入文件和 Flag。
加入比赛
通过 POST /admin/contests/:contestID/challenges(admin:contest_challenge:create)将题目加入比赛。
加入时可覆盖以下字段(仅对本场比赛生效):
管理比赛 Flag 分数
通过 PUT /admin/contests/:contestID/challenges/:challengeID/flags/:flagID(admin:contest_challenge_flag:update)为每个
flag 独立配置计分:
详见计分系统。
NetworkPolicy
在题目的 network_policies 字段中配置 Kubernetes NetworkPolicy(JSON 格式),对该题目的所有靶机生效。
示例:禁止靶机出站访问互联网:
文件管理
通过 GET /admin/files(admin:file:list)查看所有已上传的题目附件,支持下载和删除。流量 pcap 文件和 Writeup 文件也在此处统一管理。
