Share
## https://sploitus.com/exploit?id=D6B5DA09-5F17-5956-91FA-711F034E61BD
# vulnlab 🔓
[](https://github.com/37Linard/vulnlab/actions/workflows/ci.yml)
[](https://www.python.org/downloads/)
[](LICENSE)
[](docs/writeups/)
> Uma aplicação Flask **intencionalmente vulnerável** para fins educacionais, cobrindo 8 categorias do OWASP Top 10 (2021).
---
## 📋 Visão Geral
**vulnlab** é um laboratório de segurança prático que implementa vulnerabilidades reais de aplicações web. Cada uma possui:
✅ **Exploit funcional** — código que demonstra a vulnerabilidade
✅ **Testes automatizados** — cada exploit é um teste pytest
✅ **Writeup completo** — análise de causa raiz, impacto e correção
✅ **CI/CD validação** — testes rodam em cada push, comprovando comportamento
**Objetivo**: Demonstrar habilidades práticas de AppSec end-to-end — o mesmo ciclo de um pentest real ou bug bounty report.
---
## 🎯 Vulnerabilidades Implementadas
| # | Vulnerabilidade | Categoria OWASP | Endpoint | Writeup |
|---|---|---|---|---|
| 1 | **IDOR** (Insecure Direct Object Reference) | A01 - Broken Access Control | `GET /a01/invoices/` | [📄](docs/writeups/a01-idor.md) |
| 2 | **Criptografia Fraca** (Token previsível) | A02 - Cryptographic Failures | `POST /a02/reset` | [📄](docs/writeups/a02-crypto.md) |
| 3 | **SQL Injection** (Login bypass) | A03 - Injection | `POST /a03-sqli/login` | [📄](docs/writeups/a03-sqli.md) |
| 4 | **Command Injection** (RCE) | A03 - Injection | `GET /a03-cmdi/echo` | [📄](docs/writeups/a03-cmdi.md) |
| 5 | **Misconfiguration** (Debug endpoint) | A05 - Security Misconfiguration | `GET /a05/internal/debug` | [📄](docs/writeups/a05-misconfig.md) |
| 6 | **JWT Bypass** (`alg=none`) | A07 - Identification & Auth Failures | `GET /a07/admin/flag` | [📄](docs/writeups/a07-authfail.md) |
| 7 | **Deserialização Insegura** (Pickle RCE) | A08 - Software/Data Integrity Failures | `POST /a08/profile/import` | [📄](docs/writeups/a08-deserialize.md) |
| 8 | **SSRF** (Server-Side Request Forgery) | A10 - Server-Side Request Forgery | `GET /a10/preview` | [📄](docs/writeups/a10-ssrf.md) |
---
## 🚀 Quick Start
### Com Docker (Recomendado)
```bash
git clone https://github.com/37Linard/vulnlab.git
cd vulnlab
docker compose up --build
```
Acesse: **http://localhost:5000**
Página inicial lista todos os challenges disponíveis.
### Localmente
```bash
# Clonar repo
git clone https://github.com/37Linard/vulnlab.git
cd vulnlab
# Instalar dependências
pip install -r requirements.txt
# Rodar app
python wsgi.py
```
---
## 🧪 Rodando os Exploits
A suíte completa de exploits são testes pytest:
```bash
pip install -r requirements.txt
python -m pytest tests/ -v
```
**Resultado esperado**: 8/8 testes passando ✅
### ⚠️ Nota sobre Windows Nativo
Um exploit (`test_a03_cmdi_rce`) usa encadeamento de shell POSIX (`;`) e é pulado em Windows nativo. Para validar todos os 8:
```bash
docker compose exec vulnlab python -m pytest tests/ -v
```
---
## 🏗️ Arquitetura
```
vulnlab/
├── app/
│ ├── __init__.py # Registro de blueprints
│ ├── config.py # Configuração Flask
│ ├── models.py # User, Invoice (ORM)
│ ├── extensions.py # DB, JWT init
│ └── challenges/ # Um blueprint por vulnerabilidade
│ ├── a01_idor.py
│ ├── a02_crypto.py
│ ├── a03_sqli.py
│ ├── a03_cmdi.py
│ ├── a05_misconfig.py
│ ├── a07_authfail.py
│ ├── a08_deserialize.py
│ └── a10_ssrf.py
├── tests/
│ ├── conftest.py # Fixtures pytest
│ └── test_exploits.py # 8 testes/exploits
├── docs/writeups/ # Análise detalhada de cada vuln
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
└── wsgi.py # Entry point
```
**Design**: Cada challenge é independente — leia, execute e corrija isoladamente sem entender o resto da aplicação.
---
## 💻 Stack Tecnológico
| Componente | Versão |
|---|---|
| **Python** | 3.11+ |
| **Framework** | Flask |
| **ORM** | SQLAlchemy |
| **Auth** | PyJWT |
| **Testes** | pytest |
| **Container** | Docker & Docker Compose |
---
## 📚 Como Usar para Aprender
1. **Escolha uma vulnerabilidade** da tabela acima
2. **Leia o writeup** em `docs/writeups/`
3. **Estude o código vulnerável** em `app/challenges/`
4. **Execute o exploit** no teste pytest
5. **Implemente a correção** (extra: submeta PR!)
---
## ⚠️ Disclaimer
> **Uso educacional apenas.**
> - Todo bug é deliberado e documentado
> - Isolado a este código, não afeta sistemas reais
> - **NÃO faça deploy público** desta aplicação
---
## 👨💻 Autor
**Linard37**
- GitHub: [@37Linard](https://github.com/37Linard)
- Repositório: [vulnlab](https://github.com/37Linard/vulnlab)
---
## 📜 Licença
MIT — veja [LICENSE](LICENSE) para detalhes.
---
**Última atualização**: Julho 2024
**Status**: Em desenvolvimento ativo
**Contribuições**: Pull requests bem-vindas! 🙌