starvy/flagfish

GitHub: starvy/flagfish

一个自托管的 Go 语言 CTF 竞赛平台,通过数据库级约束实现无竞态记分和可证明的防作弊检测。

Stars: 3 | Forks: 0

# 🐟 flagfish ### 能够*证明*事实的 CTF 平台。 可证明的防作弊机制,可回溯至任意时刻的记分板,以及基于真实 Postgres 验证的正确性。 [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) [![Go](https://img.shields.io/badge/go-1.26-00ADD8.svg)](go.mod) [![Postgres](https://img.shields.io/badge/postgres-17-336791.svg)](docs/adr/0003-postgres-only-no-redis.md) [![Status](https://img.shields.io/badge/status-pre--1.0-orange.svg)](#status) ![提交 flag;题目分数在提交瞬间动态衰减](https://static.pigsec.cn/wp-content/uploads/repos/cas/c0/c07645b6111fb99cb9de8e5f6d17bcb25623ce39bfaf82c4c314272f7020896c.gif)
## 🎯 用*证据*抓取 flag 共享行为 **其他平台只给你直觉,而 flagfish 给你数据库记录。** 每个队伍独有的 flag 意味着每次提交都会被标记上签发该 flag 的队伍 —— 因此“B 队提交了 A 队的 flag”就是 `attributed_account_id <> account_id`,而无需你去费力争辩。检测过程是静默的,作弊者永远无法察觉并适应。[工作原理 →](docs/why-flagfish.md#anti-cheat)
Anti-cheat: flag sharing, IP overlap, and provable unissued solves
## ⏪ 将记分板回溯至任意时刻 **分数在获得时即被标记,读取时绝不重新计算。** 过去任意时刻的记分板是一次查询,而非重建 —— 这让你能免费获得精确的冻结状态、精确的最终排名,以及整个赛事的动画回放。[工作原理 →](docs/why-flagfish.md#time-travel)
Scoreboard with freeze and time-travel
## 🔒 即使千人同时点击提交也能保证正确性 **CTF 中最棘手的 bug 是竞态 —— flagfish 对每一个竞态都使用数据库约束,而不是 Go mutex,并针对真实的 Postgres 进行了验证。** ``` 100 goroutines submit the same flag → exactly one solve 100 goroutines race a first blood → exactly one winner wrong answers (≈99% of submissions) → zero challenge locks taken ``` mutex 只能修复单个进程的问题;而约束可以永久修复所有进程的问题。[我们测试的 24 种竞态 →](docs/why-flagfish.md#concurrency) ## 🛠️ 组织者所需的一切,现已构建完成 拥有 17 个界面的管理控制台,没有占位符 —— 实时提交、统计数据、手动奖励、一键暂停开关、唯一 flag 池、对阵图、markdown CMS、防作弊档案,以及通过 HTTP 进行备份/还原/CTFd 导入。
Live submissions log  Statistics dashboard
| 游戏玩法 | 赛事运行 | 系统运维 | |---|---|---| | 用户和团队模式 | 实时提交 + 统计数据 | `/metrics` + `/readyz` | | 动态 + 静态计分 | 手动奖励与惩罚 | 实时 SSE | | 每个账户唯一的 flag | 一键暂停开关 | OpenAPI 3.1 + RFC 7807 | | First blood、提示、前置条件 | 防作弊档案 | Argon2id 认证、API token | | 冻结、对阵图、`?as_of=` | 备份 / 还原 / 导入 | 基于触发器的审计追踪 | ## 快速开始 ``` $ cp deploy/.env.example deploy/.env # set your secrets $ task deploy-up # flagfish + Postgres + MinIO → http://localhost:8000 $ flagfish admin create --email you@example.com # instance live + first admin, in one step ``` 完整的运行手册、TLS 和备份:**[部署指南 →](docs/ops/deploy.md)** · 每个配置项:**[配置说明 →](docs/ops/environment.md)** ## 状态 **Pre-1.0 阶段,且坦然面对。** 功能已完全满足解谜模式的 CTF 需求,并经过了严格测试 —— 不变性、并发和授权测试套件在每次代码变更时都会针对真实的 Postgres 运行。目前尚缺的是:发布带标签的正式版、稳定 API 的承诺,以及经历过真实赛事的检验。 **目前还没有在 flagfish 上举办过 CTF —— 成为第一个吧。** 今天非常适合用于小型或内部比赛;对于设有奖金的重磅赛事,请等待 1.0 版本。 ## 文档与设计 每个技术栈选择都有一份 [ADR](docs/adr/) 说明其成本,而详细的长篇设计位于 [`docs/design/`](docs/design/) 中。初次了解?请从 **[为什么开发 flagfish](docs/why-flagfish.md)** 开始。 ## 许可证 [Apache-2.0](LICENSE),包含明确的专利授权。欢迎参与贡献 —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md);安全报告请提交至 [SECURITY.md](SECURITY.md)。
标签:CTF平台, EVTX分析, Go, PostgreSQL, Ruby工具, 并发控制, 日志审计, 测试用例, 自托管, 防作弊