题目管理
入口:「管理后台 → 题目管理」,对应 /platform/#/admin/challenges。
题库与比赛题目
全局题库保存题目模板、附件、生成器镜像、Compose 和原始 Flag。添加到比赛后,可以单独调整该场比赛中的名称、描述、提示、标签、可见性、提交次数和计分。
附件和运行模板由引用该题目的比赛共用,修改前请确认影响范围。比赛 Flag 需要在比赛内单独检查和维护;修改模板后,应重新测试 Flag 注入和服务访问。
创建题目
- 选择静态题、动态附件题或容器题。题型创建后不能更改。
- 填写名称、分类和 Markdown 描述。
- 静态题和动态附件题填写 Flag 模板列表,例如
static{hello}、leet{hello_world}或uuid{}。 - 动态附件题必须填写生成器镜像;容器题必须提供 Compose,Flag 从环境变量、
x-volumes或x-cloudinit.write_files提取。 - 保存题目后上传附件并测试。
容器编辑器支持表单和 YAML 配置。普通容器题至少开放一个端口;请使用编辑器支持的 Compose 配置项。网络、文件注入和 VM 设置见动态靶机。
附件
静态附件可按题目需要选择文件格式,动态生成器源文件需打包为有效 ZIP。上传大小由「系统管理」中的题目附件限制控制(gin.upload.challenge)。上传完成即保存,取消编辑不会撤销附件上传。
测试
在题目列表/详情进入测试操作:
- 静态题:检查附件下载和内容。
- 动态附件题:先在全局「生成器」页为该题启动测试生成器,再测试下载生成结果。测试使用
team_id=0和题库原始 Flag 模板,与比赛队伍的最终 Flag 不同。 - 容器题:启动测试实例,等待 Running,核对端点、服务、环境变量/文件和资源限制,测试后停止。
测试实例使用独立的测试 Flag,通常为 flag{...},不影响正式队伍。VM 需要可启动的 containerDisk 镜像、VPC、内存、静态 IP 与 MAC,访问入口需按题目设计配置。
查看测试状态和下载附件需要 admin:challenge:read;启动或停止测试需要 admin:challenge:test。动态测试还需要可用的全局生成器。
加入比赛与发布
在「比赛 → 题目」选择并添加题目。新添加的题目默认隐藏,先检查 Flag 和分数,再取消隐藏。可调整:
每个 Flag 可独立选择计分方式,并设置初始分值、最低分值和衰减参数。使用分数曲线预览检查效果,详见计分系统。
网络策略
在网络策略编辑器中填写 Kubernetes NetworkPolicy spec 列表(JSON)。以下示例允许发往指定私网网段的出站流量:
请按题目需要补充 DNS、服务依赖等目标地址,并确认集群 CNI 支持网络策略。保存题目后会开始镜像预热,进度查看方法见工作负载调度。
