Skip to content

Repository files navigation

Transport Layer Lab + CTF v5

Aplicación funcional construida con Next.js, TypeScript, Supabase y Vercel para una exposición práctica sobre la capa de transporte.

Funciones

  • 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.

Despliegue en Supabase y Vercel

1. Crear o preparar Supabase

  1. Abre tu proyecto de Supabase.
  2. Ve a SQL Editor → New query.
  3. Copia y ejecuta completo supabase/schema.sql.
  4. Debe terminar sin errores. El script elimina y recrea las vistas para evitar 42P16.
  5. En Project Settings → API Keys, copia la Secret Key que comienza con sb_secret_.

2. Subir la carpeta ctf/plataforma a GitHub

La raíz del repositorio que conectes a Vercel debe contener package.json, app, public, lib y supabase.

3. Variables de entorno en Vercel

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_ALEATORIA

Aplica las variables a Production, Preview y Development. Después haz Redeploy.

4. Uso

  • 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.

Ejecución local

Crea .env.local con las mismas cuatro variables y ejecuta:

npm install
npm run dev

Abre http://localhost:3000 y http://localhost:3000/admin.

Nota sobre bloqueo por IP

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.

Capturas verificadas

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.

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages