Entrada

Authentication Lab 11

Authentication Lab 11

Skills

  • Password reset poisoning via middleware

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio es vulnerable a password reset poisoning. El usuario carlos hará clic en cualquier enlace en los correos electrónicos que reciba. Para resolver el laboratorio, debemos iniciar sesión en la cuenta de Carlos. Podemos iniciar sesión en nuestra propia cuenta utilizando las credenciales wiener:peter. Cualquier correo electrónico enviado a esta cuenta puede ser leído a través del cliente de correo en el servidor de explotación


Resolución

Al acceder a la web nos sale esto

Pulsamos sobre My account y nos logueamos usando las credenciales wiener:peter

Vemos que nuestro usuario tiene un email wiener@exploit-0a600096044304db85161267010b0093.exploit-server.net

Para resetear la contraseña pulsamos sobre Forgot password? e introducir nuestro email

Nos dirigimos al exploit server y en la parte inferior hacemos click sobre el apartado Email client

Si pinchamos sobre el enlace podemos introducir una nueva contraseña

Si interceptamos la petición con Burpsuite vemos que se está utilizando un token temporal generado para nuestro usuario wiener

Vamos a usar la extensión Param Miner y Logger ++. Hacemos click derecho y seleccionamos este apartado Guess headers

Para ver si reporta algún output, nos dirigimos a Extensions > Installed > Param Miner

Sin embargo hay casos como este en el cual nos está enviando un correo electrónico cada vez que hacemos la petición. Nos dirigimos a Logger ++, pinchamos sobre cualquier petición y vemos que siempre se envía un payload con unos primeros caracteres en común

Nos vamos a la web, accedemos a nuestro email client, pulsamos Ctrl + f y filtramos por zwrt

Nos copiamos este texto zwrtxqvav5xuq82tzfz25g5, nos dirigimos al Logger ++, pulsamos sobre Grep values y copiamos ahí el texto

Vemos que se está usando x-forwarded-host: zwrtxqvav5xuq82tzfz25g5

Esta cabecera ayuda a determinar el host original, ya que el nombre de host o el puerto del proxy inverso (equilibrador de carga) pueden diferir del servidor original que gestiona la solicitud, por eso si nos vamos a nuestro email client el host cambia https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host

Nos dirigimos a nuestro exploit server y copiamos la url de nuestro servidor

Pulsamos sobre Forgot password? y capturamos la petición con Burpsuite

Añadimos la cabecera X-Forwarded-Host: exploit-0a85000d038ac10781b91fd8015b0001.exploit-server.net y como valor añadimos la url de nuestro servidor

Si nos vamos a nuestro email client vemos que aparece un nuevo mensaje con el host de nuestro servidor

Al hacer click en el link, aparece en el log de nuestro servidor la ruta a la que le hemos hecho la petición

Lo que debemos hacer ahora es acceder al enlace que nos llega, pero cambiarle el host por el del servidor https://0a5000dd0380c140814c206500a0007a.web-security-academy.net/forgot-password?temp-forgot-password-token=b5uqs2jv2kl8npjrir2z9zw7z8b7kqaq y setear una nueva contraseña

Una vez hemos comprobado que esto funciona para nuestro usuario, vamos a hacerlo ahora con el usuario víctima carlos. Si la víctima pulsa sobre el enlace que le enviamos a su correo recibiremos en nuestro servidor una petición con el token temporal que podemos usar para cambiarle la contraseña a carlos. No hace falta que tengamos el email de carlos debido a que la web también admite nombres de usuario

Capturamos la petición, agregamos esta cabecera con el valor de nuestro servidor X-Forwarded-Host: exploit-0a85000d038ac10781b91fd8015b0001.exploit-server.net

Una vez tramitada la petición, el usuario víctima hará click sobre el enlace que le llegará a su correo electrónico y nos hará una petición a nuestro servidor

Accedemos a https://0a5000dd0380c140814c206500a0007a.web-security-academy.net/forgot-password?temp-forgot-password-token=x2kx3lq2b1vgwl01udaxh40a754j3513 y le cambiamos la contraseña al usuario carlos

Accedemos a la cuenta del usuario carlos

En este laboratorio, hay un middleware que se encarga de verificar la cabecera X-Forwarded-Host. Esto se hace para tener un dominio dinámico, para que sea seguro, debería haber una lista de dominios whitelisteados y que solo actúe sobre estos, no sobre cualquier dominio aleatorio. Un middleware es un software o componente que actúa como intermediario entre diferentes aplicaciones, sistemas o capas de un programa. Su función principal es gestionar la comunicación, el procesamiento de datos o la ejecución de tareas específicas antes o después de que una solicitud llegue a su destino. En el contexto del desarrollo web, un middleware suele ser una función que se ejecuta en cada solicitud HTTP antes de llegar a la lógica principal de una aplicación. Se usa para:

  • Autenticación y autorización (verificar usuarios, tokens, roles)
  • Registro y monitoreo (almacenar logs de actividad)
  • Compresión y manipulación de respuestas (como comprimir datos antes de enviarlos)
  • Protección contra ataques (CSRF, CORS, validaciones)
Esta entrada está licenciada bajo CC BY 4.0 por el autor.