onlygoku/dbz-cyber-arena

GitHub: onlygoku/dbz-cyber-arena

一款生产就绪的龙珠主题 CTF 竞赛平台,解决安全培训和竞赛场景下快速搭建、公平竞技和作弊检测的核心需求。

Stars: 0 | Forks: 0

# 🐉 Dragon Ball Z Cyber Arena — CTF 平台 一个功能齐全、生产就绪的 Capture The Flag 竞赛平台,以 Dragon Ball Z 和中国赛博朋克美学为主题。 ## 功能概述 | 功能 | 详情 | |---|---| | **主题** | Dragon Ball Z + 赛博朋克黑客美学 | | **计分** | 静态分值,所有挑战共 6000 分 | | **队伍** | 最多 3 名成员,通过邀请码加入 | | **Flag 格式** | `PREFIX{inner_value}` — 前缀可在管理面板配置 | | **尝试次数** | 每个挑战 10 次;超出限制后每次错误提交扣 10 分 | | **速率限制** | 每队每秒 1 次提交 | | **动态 Flag** | 选定挑战使用基于每队 HMAC 派生的 flag | | **积分榜** | 实时排行榜,带 10 秒缓存;最后一小时冻结 | | **实时动态** | 解题事件实时流式更新 | | **庆祝动画** | Flag 正确时显示全屏弹窗 | | **Boss 挑战** | Shenron Ultimate Wish (1000 分) 触发 Shenron 画布动画 | | **First Blood** | 每个挑战的首个解题队伍获得徽章 | | **Dragon Radar** | 队伍仪表板上的 SVG 雷达图,显示分类进度 | | **自动提示** | 根据经过时间或解题数量阈值自动发布提示 | | **挑战导入** | 通过 ZIP 上传或目录扫描自动导入挑战 | | **安全监控** | 检测过多提交、同 IP 组队、快速解题等行为 | | **管理面板** | 全面管理:用户、队伍、挑战、提交记录、安全日志 | | **邮箱验证** | 基于 SMTP;开发模式下自动验证 | ## 快速开始 (本地 Docker Compose) ### 前置条件 - Docker ≥ 24 - Docker Compose ≥ 2.x ### 步骤 ``` # 克隆 repository git clone https://github.com/yourorg/ctf-platform.git cd ctf-platform # 复制 environment file (如需编辑) cp .env.example .env # 启动所有 services docker compose up --build # 打开 platform open http://localhost:5000 # 管理员登录 (默认) # 邮箱: admin@ctf.local # 密码: AdminPass123! ``` 平台**自动**执行以下操作: - 创建 PostgreSQL schema - 创建管理员账户 - 从 `challenges/` 目录导入所有挑战 ## 本地开发 (无 Docker) ``` # 创建 virtual environment python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 安装 dependencies pip install -r requirements.txt # 设置 environment cp .env.example .env # 编辑 .env — 将 DATABASE_URL 设置为您的本地 PostgreSQL 实例 # 运行 FLASK_ENV=development python run.py ``` ## 部署到 Render.com ### 选项 A — Blueprint (推荐) 1. 将代码推送到 GitHub。 2. 在 [Render Dashboard](https://dashboard.render.com) 中,点击 **New → Blueprint**。 3. 连接你的 GitHub 仓库。 4. Render 读取 `render.yaml` 并创建: - 一个运行 Gunicorn 的 **Web Service** - 一个 **PostgreSQL** 数据库 5. 通过 **Render → Environment → Secret Files** 设置敏感环境变量: - `ADMIN_PASSWORD` — 你的安全管理员密码 - `MAIL_USERNAME` / `MAIL_PASSWORD` — SMTP 凭据 6. 部署。首次启动会自动初始化数据库和管理员账户。 ### 选项 B — 手动 1. 在 Render 上**创建 PostgreSQL 数据库** (Free 或 Starter 套餐)。 2. **创建 Web Service**: - 环境:Python 3 - 构建命令:`pip install -r requirements.txt` - 启动命令:`gunicorn run:app --bind 0.0.0.0:$PORT --workers 2 --timeout 60` 3. 添加 `.env.example` 中的所有环境变量 (将密钥标记为 Secret)。 4. 将 `DATABASE_URL` 设置为步骤 1 中的 Internal Database URL。 ### 环境变量参考 | 变量 | 必填 | 描述 | |---|---|---| | `SECRET_KEY` | ✅ | Flask session secret (使用 Render 自动生成) | | `DATABASE_URL` | ✅ | PostgreSQL 连接字符串 | | `ADMIN_EMAIL` | ✅ | 管理员账户邮箱 (首次启动时创建) | | `ADMIN_PASSWORD` | ✅ | 管理员账户密码 | | `FLAG_PREFIX` | ✅ | Flag 前缀,例如 `THA` → `THA{...}` | | `CTF_NAME` | — | 比赛显示名称 | | `DYNAMIC_FLAG_SECRET` | ✅ | 用于每队动态 flag 的 HMAC 密钥 | | `MAX_TEAM_SIZE` | — | 默认值:3 | | `MAX_ATTEMPTS` | — | 默认值:10 | | `PENALTY_POINTS` | — | 默认值:10 | | `SCOREBOARD_CACHE_TTL` | — | 积分榜刷新间隔秒数 (默认值:10) | | `MAIL_SUPPRESS_SEND` | — | 设置为 `true` 以跳过邮件发送 (开发模式) | | `MAIL_SERVER` | — | SMTP 主机 | | `MAIL_USERNAME` | — | SMTP 用户名 | | `MAIL_PASSWORD` | — | SMTP 密码 | ## 挑战格式 ### 目录结构 ``` challenges/ └── my_challenge/ ├── challenge.json # Metadata ├── description.md # Challenge description (HTML supported) ├── flag.txt # Inner flag value only (no PREFIX{}) └── files/ # Optional downloadable files ``` ### challenge.json Schema ``` { "title": "My Challenge", "category": "web", "difficulty": "easy", "points": 150, "is_dynamic": false, "is_hidden": false, "is_boss": false, "connection_info": "nc pwn.server.com 1337", "hints": [ { "content": "Hint text here", "cost": 0, "auto_release_minutes": 30, "auto_release_solves": null, "is_visible": false } ] } ``` ### Flag 格式 在 `flag.txt` 中**仅存储内部值**: ``` my_secret_flag_value ``` 平台会自动添加配置的前缀: ``` THA{my_secret_flag_value} ``` ### 通过管理面板导入 1. 将挑战目录打包为 Zip:`zip -r my_challenge.zip my_challenge/` 2. 前往 **Admin → Challenges → Import ZIP** 3. 上传 zip 文件 ## 动态 Flag 在 `challenge.json` 中启用 `"is_dynamic": true`。 每个队伍收到一个唯一的 flag,派生自: ``` HMAC-SHA256(DYNAMIC_FLAG_SECRET, secret:team_id:challenge_id)[:8] ``` 示例结果:`THA{a91f3c7e}` 平台会根据队伍的具体值验证提交的 flag。 ## 管理面板 访问地址 `/admin` (需要管理员账户)。 | 区域 | 描述 | |---|---| | **Dashboard** | 统计数据、事件控制、挑战健康监控 | | **Challenges** | 创建、编辑、隐藏/显示、删除、ZIP 导入 | | **Users** | 搜索、封禁/解封、验证、提升为管理员 | | **Teams** | 封禁、暂停、重置进度 | | **Submissions** | 所有 flag 提交的分页日志 | | **Security** | 可疑活动日志 (过多尝试、同 IP、快速解题) | | **Settings** | 比赛开始/停止、积分榜冻结、flag 前缀、公告 | ## 积分榜冻结 在比赛的**最后一小时**: 1. 管理员点击 **Freeze Scoreboard** (也可手动触发)。 2. 公共积分榜显示冻结时的排名。 3. 管理员可以看到实时积分榜。 4. 比赛结束时,点击 **End Event** — 公布实时排名。 ## Shenron Boss 挑战 当 **Shenron Ultimate Wish** 挑战被解开时: 1. 正确的 flag 提交触发庆祝弹窗。 2. **全屏画布动画** 渲染 Shenron — 神龙 — 带着粒子效果飞过屏幕。 3. 首个解出该题的队伍获得 🩸 **First Blood** 徽章。 ## 项目结构 ``` ctf-platform/ ├── app/ │ ├── __init__.py # App factory, bootstrap │ ├── models/ # SQLAlchemy models │ │ ├── user.py │ │ ├── team.py │ │ ├── challenge.py │ │ ├── submission.py │ │ ├── event.py │ │ └── security.py │ ├── routes/ # Flask blueprints │ │ ├── auth.py # Register, login, verify │ │ ├── team.py # Create, join, manage │ │ ├── challenges.py # List, detail, flag submit │ │ ├── scoreboard.py # Leaderboard + feed │ │ ├── admin.py # Full admin panel │ │ └── api.py # JSON polling endpoints │ ├── services/ # Business logic │ │ ├── flag_service.py # Validation, dynamic flags │ │ ├── score_service.py # Score calculation │ │ ├── cache_service.py # In-process TTL cache │ │ ├── hint_service.py # Auto-release hints │ │ ├── security_service.py # Anomaly detection │ │ ├── email_service.py │ │ └── challenge_import.py │ ├── templates/ # Jinja2 templates │ ├── static/ # CSS, JS, images │ └── utils/ # Decorators, helpers ├── challenges/ # Bundled example challenges ├── docker/ │ └── postgres/init.sql ├── config.py ├── run.py ├── requirements.txt ├── Dockerfile ├── docker-compose.yml ├── render.yaml ├── Procfile └── .env.example ``` ## 安全说明 - 所有密码使用 Werkzeug 的 `generate_password_hash` (scrypt/pbkdf2) 进行哈希处理。 - Flag 比较使用 `hmac.compare_digest` 以防止计时攻击。 - 动态 flag 生成使用带有服务器端密钥的 HMAC-SHA256。 - 管理员路由要求用户记录具有 `is_admin=True`。 - 速率限制在提交层强制执行 (每队每秒 1 次提交)。 - 安全事件会被记录以供管理员审查。 ## 许可证 MIT — 可免费用于教育和竞赛用途。 *Power up. Hack the planet. Gather the Dragon Balls.* 🐉
标签:CTF平台, DNS解析, Docker, Flask, HMAC校验, meg, PostgreSQL, Python, Render部署, SVG动画, Syscall, TailwindCSS, WebSocket, Web开发, 七龙珠, 依赖分析, 信息安全, 动态Flag, 后端开发, 夺旗赛, 安全培训, 安全监控, 安全防御评估, 实时记分板, 开源项目, 无后门, 测试用例, 竞赛系统, 管理员面板, 网络安全, 请求拦截, 赛博朋克, 逆向工具, 邮件验证, 隐私保护, 黑客技术