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 /guide/features/flag.md.

Flag 规则

CBCTF 支持三种 flag 类型,每道题可配置多个 flag,每个 flag 独立计分。

Flag 类型

类型配置格式生成结果(前缀 CBCTF)特点
静态static{content}CBCTF{content}所有队伍相同
动态leet{hello_world}CBCTF{h3LLo-W0rLd}按字符随机变体,不保证不同队伍绝不碰撞
UUIDuuid{}CBCTF{550e8400-e29b-41d4-a716-446655440000}每队不同,标准 UUID 格式
Info

flag 的实际前缀由比赛配置中的 prefix 字段决定,而非固定为 CBCTF。

静态 Flag

配置: static{this_is_a_static_flag}
生成: CBCTF{this_is_a_static_flag}

所有队伍的 flag 内容相同。适用于所有题目类型。

动态 Flag

配置: leet{this_is_a_leet_flag}
生成: CBCTF{Th1S-iS_4_l33T_fL@g}

leet 会随机替换字母大小写、相似字符及 _ / -,保持模板内容的长度,再加上比赛前缀和花括号。模板中可变化的字符太少时,不同队伍可能得到相同结果;需要更强随机性时可使用 uuid{}。

UUID Flag

配置: uuid{}
生成: CBCTF{550e8400-e29b-41d4-a716-446655440000}

标准 UUID v4 格式,长度固定,每队不同。

Flag 注入方式

动态附件题
容器题:环境变量
容器题:文件

动态附件题

平台自动调用生成器容器中的 /root/run.sh 脚本,将 flag 作为参数传入:

/root/run.sh {team_id} {base64(base64(flag1),base64(flag2),...)}

示例(team_id=1,两个 flag):

FLAGS=$(printf '%s,%s' "$(printf 'CBCTF{flag1}' | base64 | tr -d '\n')" "$(printf 'CBCTF{flag2}' | base64 | tr -d '\n')" | base64 | tr -d '\n')
/root/run.sh 1 "$FLAGS"

其中第二个参数为 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)。