Cómo hacer análisis de vulnerabilidades profesional en un sitio web de forma gratuita utilizando Juice Shop

La búsqueda de vulnerabilidades en sitios web, herramientas, aplicaciones y software para su reporte a través de los programas de recompensas es una práctica común entre los programadores. Aunque esta es una buena opción, existen otras alternativas para practicar el análisis de vulnerabilidades sin infringir la ley.

En esta ocasión, los especialistas del curso de hacking ético del Instituto Internacional de Seguridad Cibernética (IICS) le mostrarán cómo instalar y usar OWASP Juice Shop para encontrar vulnerabilidades en aplicaciones web.

Antes de continuar, le recordamos que este artículo fue elaborado con fines exclusivamente informativos y no representa un llamado a la acción; IICS no es responsable del mal uso que pueda darse a la información aquí contenida.

Hay muchas formas de instalar Juice Shop, aunque los expertos del curso de ciberseguridad recomiendan hacerlo usando Node.js, ya que Docker no tiene todas las vulnerabilidades posibles.

Juice Shop funciona con diferentes versiones de Node.js, por lo que instalaremos la versión más reciente (Node.js v14). Primero habrá que instalar Node Version Manager, creado para no saturar el sistema operativo con paquetes innecesarios.

$curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

Ahora debe abrir y cerrar la terminal para aplicar los cambios realizados por el script. Verifique la versión instalada de NVM y proceda directamente a instalar Node.js.

$nvm -v
$nvm install --lts 

Verifique la versión del comando node instalado y recuérdela.

$node --version

Si necesita varias versiones diferentes al mismo tiempo, instale las necesarias y seleccione la última según sea necesario.

$ nvm install <version number>
$ nvm use <version number> 

Instalar Juice Shop

A menudo hay nuevos lanzamientos en GitHub por lo que los expertos del curso de ciberseguridad recomiendan siempre buscar la más reciente versión. Recuerde que debe ser compatible con su versión de Node.js; si instaló Node.js 14 en el paso anterior, necesitará juice-shop-xx.x.x_node14_linux_x64.tgz. Descargue e instale:

$tar -xzf juice-shop-xx.x.x_node14_linux_x64.tgz

Así completamos la instalación, por lo que ahora solo resta ir a la carpeta de Juice Shop para ejecutar la herramienta:

$npm start

Si el proceso concluyó correctamente, verá el mensaje “info: Server listening on port 3000”. Abra su navegador y vaya a http://localhost:3000. Seleccione el idioma inglés para no tener problemas idiomáticos en el futuro.

También se requerirá usar Burp Suite o cualquier herramienta similar.

Encontrar un tablero de tareas

Lo primero que notamos es un paquete que ofrece encontrar un tablero de tareas y resultados y que también es un tablero de puntuación. Este problema extremadamente simple tiene dos soluciones:

  • Mire cuidadosamente la barra de direcciones como / #/search, / #/login, etc. y piense, ¿cuál sería la cadena para acceder al tablero de puntaje?
  • Examinar el código fuente del sitio web e identificar información relevante. Para ello, requeriremos acceso al código fuente del navegador web en uso

De inmediato destaca la gran cantidad de scripts incluidos en JavaScript, aunque por el momento solo es relevante el script main.

Ahora vaya a la pestaña Debuger y mire el código fuente principal. Aquí podemos intentar recuperar el código después del minificador JS usando una herramienta especial o bien seleccionando Pretty Print Source en Firefox y obtenga un código fuente más legible.

Finalmente encontremos el tablero de puntuación. Depende de cada uno decidir qué tan eficiente es buscar en las fuentes, pero como resultado, debe llegar a una pieza con rutas que ya conoce como  / #/search:

Escriba en la barra de direcciones:

http://localhost:3000/#/score-board

Hemos completado con éxito la primera tarea.

Juice Shop 12.7.0 tiene una nueva característica: Al hacer clic en el botón con corchetes triangulares, puede ver el código fuente del módulo vulnerable y la línea en la que se produce el error. Simplemente compare el código fuente antes de la minimización y lo que vio en el navegador, recomiendan los expertos del curso de ciberseguridad.

