vev999/VulnBank

GitHub: vev999/VulnBank

一款用于 Web 安全教育的故意存在漏洞的银行应用靶场,内置 20 个 OWASP Top 10 相关的 CTF 挑战和独立的竞赛门户。

Stars: 0 | Forks: 3

# VulnBank — PWr CTF 版 ## 快速开始 ``` git clone cd vulnbank docker-compose up --build ``` 首次启动大约需要 ~2 分钟(构建 + 数据库迁移)。 | 地址 | 说明 | |-------|-------| | **http://localhost:3000/ctf/register** | 注册为 CTF 选手 — 从这里开始 | | **http://localhost:3000/login** | VulnBank — 存在漏洞的银行应用(攻击目标) | ## 运行原理 — 两个独立的系统 ``` ┌─────────────────────────┐ ┌──────────────────────────┐ │ CTF Portal │ │ VulnBank │ │ localhost:3000/ctf/* │ ──────▶│ localhost:3000/* │ │ │ atak │ │ │ • Twoje konto gracza │ │ • Konta alice/bob/admin │ │ • Lista wyzwań + hinty │ │ • Podatne endpointy API │ │ • Submit flag │ │ • Cel wszystkich ataków │ │ • Scoreboard │ │ │ └─────────────────────────┘ └──────────────────────────┘ ``` **流程:** 1. 打开 `/ctf/register` → 创建选手账号(昵称 + 邮箱 + 密码) 2. 点击 **“启动 VulnBank ↗”** → 银行应用会在新标签页中打开 3. 使用 alice/bob/admin 账号登录银行应用并进行攻击 4. 将获取到的 `PWR{...}` flag 粘贴到 CTF 门户中 → 成绩将记录在 scoreboard 中 ## 端口映射 | 端口 | 服务 | 说明 | |------|--------|------| | 3000 | Frontend | React UI — 银行应用和 CTF 门户(通过 nginx) | | 5000 | Backend | Flask API(可直接访问 `/api/*`) | | 6379 | Redis | 缓存(无密码 — A02 漏洞) | | 5432 | PostgreSQL | 数据库(内部) | ## 银行账号(攻击目标) | 邮箱 | 密码 | 备注 | |-------|-------|-------| | alice@vulnbank.pl | qwerty123 | IDOR 和账号接管的受害者 | | bob@vulnbank.pl | password123 | 暴力破解目标 (A07) | | charlie@vulnbank.pl | charlie2024 | 待破解的 MD5 哈希 (A04) | | admin@vulnbank.pl | admin123 | 管理员面板 | 银行账号与 CTF 门户账号是**相互独立**的。选手需自行在 `/ctf/register` 注册。 ## CTF 挑战(20 个 flag,2700 分) | ID | 名称 | 难度 | 分值 | |----|-------|----------|--------| | A01 | 失效的访问控制 (IDOR) | 🟢 easy | 100 | | A02 | 安全配置错误 | 🟢 easy | 100 | | A03 | 供应链缺陷 | 🟢 easy | 100 | | A04 | 加密机制失效 (MD5) | 🟡 medium | 150 | | A05 | SQL 注入 | 🟡 medium | 150 | | A06 | 不安全设计 | 🟢 easy | 100 | | A07 | 身份验证失效 | 🟢 easy | 100 | | A08 | JWT None Algorithm | 🟡 medium | 150 | | A09 | 日志与监控失效 | 🟢 easy | 100 | | A10 | 异常情况 | 🟢 easy | 100 | | A11 | 开放重定向 | 🟢 easy | 100 | | A12 | SSRF | 🟡 medium | 150 | | A13 | 命令注入 | 🔴 hard | 200 | | A14 | 批量赋值 | 🟡 medium | 150 | | A15 | 路径遍历 | 🟡 medium | 150 | | A16 | 不安全的反序列化 | 🔴 hard | 200 | | A17 | 敏感信息泄露 | 🟢 easy | 100 | | A18 | 服务端模板注入 (SSTI) | 🔴 hard | 200 | | A19 | Source Maps 泄露 | 🟢 easy | 100 | | A20 | 竞态条件 - 双重消费 | 🔴 hard | 200 | 提示和提交 flag 的功能可在登录 CTF 门户 (`/ctf`) 后使用。挑战列表是从后端获取的,因此无需再在前端手动复制数据。 ## API — CTF 门户 endpoint ``` POST /api/ctf/auth/register Rejestracja gracza POST /api/ctf/auth/login Logowanie gracza (zwraca CTF JWT) GET /api/ctf/auth/me Dane zalogowanego gracza GET /api/ctf/flags/ Lista wyzwań (publiczna) POST /api/ctf/flags/check Submit flagi (wymaga CTF JWT) GET /api/ctf/flags/progress Postęp gracza (wymaga CTF JWT) GET /api/ctf/scoreboard/ Ranking (wymaga CTF JWT) ``` ## 挑战所需工具 - **浏览器 + DevTools** — 适用于大部分 easy 难度的挑战 - **curl** — 通过命令行测试 API - **[Burp Suite 社区版](https://portswigger.net/burp/communitydownload)** — 用于 A05, A07, A08 的代理工具 - **[jwt.io](https://jwt.io)** — 分析和修改 token (A08) - **[crackstation.net](https://crackstation.net)** — 破解 MD5 哈希 (A04) ## 项目结构 ``` vulnbank/ ├── docker-compose.yml ├── frontend/ │ └── src/ │ ├── pages/ │ │ ├── ctf/ # Portal CTF (Login, Register, Dashboard, Scoreboard) │ │ └── ... # Strony bankowe (Dashboard, Transfer, ...) │ ├── context/ │ │ ├── AuthContext.jsx # Stan konta bankowego │ │ └── CTFAuthContext.jsx # Stan konta gracza CTF │ └── api/ │ ├── client.js # Axios dla banku (vulnbank_token) │ └── ctfClient.js # Axios dla CTF portalu (ctf_token) └── backend/ ├── core/ # Logika bankowa (auth, accounts, transactions...) ├── ctf/ # CTF portal (auth, flags, scoreboard) ├── models/ │ ├── user.py, account.py, ... # Modele bankowe │ ├── player.py # Gracz CTF (bcrypt, osobna tabela) │ └── player_solve.py # Rozwiązane wyzwania gracza └── challenges/ # Blueprinty podatności (auto-discovery) ``` ## 添加自定义漏洞 ## 解题思路 完整的 write-up:[SOLUTIONS.md](SOLUTIONS.md) ## 安全警告 ``` ⚠️ Ta aplikacja jest CELOWO PODATNA na ataki. ⚠️ Uruchamiaj TYLKO lokalnie w izolowanym środowisku Docker. ⚠️ NIE wystawiaj na publiczny internet. ⚠️ NIE używaj prawdziwych danych osobowych. ``` *VulnBank — 教育项目,弗罗茨瓦夫理工大学*
标签:搜索引擎查询, 测试用例, 版权保护