Share
## https://sploitus.com/exploit?id=D6B5DA09-5F17-5956-91FA-711F034E61BD
# vulnlab 🔓

[![CI Status](https://github.com/37Linard/vulnlab/actions/workflows/ci.yml/badge.svg)](https://github.com/37Linard/vulnlab/actions/workflows/ci.yml)
[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
[![Exploits](https://img.shields.io/badge/exploits-8/8-success)](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! 🙌