Aplicación funcional construida con Next.js, TypeScript, Supabase y Vercel para una exposición práctica sobre la capa de transporte.
- Registro únicamente por nombre.
- Sala de espera: nadie ve ni descarga retos hasta que el administrador inicia.
- 10 retos públicos: 5 de investigación y 5 de recuperación de flags.
- Reto de prueba visible únicamente en
/admin. - Cronómetro configurable de 1 a 180 minutos.
- Inicio, reinicio y detención manual del CTF.
- Scorebank, ranking e intentos actualizados automáticamente.
- Pistas con penalización única de 20 puntos.
- Pausa automática de 60 segundos cada 5 respuestas incorrectas consecutivas.
- Bloqueo por jugador y por IP.
- Eliminación, reset y ajuste manual de puntos.
- Exportación CSV.
- Abre tu proyecto de Supabase.
- Ve a SQL Editor → New query.
- Copia y ejecuta completo
supabase/schema.sql. - Debe terminar sin errores. El script elimina y recrea las vistas para evitar
42P16. - En Project Settings → API Keys, copia la Secret Key que comienza con
sb_secret_.
La raíz del repositorio que conectes a Vercel debe contener package.json, app, public, lib y supabase.
Configura en Project Settings → Environment Variables:
SUPABASE_URL=https://TU-PROYECTO.supabase.co
SUPABASE_SECRET_KEY=sb_secret_TU_CLAVE
ADMIN_PASSWORD=TU_CLAVE_DE_ADMIN
ADMIN_SESSION_SECRET=UNA_CADENA_LARGA_ALEATORIAAplica las variables a Production, Preview y Development. Después haz Redeploy.
- Jugadores:
https://tu-dominio.vercel.app/ - Administración privada:
https://tu-dominio.vercel.app/admin - En administración, resuelve el reto prueba, selecciona la duración y pulsa INICIAR / REINICIAR RELOJ.
- DETENER Y OCULTAR RETOS devuelve a todos a la sala de espera sin borrar sus datos.
- BORRAR COMPETENCIA elimina jugadores, intentos, puntuaciones, pistas y bloqueos.
Crea .env.local con las mismas cuatro variables y ejecuta:
npm install
npm run devAbre http://localhost:3000 y http://localhost:3000/admin.
En una universidad varios participantes pueden compartir la misma IP pública. Bloquea primero al jugador; usa el bloqueo por IP solo cuando estés seguro.
La versión v6 incluye incident_silent_access.pcap con 421 paquetes reales y evidencia comprobada para los retos 1 al 5. Las soluciones privadas y los filtros de validación están en ../../SOLUCIONES_Y_EXPLICACION_PRIVADA.txt.