OWASP Juice Shop
Created by 0xnotkyo

tryhackme.com - © TRYHACKME

Introducción
En esta sala, veremos las 10 principales vulnerabilidades de OWASP en las aplicaciones web, aunque no las cubriremos todas porque Juice Shop es una aplicación grande. Sin embargo, cubriremos los siguientes temas:
<------------------------------------------------->
<------------------------------------------------->
Task 2 – Let’s go on an adventure!
Antes de entrar en la parte del hacking, es bueno echar un vistazo. En Burp, desactivamos el modo Intercept y luego navegamos por el sitio. Esto permite a Burp registrar diferentes solicitudes del servidor que pueden ser útiles para más adelante.
Esto se llama recorrer la aplicación, lo cual también es una forma de reconocimiento.
Question 1 - What’s the Administrator’s email address?
Esta es simple porque solo necesitamos mirar todos los productos reseñados en la página de inicio. Se recomienda ver cada uno de los productos de la página, ya que podríamos encontrar otra información útil.
El primer producto en la página es el Apple Juice.

Al ver en detalle el producto, hay una sección de Reseñas (Reviews). Hacemos clic en el botón desplegable y las reseñas deberían aparecer listadas.

Como podemos ver se muestra el correo de Administrador, por lo tanto ya tenemos la respuesta a esta primera pregunta.
Question 2 - What parameter is used for searching?
La búsqueda debe implicar ingresar algo en una barra de búsqueda y, en este caso, no es diferente. La barra de búsqueda se encuentra en la parte superior derecha, justo al lado del botón desplegable de Account.

Luego podemos introducir algo de texto y al presionar Enter buscará el texto que acabamos de ingresar. Ahora prestamos atención a la URL, la cual ahora se actualizará con el texto que acabamos de introducir.
Los parámetros en la URL se identifican por un signo de interrogación (?) ubicado después de la ruta de la URL y un signo de igual (=) después de ellos.
Ahora podemos ver el parámetro de búsqueda después de /#search?, la letra q.
Question 3 - What show does Jim reference in his review?
Si buscamos un producto con el nombre de Green Smoothie, un reseñador llamado Jim mencionó la palabra replicator. Vamos a buscar esta palabra en google.


El resultado es un dispositivo capaz de sintetizar muchas cosas como comida o herramientas. Información adicional muestra que este dispositivo aparece en un programa de televisión llamado Stark Trek - The Next Generation.

Task 3 – Inject the juice