En la captura de pantalla anterior pueden verse dos tareas completadas. ¿Qué sucede al tratar de abrir la ruta / #/complain sin registrarte en el sitio web? Puede intentar abrirlo como invitado y enviar una queja anónima a los administradores.

Abrir el panel de administración

Todas las tareas en el panel de administración están divididas por nivel de dificultad de una a seis estrellas. Los expertos del curso de ciberseguridad creen que esta división es bastante arbitraria.

Algunas tareas tienen una pista o tutorial. Trate de hacerlo sin ayuda primero. Sin embargo, algunas tareas son tan vagas que tiene sentido leer una descripción más detallada en el libro del desarrollador. Aquí, por ejemplo, la categoría “Varios”. Ahora pasemos a la búsqueda del panel de administración e intentemos acceder a él. Es hora de iniciar Burp Suite y mirar el intercambio de red.  

No hay nada como acceder al panel de administración aquí. Es hora de trabajar con el depurador; la forma más fácil de encontrar el lugar correcto en el código es con un error de acceso: 403.

Si no tenemos un token o se nos niega el acceso, aparecerá el error 403. Los usuarios no registrados no tienen un token de acceso, por lo que será necesario registrarse en el sitio web.

Ahora intentemos engañar al script. Para hacer esto, establezca un punto de interrupción (breakpoint) en la línea 579 y agregue la variable t a Watch.

Trate de abrir la página de administración nuevamente. Acorde a los expertos del curso de ciberseguridad, para que el punto de interrupción funcione, debe tener abierta la consola de depuración.

Ahora queda lo más simple. El script anterior verifica si el rol coincide con el valor admin. Si no, verá un error de acceso. Por lo tanto, solo necesita corregir el valor del rol en admin. Desafortunadamente, con la llegada de la nueva consola para desarrolladores en Firefox, la capacidad de editar variables en la ventana gráfica se rompió y aún no se ha devuelto. Recuerde la ruta al valor deseado t . data . role , cambie en la ventana del desarrollador a la pestaña Consola y cambie el valor del rol allí a admin.

Ahora regrese al depurador y continúe ejecutando el script. Esta solución está puntuada con tres estrellas en términos de dificultad. Un poco más tarde, registrará una cuenta de administrador normal y usará SQLi para acceder al panel de administración. Son mucho más sencillos, ya que no requieren estudiar el código fuente.

El código del servidor correcto tampoco habría mostrado una lista de usuarios o reseñas, ya que al solicitarlas al servidor, tenía que verificar el token de derechos del usuario. En nuestro caso, esto no sucede y, una vez en el panel de administración, puede ver fácilmente todos los datos.

Si no ha desactivado Burp, puede buscar estas líneas en el intercambio y asegurarse de que no haya una verificación de permisos del lado del servidor.

Este token esencialmente contiene el perfil completo del usuario y especifica explícitamente su función de cliente original, pero el backend del servidor no verifica los permisos cuando solicita todas las revisiones o perfiles. Esto significa que al interceptar dicha solicitud, puede obtener fácilmente información sobre los usuarios registrados sin siquiera abrir el área de administración.

Registrar una cuenta de administrador

Es hora de registrarse con una cuenta de administrador completa. Los expertos del curso de ciberseguridad recomiendan averiguar qué información se envía al registrar una cuenta regular desde el sitio. Burp Suite ayudará con esto; ejecútelo y realice el proceso de registro por completo.

Como puede ver, al enviar información desde el formulario, en respuesta recibirá un perfil de usuario con el rol customer. Uno de los errores tradicionales de los desarrolladores está relacionado con la llamada asignación masiva, o llenado masivo de campos. El código de registro de usuario toma una lista de campos de perfil para procesar y se asignan valores predeterminados a los campos que faltan. Intente interceptar esta solicitud antes de enviarla e inserte el campo de nombre de usuario en ella, como se muestra en la siguiente captura de pantalla.

Mire de cerca la respuesta del servidor para entender que el nombre de usuario cambió la respuesta. Además, ya no se devuelve como la primera fila de los datos. Debe comprender lo que debe hacerse con el valor del campo de función.

Inyección SQL para inicio de sesión

