For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt, and this page is available as Markdown at /admin/challenges.md.

题目管理

入口:「管理后台 → 题目管理」,对应 /platform/#/admin/challenges。

题库与比赛题目

全局题库保存题目模板、附件、生成器镜像、Compose 和原始 Flag。添加到比赛后,可以单独调整该场比赛中的名称、描述、提示、标签、可见性、提交次数和计分。

附件和运行模板由引用该题目的比赛共用,修改前请确认影响范围。比赛 Flag 需要在比赛内单独检查和维护;修改模板后,应重新测试 Flag 注入和服务访问。

创建题目

  1. 选择静态题、动态附件题或容器题。题型创建后不能更改。
  2. 填写名称、分类和 Markdown 描述。
  3. 静态题和动态附件题填写 Flag 模板列表,例如 static{hello}、leet{hello_world} 或 uuid{}。
  4. 动态附件题必须填写生成器镜像;容器题必须提供 Compose,Flag 从环境变量、x-volumes 或 x-cloudinit.write_files 提取。
  5. 保存题目后上传附件并测试。

容器编辑器支持表单和 YAML 配置。普通容器题至少开放一个端口;请使用编辑器支持的 Compose 配置项。网络、文件注入和 VM 设置见动态靶机。

附件

题型上传内容与下载行为
静态题 / 容器题所有队伍共享一个附件,下载时使用上传文件名
动态附件题可选上传 ZIP 源文件,保存为 generator.zip,由 worker 解压到 /root;每队下载按 Flag 和源文件版本生成的 ZIP

静态附件可按题目需要选择文件格式,动态生成器源文件需打包为有效 ZIP。上传大小由「系统管理」中的题目附件限制控制(gin.upload.challenge)。上传完成即保存,取消编辑不会撤销附件上传。

测试

在题目列表/详情进入测试操作:

  • 静态题:检查附件下载和内容。
  • 动态附件题:先在全局「生成器」页为该题启动测试生成器,再测试下载生成结果。测试使用 team_id=0 和题库原始 Flag 模板,与比赛队伍的最终 Flag 不同。
  • 容器题:启动测试实例,等待 Running,核对端点、服务、环境变量/文件和资源限制,测试后停止。

测试实例使用独立的测试 Flag,通常为 flag{...},不影响正式队伍。VM 需要可启动的 containerDisk 镜像、VPC、内存、静态 IP 与 MAC,访问入口需按题目设计配置。

查看测试状态和下载附件需要 admin:challenge:read;启动或停止测试需要 admin:challenge:test。动态测试还需要可用的全局生成器。

加入比赛与发布

在「比赛 → 题目」选择并添加题目。新添加的题目默认隐藏,先检查 Flag 和分数,再取消隐藏。可调整:

设置说明
名称与描述比赛内展示内容,描述支持 Markdown
标签与提示题目分类标签及解题提示
隐藏题目准备完成后取消隐藏
提交次数每队提交次数上限,0 不限制

每个 Flag 可独立选择计分方式,并设置初始分值、最低分值和衰减参数。使用分数曲线预览检查效果,详见计分系统。

网络策略

在网络策略编辑器中填写 Kubernetes NetworkPolicy spec 列表(JSON)。以下示例允许发往指定私网网段的出站流量:

[{"policyTypes":["Egress"],"egress":[{"to":[{"ipBlock":{"cidr":"10.0.0.0/8"}}]}]}]

请按题目需要补充 DNS、服务依赖等目标地址,并确认集群 CNI 支持网络策略。保存题目后会开始镜像预热,进度查看方法见工作负载调度。