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 — 教育项目,弗罗茨瓦夫理工大学*
标签:搜索引擎查询, 测试用例, 版权保护