Abra la ventana de inicio de sesión del usuario y comience con el caso más simple insertando una sola comilla inversa en el campo de inicio de sesión y una contraseña arbitraria. A juzgar por el mensaje de error rojo, estamos por el camino correcto.

Desafortunadamente, no está del todo claro qué está sucediendo exactamente y cómo desarrollar aún más esta inyección. Aquí hay dos soluciones: o tiene una amplia experiencia en inyección y selecciona sistemáticamente los valores deseados, o, si no se trata de usted, ejecute Burp y vea qué sucede en la red. Recuerde, esta es una aplicación muy vulnerable y los desarrolladores deben haber cometido más de un error.

Incluso existe el código de la consulta SQL original. Ahora no será difícil elegir la carga correcta para la ventana de inicio de sesión.

En esta etapa, los expertos del curso de ciberseguridad señalan algunos puntos importantes:

  • No ha ingresado su correo electrónico en ninguna parte, pero ha iniciado sesión como administrador. Esto sucedió porque en esta versión de la inyección, se selecciona la primera fila en la base de datos, que en la mayoría de los casos será el primer usuario registrado o superadministrador. Este comportamiento está presente en la mayoría de los sistemas de gestión de contenido (CMS)
  • Si tiene la dirección email del usuario objetivo, puede modificar un poco la inyección e iniciar sesión inmediatamente en su nombre
  • Este es el ejemplo más simple de inyección SQL. No en vano ocupan el primer lugar según el Top 10 OWASP
  • Todavía hay muchos lugares en el código de la aplicación con inyecciones, así como tareas para ello, pero ya son más complicados en términos de nivel de ejecución y daño

Adivinar contraseñas de administrador

Esta tarea recibió solo dos estrellas de clasificación, por lo que podemos intuir que se trata de un desafío de baja complejidad. Entre los errores más comunes que permiten esta variante de ataque destacan:

  • Falta de protección contra ataques de fuerza bruta
  • Uso de contraseñas débiles
  • Reutilización de palabras clave

Puede intentar simplemente adivinar la contraseña de administrador, no es tan difícil como parece, aunque lo mejor será saber desplegar ataques de teclado o enumeración.

Como puede ver, para el inicio de sesión es suficiente enviar JSON con dos campos, si la contraseña es incorrecta, se le devolverá el código 401. El siguiente código en Python también puede ser de utilidad:

import requests
passwords = open('/usr/share/wordlists/rockyou.txt','r')
for password in passwords:
    password = password.rstrip("\n")
    data = {'email':'admin@juice-sh.op','password':password}
    r = requests.post('http://localhost:3000/rest/user/login',json=data)
    if r.status_code == 200:	
        print("Password is ",password)
        break
print("That's all... ")

Una pequeña recomendación: antes de recorrer todo el diccionario para usuarios desconocidos, asegúrese de que puede adivinar su propia contraseña y que no hay errores en el código.

Membresía de lujo gratis

Esta es una tarea más fácil, mencionan los especialistas del curso de hacking ético. Para comenzar, inicie Burp y mire todo el intercambio con el servidor cuando intente comprar un Deluxe sin dinero en su billetera y tarjetas. Una de estas solicitudes incluye un costo de 49 unidades convencionales. Empleando Burp, convierta este valor a 0.

Después de eso, en la siguiente pantalla, podrá pagar 0, pero por alguna razón no funcionará tan fácilmente. Si mira el intercambio, verá el pago de la billetera y el mensaje de error “insuficient funds in wallet”.

Reemplazaremos paymentMode con un comando como free o deluxe:

Si experimenta cuidadosamente con diferentes opciones de pago, descubrirá que es completamente opcional cambiar el precio a 0 en la primera etapa. Lo principal es convertir la solicitud GET/rest/deluxe-membership en una solicitud POST y agregarle datos JSON de modo de pago con cualquier valor que no sea wallet o card, mencionan los expertos del curso de ciberseguridad.

Juice Shop es una herramienta ideal para seguir avanzando en el mundo del pentesting, por lo que los programadores pueden seguir recurriendo a programas como este sin importar su nivel de habilidades.

Para conocer más sobre riesgos de seguridad informática, malware, vulnerabilidades y tecnologías de la información, no dude en ingresar al sitio web del Instituto Internacional de Seguridad Cibernética (IICS).