For English version English
Plataforma extensible de laboratorios de ethical hacking Aplicaciones vulnerables realistas · Dashboard gamificado · Flags HMAC · Pistas progresivas
DinosecLabs es una plataforma extensible de entrenamiento en ethical hacking completamente autocontenida en Docker. Cada laboratorio es una aplicacion con vulnerabilidades ocultas: sin etiquetas, sin pistas en la interfaz, sin ayuda. Lo atacas como un pentester real.
La plataforma arranca con el track OWASP Top 10 2025 (10 labs, 21 flags) y esta diseñada para crecer: nuevos tracks pueden anadirse de forma independiente sin modificar la infraestructura base.
Cuenta con un dashboard gamificado centraliza todo: flags unicas por deployment generadas con HMAC, puedes canjear los DinoCoins por pistas progresivas por niveles y un Salon de la Fama publico impulsado por GitHub Actions.
Desarrollado por @Snifer · sniferl4bs.com
Si este proyecto te resulta util, considera apoyar su desarrollo:
| Caracteristica | Descripcion |
|---|---|
| Laboratorios realistas | 10 aplicaciones sin ninguna pista en la UI |
| 21 flags ocultas | Solo accesibles explotando la vulnerabilidad correctamente |
| Flags HMAC unicas | HMAC-SHA256(FLAG_SECRET, vuln_id)[:20] — unicas por deployment |
| Sistema de monedas | 100–200 monedas por flag completada |
| Hints progresivos | 3 niveles por lab (50 / 75 / 100 monedas, o gratis por progresion) |
| Notas por lab | Bloc integrado con auto-guardado, persistido en SQLite |
| Resetear estado | Reinicia el estado interno del lab sin reconstruir la imagen |
| Progreso exportable | Export CSV detallado desde el dashboard |
| Busqueda y filtro | Filtra labs por estado: Todos / Online / Offline / Completados |
| Health checks HTTP | Distingue entre running y crashed en tiempo real |
| Tiempo activo | Chip HH:MM:SS por lab mientras esta en ejecucion |
| Auto-stop | Detiene labs inactivos automaticamente (por defecto: 4 horas) |
| Salon de la Fama | Via GitHub Issue + GitHub Action automatico |
| Build offline | Todos los paquetes pip incluidos en packages/ |
| Tracks dinamicos | Nuevos tracks se pueden agregar desde tracks/mi-track/track.json |
El dashboard corre en http://localhost:8000 y tiene cuatro pestanas:
| Pestana | Contenido |
|---|---|
| OWASP Top 10 2025 | Grid de labs: iniciar / detener / enviar flag / hints / notas / reset |
| OWASP API Top 10 | Referencia del API Security Top 10 (labs proximos) |
| Container & K8s | Referencia de vulnerabilidades en contenedores y Kubernetes (labs planificados) |
| About | Informacion del proyecto, desarrollador y roadmap integrado |
10 laboratorios · 21 flags · maximo 3000 monedas
| Lab | Categoria | Aplicacion | Puerto |
|---|---|---|---|
| A01 | Broken Access Control | CorpHR — Portal de RRHH | 8001 |
| A02 | Security Misconfiguration | DevPortal — Portal DevOps interno | 8002 |
| A03 | Software Supply Chain Failures | PkgManager — Gestor de dependencias | 8003 |
| A04 | Cryptographic Failures | SecureBank — Banca en linea | 8004 |
| A05 | Injection | ShopCorp — Marketplace e-commerce | 8005 |
| A06 | Insecure Design | BizStore — Marketplace B2B | 8006 |
| A07 | Authentication Failures | EmpPortal — Portal de empleados | 8007 |
| A08 | Software & Data Integrity Failures | UpdateHub — Sistema de actualizaciones | 8008 |
| A09 | Security Logging & Alerting Failures | AuditLog — Portal de compliance | 8009 |
| A10 | Mishandling of Exceptional Conditions | DataAPI — API de datos y analytics | 8010 |
| Requisito | Version minima |
|---|---|
| Docker Engine | 24.x |
| docker-compose | 2.x |
| RAM libre | 2 GB |
| Disco libre | 3 GB |
| Puertos libres | 8000 – 8010 |
git clone https://github.com/Snifer/DinoSecL4b.git
cd DinoSecL4b/owasp-labs
bash setup.shAbre el dashboard en: http://localhost:8000
setup.sh detecta el sistema operativo, verifica dependencias, genera el FLAG_SECRET, descarga paquetes offline si faltan, construye las imagenes y arranca el dashboard automaticamente.
Actualmente funciona sin problemas en Linux y MacOS si encuentras algún bug o error no dudes en abrir un issue y reportarlo.
1. Iniciar un lab → boton Start en el dashboard (o ./manage.sh start aXX)
2. Abrir el lab → boton Open
3. Explorar la aplicacion Actua como un pentester real — sin pistas en la UI
4. Explotar la vuln Encuentra la flag oculta dentro de los datos
5. Enviar la flag → boton Flag → pega FLAG{...} → Submit
6. Ganar monedas → compra hints si te quedas bloqueado
7. Tomar notas → boton Notes — auto-guardado por lab
8. Salon de la Fama → Hall of Fame → ingresa tu alias → GitHub Issue
Las flags son unicas por deployment: derivadas de HMAC-SHA256(FLAG_SECRET, vuln_id)[:20]. No pueden compartirse entre instalaciones distintas.
FLAG_SECRET se genera automaticamente en .env durante el setup.
Para consultar los valores de flags activos en tu instalacion:
curl http://localhost:8000/api/flag-values| Dificultad | Monedas | Ejemplos |
|---|---|---|
| Facil | 100 | IDOR, config expuesta, panel oculto |
| Media | 150 | SQLi, JWT forgery, brute force |
| Dificil | 200 | RCE (CMDi, pickle, SSTI) |
Tres niveles por laboratorio:
| Nivel | Coste | Contenido |
|---|---|---|
| 1 | 50 monedas o gratis* | Direccion general del ataque |
| 2 | 75 monedas | Tecnica especifica a usar |
| 3 | 100 monedas | Pista casi completa |
*El nivel 1 del lab N+1 se desbloquea gratis al enviar cualquier flag del lab N.
1. Dashboard → Hall of Fame → Submit my score
2. Ingresa tu alias → Submit
3. Se abre un GitHub Issue pre-rellenado → haz clic en "Submit new issue"
4. GitHub Action parsea tu puntuacion, actualiza HALL_OF_FAME.md y cierra el issue
./manage.sh status # Ver estado de todos los labs
./manage.sh start a01 # Iniciar un lab especifico
./manage.sh stop a01 # Detener un lab
./manage.sh start-all # Iniciar todos los labs
./manage.sh logs a05 # Ver logs en tiempo real
./manage.sh build # Reconstruir todas las imagenesowasp-labs/
├── setup.sh # Script de instalacion y arranque
├── manage.sh # CLI de gestion de labs
├── docker-compose.yml # Orquestacion de 11 servicios
├── .env.example
├── packages/ # Pip wheels para instalacion offline
├── scores.json # Datos del Hall of Fame
├── HALL_OF_FAME.md
├── .github/
│ └── workflows/
│ └── hall-of-fame.yml # GitHub Action: procesa issues de puntuacion
├── tracks/
│ └── owasp-top10-2025/
│ └── track.json
├── dashboard/
│ ├── app.py # Flask + Docker SDK + SQLite
│ ├── Dockerfile
│ └── templates/
│ └── index.html # UI completa del dashboard
└── labs/
├── a01-broken-access-control/
├── a02-security-misconfiguration/
├── a03-supply-chain/
├── a04-cryptographic-failures/
├── a05-injection/
├── a06-insecure-design/
├── a07-auth-failures/
├── a08-integrity-failures/
├── a09-logging-failures/
└── a10-exceptional-conditions/
# Verificar que Docker esta en ejecucion
docker info
# Revisar los logs del dashboard
docker compose logs dashboard
# Comprobar que los puertos 8000-8010 estan libres
ss -tlnp | grep -E '800[0-9]|8010'# Ver logs del lab especifico (ejemplo: A01)
docker compose logs a01-broken-access-control
# Reiniciar solo ese lab
docker compose restart a01-broken-access-control
# O desde la terminal de gestion
./manage.sh start a01Las flags son unicas por deployment. Si reinstalaste o regeneraste el .env, las flags cambian. Consulta los valores actuales:
curl http://localhost:8000/api/flag-valuesSi el archivo .env fue eliminado, ejecuta bash setup.sh de nuevo para regenerar FLAG_SECRET. Las flags anteriores quedaran invalidadas.
chmod +x setup.sh manage.sh
bash setup.shLos paquetes pip estan incluidos en packages/ — el build es completamente offline. Si necesitas regenerarlos:
pip3 download flask docker pyjwt \
-d packages/ \
--platform manylinux2014_x86_64 \
--python-version 312 \
--only-binary=:all:docker system df
free -hUsa el dashboard para iniciar solo los labs necesarios en cada sesion. El auto-stop (4h por defecto) libera recursos automaticamente.
docker compose down -v --remove-orphans
docker system prune -f
bash setup.sh# Desde el dashboard → boton Reset progress
# O via API:
curl -X POST http://localhost:8000/api/resetLas contribuciones son bienvenidas: nuevos labs, nuevos tracks, traducciones y correcciones de bugs.
- Haz fork del repositorio
- Crea una rama:
git checkout -b feature/mi-track - Crea la estructura en
tracks/mi-track/con el formato siguiente - Asegurate de que cada lab tenga su propio
Dockerfiley sea autocontenido - Abre un Pull Request describiendo el track, vulnerabilidades cubiertas y flags incluidas
{
"id": "mi-track",
"name": "Nombre del Track",
"description": "Descripcion del track",
"labs": [
{
"id": "lab-id",
"name": "Nombre del Lab",
"description": "Descripcion breve",
"category": "Categoria OWASP",
"port": 8011,
"service": "nombre-servicio-docker",
"flags": [
{
"id": "vuln_id_unico",
"description": "Descripcion de la vulnerabilidad",
"points": 150,
"hints": [
"Hint nivel 1 (direccion general)",
"Hint nivel 2 (tecnica especifica)",
"Hint nivel 3 (pista detallada)"
]
}
]
}
]
}tracks/
└── mi-track/
├── track.json
└── labs/
└── lab-01/
├── Dockerfile
└── app/
Para reportar bugs o proponer mejoras, abre un Issue en GitHub.
| Track | Estado |
|---|---|
| OWASP Top 10 2025 | Disponible |
| OWASP API Security Top 10 | Proximamente |
| Cloud Security Fundamentals | Planificado |
| Container & Kubernetes Security | Planificado |
| Active Directory Attacks | En consideracion |
| Mobile Security (Android) | En consideracion |
| Cert Prep: eJPT / OSCP / CEH | En consideracion |
Este laboratorio se proporciona unicamente con fines educativos y de entrenamiento en ethical hacking. No esta destinado para uso en entornos de produccion. Utilizalo de manera etica y responsable, unicamente sobre sistemas propios o con autorizacion expresa.
MIT — consulta el archivo LICENSE para mas detalles.
Desarrollado por @Snifer · sniferl4bs.com
Si este proyecto te resulta util, considera apoyar su desarrollo: