Flag 规则
CBCTF 支持三种 flag 类型,每道题可配置多个 flag,每个 flag 独立计分。
Flag 类型
Info
flag 的实际前缀由比赛配置中的 prefix 字段决定,而非固定为 CBCTF。
静态 Flag
所有队伍的 flag 内容相同。适用于所有题目类型。
动态 Flag
leet 会随机替换字母大小写、相似字符及 _ / -,保持模板内容的长度,再加上比赛前缀和花括号。模板中可变化的字符太少时,不同队伍可能得到相同结果;需要更强随机性时可使用 uuid{}。
UUID Flag
标准 UUID v4 格式,长度固定,每队不同。
Flag 注入方式
动态附件题
平台自动调用生成器容器中的 /root/run.sh 脚本,将 flag 作为参数传入:
示例(team_id=1,两个 flag):
其中第二个参数为 base64(base64("CBCTF{flag1}") + "," + base64("CBCTF{flag2}")) 的结果。
Flag 生成时机
队伍 Flag 在题目初始化、重置,以及管理员批量预启动等需要初始化的流程中生成;容器单纯停止再启动不重新生成 Flag。
- 选手重启容器不会改变 flag
- 选手执行「重置题目」时重新生成团队 Flag 并清理该题提交记录;动态题重新生成附件,容器题停止旧实例。静态 Flag 的值仍相同,leet 变体也可能碰撞
- 题目测试模式不产生正式 TeamFlag,但容器中会注入以
flag为前缀的测试值;动态附件测试传入原始模板
多 Flag 配置
每道题可配置多个 flag,每个 flag 独立计分。选手提交其中任一 flag 即可获得对应分数,提交所有 flag 可获得该题目的全部分数。
Flag 前缀由所在比赛的 prefix 字段配置,不同比赛可以使用不同前缀(如 flag、CTF、CBCTF)。
