vev999/VulnBank

GitHub: vev999/VulnBank

Stars: 0 | Forks: 2

# VulnBank — PWr CTF Edition ## Szybki start git clone cd vulnbank docker-compose up --build Pierwsze uruchomienie trwa ~2 minuty (build + migracja bazy). | Adres | Co to | |-------|-------| | **http://localhost:3000/ctf/register** | Zarejestruj się jako gracz CTF — zacznij tutaj | | **http://localhost:3000/login** | VulnBank — podatna aplikacja bankowa (cel ataków) | ## Jak to działa — dwa osobne systemy ┌─────────────────────────┐ ┌──────────────────────────┐ │ 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 │ │ │ └─────────────────────────┘ └──────────────────────────┘ **Przepływ:** 1. Otwórz `/ctf/register` → utwórz konto gracza (nick + email + hasło) 2. Kliknij **"Uruchom VulnBank ↗"** → bank otwiera się w nowej karcie 3. Zaloguj się do banku jako alice/bob/admin i atakuj 4. Zdobytą flagę `PWR{...}` wklej w portalu CTF → wynik zapisuje się w scoreboard ## Mapa portów | Port | Serwis | Opis | |------|--------|------| | 3000 | Frontend | React UI — bank i portal CTF (przez nginx) | | 5000 | Backend | Flask API (bezpośredni dostęp do `/api/*`) | | 6379 | Redis | Cache (bez hasła — podatność A02) | | 5432 | PostgreSQL | Baza danych (wewnętrzna) | ## Konta bankowe (cele ataków) | Email | Hasło | Uwagi | |-------|-------|-------| | alice@vulnbank.pl | qwerty123 | Ofiara IDOR i przejęcia konta | | bob@vulnbank.pl | password123 | Cel brute-force (A07) | | charlie@vulnbank.pl | charlie2024 | Hash MD5 do złamania (A04) | | admin@vulnbank.pl | admin123 | Panel admina | Konta bankowe są **osobne** od kont w portalu CTF. Gracz rejestruje się sam w `/ctf/register`. ## Wyzwania CTF (20 flag, 2700 punktów) | ID | Nazwa | Trudność | Punkty | |----|-------|----------|--------| | A01 | Broken Access Control (IDOR) | 🟢 easy | 100 | | A02 | Security Misconfiguration | 🟢 easy | 100 | | A03 | Supply Chain Failures | 🟢 easy | 100 | | A04 | Cryptographic Failures (MD5) | 🟡 medium | 150 | | A05 | SQL Injection | 🟡 medium | 150 | | A06 | Insecure Design | 🟢 easy | 100 | | A07 | Authentication Failures | 🟢 easy | 100 | | A08 | JWT None Algorithm | 🟡 medium | 150 | | A09 | Logging & Alerting Failures | 🟢 easy | 100 | | A10 | Exceptional Conditions | 🟢 easy | 100 | | A11 | Open Redirect | 🟢 easy | 100 | | A12 | SSRF | 🟡 medium | 150 | | A13 | Command Injection | 🔴 hard | 200 | | A14 | Mass Assignment | 🟡 medium | 150 | | A15 | Path Traversal | 🟡 medium | 150 | | A16 | Insecure Deserialization | 🔴 hard | 200 | | A17 | Sensitive Information Disclosure | 🟢 easy | 100 | | A18 | Server-Side Template Injection | 🔴 hard | 200 | | A19 | Source Maps Leak | 🟢 easy | 100 | | A20 | Race Condition - Double Spend | 🔴 hard | 200 | Hinty i submit flag dostępne po zalogowaniu do portalu CTF (`/ctf`). Lista wyzwań jest pobierana z backendu, więc nie ma już ręcznego duplikowania danych we frontendzie. ## API — endpointy CTF portalu 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) ## Narzędzia potrzebne do wyzwań - **Przeglądarka + DevTools** — większość wyzwań easy - **curl** — testy API z wiersza poleceń - **[Burp Suite Community](https://portswigger.net/burp/communitydownload)** — proxy do A05, A07, A08 - **[jwt.io](https://jwt.io)** — analiza i modyfikacja tokenów (A08) - **[crackstation.net](https://crackstation.net)** — łamanie hashy MD5 (A04) ## Struktura projektu 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) ## Dodawanie własnych podatności ## Rozwiązania Pełne write-upy: [SOLUTIONS.md](SOLUTIONS.md) ## Ostrzeżenie bezpieczeństwa ⚠️ 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 — projekt edukacyjny, Politechnika Wrocławska*