用例名称:参与CTF个人/团队竞赛大致用例
1. 核心参与者 (Actors):
- 选手 (Player): 系统的主要使用者,进行注册、登录、组队、解题等所有核心操作。
- 团队管理员/队长 (Team Admin/Captain): 创建队伍的选手,通常拥有邀请、踢出队员、修改队伍信息等权限。
- 赛事管理员 (Competition Admin): (后台角色) 负责创建赛事、上传题目、监控比赛进程、处理争议和发布最终结果。
2. 前置条件 (Preconditions):
- 选手拥有可以访问互联网的设备和浏览器。
- CTF平台正常运行。
- 有一场正在进行或即将开始的赛事可供参与。
3. 基本流程 (Main Flow):
- 步骤 1: 注册与登录 (Registration & Login)
- 动作: 新用户使用邮箱、用户名和密码创建账户。通常需要邮箱验证。老用户直接登录。
- 系统响应: 验证用户信息,创建会话,用户进入平台个人主页或赛事列表页。
- 步骤 2: 团队管理 (Team Management)
- 动作 (二选一):
- 创建队伍: 输入队伍名称、口号等信息,成为队长。
- 加入队伍: 浏览或搜索现有队伍,输入正确的入队口令(如果有)或等待队长批准后加入。
- 系统响应: 将选手与一个团队实体进行绑定。在大多数比赛中,一个选手在一个赛事里只能属于一支队伍。
- 动作 (二选一):
- 步骤 3: 报名/参加赛事 (Competition Enrollment)
- 动作: 在赛事列表中选择一个开放报名的比赛,点击“参加”或“报名”按钮。
- 系统响应: 系统的记录确认该团队(及其所有成员)已注册参加本次赛事。此时,选手可能能看到赛事的基本信息,但题目在比赛开始前通常是锁定的。
- 步骤 4: 参与竞赛与解题 (Solving Challenges)
- 动作:
- 比赛开始后,进入赛事页面。
- 浏览题目列表。题目通常按类别(Web安全、密码学Crypto、逆向工程Reverse、二进制漏洞Pwn、杂项Misc等)和分值进行组织。
- 选择一道题目,阅读题目描述,下载附件(如果有)。
- 在本地或自己的环境中分析和解决问题,最终找到一个特定格式的字符串,即“Flag”。(例如:
flag{this_is_a_secret_key}) - 在题目页面的提交框中输入找到的Flag。
- 系统响应:
- 如果Flag正确: 系统提示“提交成功”,并根据该题目的分值,为选手所在的队伍增加相应的积分。该题目在界面上标记为“已解决”。
- 如果Flag错误: 系统提示“Flag错误”或“提交不正确”,积分不发生变化。
- 动作:
- 步骤 5: 监控排名 (Scoreboard Monitoring)
- 动作: 选手在比赛过程中随时可以访问“记分板” (Scoreboard) 页面。
- 系统响应: 记分板实时显示所有参赛队伍的排名、总积分以及解题情况的时间线。这是一个动态更新的页面,是比赛竞技性的核心体现。
- 步骤 6: 赛事结束与结算 (Competition End & Finalization)
- 动作: 比赛到达预设的结束时间。
- 系统响应:
- 平台锁定所有题目的提交功能,不再接受新的Flag。
- 记分板上的分数和排名被最终确定。
- 系统进行最终结算,有时会处理一些争议(例如作弊嫌疑)。
- 赛事管理员正式公布最终排名和获奖名单。
4. 扩展与变化 (Alternative Flows & Variations):
-
动态积分 (Dynamic Scoring): 这是非常流行的一种机制。题目的分值不是固定的,而是根据成功解出该题的队伍数量动态变化的。解出的人越少,分值越高。反之,分值会降低。这鼓励选手去尝试解决难题。
-
一血 (First Blood): 系统会为第一个成功解出某道题的队伍给予额外的奖励积分,并在该题目上进行特殊标记,这是一种荣誉。
-
提示系统 (Hints): 部分题目可能包含提示。选手或队伍可以通过消耗一部分该题目的积分(或固定的分数)来解锁提示。
-
题目解锁机制 (Challenge Unlocking): 有些比赛会设置“题目树”,即你必须先解出某一个基础题目,才能解锁后续更难的题目。
-
赛后 Write-up: 比赛结束后,主办方或参赛选手通常会发布题目的官方解法或自己的解题思路(称为Write-up),供大家学习交流。