SQL Injection → Ocurre cuando un atacante introduce una consulta maliciosa o mal formada para recuperar o manipular datos de una base de datos. Y en algunos casos, iniciar sesión en cuentas.
Command Injection → Ocurre cuando las aplicaciones web toman datos de entrada o controlados por el usuario y los ejecutan como comandos del sistema. Un atacante puede manipular esos datos para ejecutar sus propios comandos del sistema.
Email Injection → Es una vulnerabilidad de seguridad que permite a usuarios maliciosos enviar mensajes de correo electrónico sin autorización previa del servidor de correo. Esto ocurre cuando el atacante añade datos extra a los campos, que no son interpretados correctamente por el servidor.
En nuestro caso vamos a estar usando SQL Injection.
Question 4 - Log into the administrator account!
Vayamos a la página de inicio de sesión que podemos encontrar en el botón desplegable Account. En la página, habrá barras de entrada para correo electrónico y contraseña. Antes de buscar vulnerabilidades SQLi, podríamos verificar primero si alguna de las barras de entrada tiene algún tipo de comportamiento extraño cuando se ingresan comillas simples (') o dobles (").
Si los resultados muestran el comportamiento extraño esperado, entonces existe una probabilidad de que existan vulnerabilidades de SQLi.

La inyección SQL se puede realizar manualmente en el campo de entrada de la página de inicio de sesión o, para mayor precisión y análisis, podemos utilizar Burp Suite para interceptar y modificar la solicitud. En este caso, utilizaremos Burp Suite.
Antes de mandar la solicitud tenemos que asegurarnos de que el modo Intercept está activado en Burp Suite.

Ahora cambiaremos el parámetro del email (en este caso test@gmail.com) por ' or 1=1-- y lo reenviaremos al servidor.

La comilla simple (
') cerrará los corchetes o comillas en la consulta SQL.
ORen una sentencia SQL devolverá verdadero si cualquiera de sus lados es verdadero. Como1=1siempre es verdadero, toda la sentencia es verdadera. Por lo tanto, le indicará al servidor que el correo electrónico es válido, y nos conectará con el ID de usuario 0, que casualmente es la cuenta del administrador.
El carácter
--se utiliza para comentar datos (anular el resto de la consulta), por lo que cualquier restricción en el inicio de sesión dejará de funcionar al ser interpretada como un comentario.

Como podemos ver, hemos iniciado sesión con éxito en la cuenta de administrador y hemos conseguido nuestra flag.


Question 5 - Log into the Bender account!
Target Account: bender@juice-sh.op


La misma técnica se aplica al iniciar sesión usando otra dirección de correo electrónico.

Bueno, como la dirección de correo es válida (lo que devolverá verdadero), no necesitamos forzar que sea verdadero. Por lo tanto, podemos usar '-- para omitir el sistema de inicio de sesión.
Ten en cuenta que el 1=1 se puede usar cuando el correo electrónico o el nombre de usuario no se conocen o no son válidos.

Como podemos ver, hemos iniciado sesión con éxito en la cuenta de bender y obtenemos nuestra flag.


Task 4 – Who broke my lock?!
En esta tarea, analizaremos la explotación de la autenticación a través de diferentes fallos.
Cuando hablamos de fallos en la autenticación, incluimos mecanismos que son vulnerables a la manipulación. Estos mecanismos, que se enumeran a continuación, son los que explotaremos.
Contraseñas débiles en cuentas con altos privilegios
Páginas de contraseña olvidada
Más información: Broken Authentication

Question 6 - Bruteforce the Administrator account's password!
Target Account: admin@juice-sh.op


Vamos a Positions y luego seleccionamos el botón Clear §. En el campo de la contraseña colocamos dos § dentro de las comillas.
El § § no son dos entradas separadas, sino la implementación de las comillas de Burp, por ejemplo, " ".
La solicitud debería verse como la imagen a continuación.

Para el payload, utilizaremos el archivo best1050.txt de SecLists.
Podemos cargar la lista desde:
Una vez que el archivo esté cargado en Burp, iniciamos el ataque. Vamos a querer filtrar la solicitud por estado.
❌ Una solicitud fallida devolverá un 401 Unauthorized .
✅ Una solicitud exitosa devolverá un 200 OK.


Como podemos ver, hemos recibido una solicitud exitosa y ya podemos iniciar sesión. También conseguiremos nuestra flag.



Question 7 - Reset Jim's password!
Target Account: jim@juice-sh.op

El mecanismo de restablecimiento de contraseña también puede ser explotado. Cuando se introduce en el campo de correo electrónico en la página de Forgot Password, la pregunta de seguridad de Jim está configurada como "Your eldest siblings middle name?".
En la Tarea 2, descubrimos que Jim tiene cierto interés en Star Trek.

Buscando en la página de Wikipedia encontramos que él tiene un hermano.

Parece que el segundo nombre de su hermano es Samuel. Ingresar eso en la página de Forgot Password nos permite cambiar su contraseña con éxito.


Y así es como conseguimos nuestra flag.
Task 5 – AH! Don't look!
Una aplicación web debe almacenar y transmitir datos sensibles de forma segura. La mayoría de las veces, la protección de datos no se aplica consistente en toda la aplicación web, lo que hace que ciertas páginas sean accesibles al público.
Más información: Sensitive Data Exposure
Question 8 - Access the Confidential Document!
Navegamos a la página Abouts us y pasamos el ratón por encima de Check out our terms of use.


Veremos que enlaza a http://MACHINE_IP/ftp/legal.md. Navegar a ese directorio /ftp/ revela que está expuesto al público.


Vamos a descargar el archivo acquistionms.md y guardarlo. Parece que también hay otros archivos de interés aquí. Después de descargarlo, volvemos a la página de inicio para recibir nuestra flag.


Resulta que es solo un archivo de ejemplo. Sin embargo, la estructura indica que este documento debería ser confidencial.
Question 9 - Log into MC SafeSearch's account!
Target Account: mc.safesearch@juice-sh.op
Después de ver el vídeo, hay ciertas partes de la canción que destacan. Él señala que su contraseña es "Mr.Noodles" pero ha reemplazado algunas "vocales por ceros", lo que significa que simplemente reemplazó las "o" por "0".
Ahora sabemos que la contraseña de la cuenta es "Mr.N00dles".


Y así es como conseguimos nuestra flag.
Question 10 - Download the Backup file!
Ahora volveremos a la carpeta http://MACHINE_IP/ftp/ e intentaremos descargar package.json.bak. Pero parece que nos encontramos con un 403 que dice que solo se pueden descargar archivos .md y .pdf.

Para evitar esto, utilizaremos una omisión de caracteres llamada "Poison Null Byte". Se suele ver así %00.
Como podemos descargarlo usando la URL, tendremos que codificar esto a un formato de codificación URL.
El Poison Null Byte ahora se verá así: %2500. Añadir esto y luego un .md al final omitirá el error 403.

Esto ocurre porque un Poison Null Byte es en realidad un terminador NULO. Al colocar un carácter NULO en la cadena en un byte determinado, la cadena le indicará al servidor que finalice ese punto, anulando el resto de la cadena.

Y así es como obtenemos nuestra flag.
Task 6 – Who's flying this thing?

Los sistemas permitirán que múltiples usuarios tengan acceso a diferentes páginas. Los administradores utilizan comúnmente una página de administración para editar, agregar y eliminar diferentes elementos del sitio web.
Cuando se encuentran bugs o exploits de Broken Access Control, se clasificarán en uno de dos tipos:
Horizontal Privilege Escalation → Ocurre cuando un usuario puede realizar una acción o acceder a datos de otro usuario con el mismo nivel de permisos.
Vertical Privilege Escalation → Ocurre cuando un usuario puede realizar una acción o acceder a datos de otro usuario con un nivel de permisos superior.

Más información: Broken Access Control
Question 11 - Access the administration page!
Abrimos Developers Tools -> Debugger (O Sources en Chrome). Como podemos ver encontramos el path:administrator en el archivo main-es2015.js



Esto sugiere una página llamada /#/administration como se puede ver por la ruta about un par de líneas más abajo, pero ir allí sin haber iniciado sesión no funciona.
Como esta página es una página de Administrador, tiene sentido que necesitemos estar en la cuenta para poder verla. Así que vamos a iniciar sesión con las credenciales obtenidas:
Nombre de usuario: admin@juice-sh.op
Contraseña: admin123
Escribimos la ruta en la URL: http://MACHINE_IP/#/administration.

Y así es como obtenemos nuestra flag.
Question 12 - View another user's shopping basket!
Iniciamos sesión en la cuenta de Administrador y hacemos clic en Your Basket.

Cambiamos el parámetro /rest/basket/1 a /rest/basket/2.

Ahora nos mostrará la cesta del UserID 2. Podemos hacer esto para otros UserID también (siempre que tengan uno).


Question 13 - Remove all 5-star reviews!
Vamos a la página http://MACHINE_IP/#/administration de nuevo y hacemos clic en el icono de la papelera junto a la reseña de 5 estrellas.


Task 7 – Where did that come from?

XSS o Cross-site scripting es una vulnerabilidad que permite a los atacantes ejecutar javascript en aplicaciones web. Estos son uno de los bugs más encontrados en aplicaciones web. Su complejidad varía de fácil a extremadamente difícil, ya que cada aplicación web analiza las consultas de manera diferente.
Existen tres tipos principales de ataques XSS:
DOM (Special) → Utiliza el entorno HTML para ejecutar javascript malicioso. Este tipo de ataque comúnmente usa la etiqueta HTML
<script></script>.
Persistent (Server-side) → Es javascript que se ejecuta cuando el servidor carga la página que lo contiene. Esto puede ocurrir cuando el servidor no sanea los datos del usuario cuando se suben a una página.
Reflected (Client-side) → Es javascript que se ejecuta en el lado del cliente de la aplicación web. Estos se encuentran más comúnmente cuando el servidor no sanea los datos de búsqueda.
Más información: Cross-Site Scripting XSS
Question 14 - Perform a DOM XSS!

Utilizaremos el elemento iframe con una etiqueta de alerta de javascript:
Al introducir esto en la barra de búsqueda se activará una alerta.

Ten en cuenta que estamos utilizando iframe, que es un elemento HTML común encontrado en muchas aplicaciones web, hay otros que también producen el mismo resultado.
Este tipo de XSS es también llamado XFS (Cross-Frame Scripting), es una de las formas más comunes de detectar XSS dentro de las aplicaciones web.
Los sitios web que permiten al usuario modificar el iframe u otros elementos DOM serán muy probablemente vulnerables a XSS.
Es práctica común que la barra de búsqueda envíe una solicitud al servidor que luego devolverá la información relacionada, pero aquí es donde reside el fallo. Sin una correcta sanitización de la entrada (limpieza de datos), somos capaces de realizar un ataque XSS contra la barra de búsqueda.
Question 15 - Perform a persistent XSS!
Primero vamos a iniciar sesión en la cuenta admin. Y vamos a ir a la página Last Login IP para este ataque.


Debería decir que la última dirección IP es 0.0.0.0 o 10.x.x.x.
Como registra la IP del "último" inicio de sesión, ahora cerraremos la sesión para que registre la IP "nueva".
Nos aseguramos que la intercepción de Burp está activada, para que capture la solicitud de cierra de sesión.
Luego nos dirigimos a la pestaña de Headers donde agregaremos un nuevo encabezado:

Luego, reenviamos la solicitud al servidor. Ahora al volver a iniciar sesión en la cuenta de administrador e ir a la página de Last Login IP nuevamente, veremos la alerta XSS.

El encabezado True-Client-IP es similar al encabezado X-Forwarded-For, ambos le indican al servidor o proxy cuál es la IP del cliente. Debido a que no hay sanitización en el encabezado, somos capaces de realizar un ataque XSS.
Question 16 - Perform a reflected XSS!
Primero, vamos a necesitar estar en la página correcta para realizar este XSS. Iniciamos sesión en la cuenta admin y vamos a la página "Order History".

Desde allí veremos un icono de un camión, al hacer clic en él nos llevará a la página de resultados de seguimiento. También veremos que hay un ID emparejado con el pedido.


Utilizaremos el XSS con iframe en lugar del ID.

Después de enviar la URL, actualizamos la página y entonces obtendremos una alerta de XSS.

El servidor tendrá una tabla de búsqueda o una base de datos (dependiendo del tipo de servidor) para cada ID de seguimiento. Como el parámetro "id" no es saneado (limpiado) antes de ser enviado al servidor, somos capaces de realizar un ataque XSS.
Task 8 – Exploration!

Si queremos abordar algunos de los desafios más difíciles, podemos ir a /#/score-board/ . Aquí podremos ver nuestras tareas completadas, así como las demás.
Como podemos ver, ¡hemos capturado la bandera para esta máquina!

~Happy Hacking
Última actualización