Juice Shop: el reto moderno

Avatar de Apuntes Hacking

Introducción

En el post anterior desplegaste DVWA, el abuelo de las aplicaciones vulnerables. Funciona, enseña lo básico y te prepara, pero… seamos sinceros: su interfaz parece sacada de una intranet de los 2000 y las vulnerabilidades son las de toda la vida.

Hoy saltamos al presente. OWASP Juice Shop es la aplicación vulnerable más moderna y completa que existe. Está escrita en Node.js, usa Angular en el frontend, maneja tokens JWT por todas partes y expone una API GraphQL. Encontrarás desde inyecciones SQL clásicas hasta fallos de lógica de negocio, pasando por rotura de control de acceso, JWT forging, clickjacking y hasta un reto de criptomonedas.

Y lo mejor: se despliega con un solo contenedor y sin base de datos externa. Docker puro y duro. En tres comandos estarás listo para empezar a picar.

¿Qué es OWASP Juice Shop?

Es un proyecto flagship de OWASP. Una tienda de zumos online, deliberadamente insegura, que contiene más de 100 retos clasificados por dificultad y categoría. Tiene una comunidad enorme y hasta un libro gratuito de 200 páginas con soluciones detalladas.

Características que la diferencian de DVWA:

  • Stack moderno: Node.js + Express en backend, Angular en frontend, SQLite como base de datos (embebida, sin servicio separado).
  • Autenticación JWT: la mayoría de los retos avanzados implican manipular o falsificar JSON Web Tokens.
  • API GraphQL: además de REST, expone un endpoint GraphQL con sus propias meteduras de pata de seguridad.
  • Score Board interactivo: un tablero que muestra tu progreso y te reta a encontrar incluso su propia existencia.
  • Sin botón de «reset» manual: cada vez que reinicias el contenedor, la base de datos SQLite se restaura desde cero.

1. Crear el directorio y el docker-compose.yml

Crea una carpeta nueva para Juice Shop y entra en ella:

docker compose down --rmi all
Bash

Ahora crea el archivo docker-compose.yml:

docker compose down --rmi all
Bash

Pega esto:

docker compose down --rmi all
Bash

¡Así de simple! No necesita base de datos externa, volúmenes para persistencia ni variables de entorno. Juice Shop lleva dentro todo lo necesario.

2. Levantar Juice Shop

docker compose down --rmi all
Bash

La primera vez descargará la imagen (alrededor de 400 MB, es más pesada que DVWA por todo el stack Node.js). Las siguientes veces arrancará en segundos.

Verifica que esté corriendo:

docker compose down --rmi all
Bash

Verás el contenedor juice_shop con estado Up.

Puedes ver los logs de arranque para asegurarte de que no hay errores:

docker compose down --rmi all
Bash

Pulsa Ctrl+C para salir de los logs sin detener el contenedor.

3. Acceder a Juice Shop

Abre tu navegador y ve a:

docker compose down --rmi all
Bash

Te recibirá una tienda de zumos colorida, en inglés, con productos, carrito, login, etc. Ya estás dentro del campo de entrenamiento moderno.

4. El Score Board – tu primer reto

Juice Shop esconde su panel de progreso. El primer reto, y el que da la bienvenida a todos los principiantes, es encontrar el Score Board.

¿Dónde está? No hay enlace en el menú. Pero recuerda que esto es un pentest: puedes probar rutas comunes.

[SPOILER] Prueba a añadir manualmente a la URL:

docker compose down --rmi all
Bash

¿Aparece algo? Si ves una página con un listado de retos y tus estadísticas, acabas de completar tu primer reto sin darte cuenta. Vuelve al Score Board y busca el reto llamado «Score Board» (suele estar en la categoría «Miscellaneous» o en la parte superior). Debería aparecer como resuelto.

Si no funciona a la primera, asegúrate de que la almohadilla (#/score-board) va justo después del puerto. La app usa rutas de Angular con #. Ese pequeño detalle es importante.

5. Tu primer reto «de verdad»: Forzar la administración

Vamos a resolver otro reto clásico para ver la mecánica. Accede a la página de login y prueba a inyectar:

docker compose down --rmi all
Bash

En el campo de email y cualquier cosa en contraseña. ¿Has entrado? Juice Shop tiene varias vulnerabilidades de inyección SQL. Lo que acabas de hacer es un bypass de autenticación que te convierte en el primer usuario de la base de datos (normalmente admin). Revisa el Score Board; el reto «Login Admin» debería estar marcado como resuelto.

Desde la sesión de administrador puedes trastear con usuarios, dejar reseñas tramposas y desbloquear más retos.

6. ¿Por qué decimos que es «moderno»? JWT y GraphQL bajo el capó

Juice Shop no solo tiene inyecciones SQL. Su autenticación se basa en JWT (JSON Web Tokens). Cuando inicias sesión, el servidor te entrega un token firmado que viaja en cada petición. Muchos retos te pedirán que manipules ese token: cambiar el algoritmo de firma (alg: none), modificar el payload para escalar privilegios o simplemente robar el token de otro usuario.

¿Cómo ves tu token? Abre las herramientas de desarrollador del navegador (F12), ve a la pestaña Application o Storage y busca las cookies o el local storage. Ahí vive el token. Copia ese chorizo y pégalo en jwt.io para decodificarlo y entenderlo.

Además, la aplicación expone un endpoint GraphQL en http://localhost:3000/api/graphql. Puedes interactuar con él usando herramientas como GraphQL Playground o simplemente curl. Prueba esto en tu terminal:

docker compose down --rmi all
Bash

Obtendrás la introspección del esquema, algo que en producción debería estar deshabilitado. Esto abre la puerta a leer datos sensibles, modificar productos o usuarios, y mucho más. Juice Shop te enseñará, sin piedad, por qué GraphQL mal configurado es un caramelo para los atacantes.

7. Reseteando el progreso

Como Juice Shop guarda su progreso en una base de datos SQLite dentro del contenedor, resetear es tan fácil como recrearlo:

docker compose down --rmi all
Bash

Para reiniciar el progreso de scoreboard debes darle a una notificación que aparece después de usar estos comandos.

Si quieres borrar también la imagen (rara vez necesario):

docker compose down --rmi all
Bash

Y si prefieres conservar el progreso entre reinicios, puedes añadir un volumen al docker-compose.yml para persistir la base de datos. Pero para un laboratorio de prácticas, lo efímero es una ventaja: pruebas, rompes, reseteas, repites.


Etiquetas:

Avatar de Apuntes Hacking

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *