Lab: SQL injection vulnerability allowing login bypass – Portswigger [Write Up]

Este laboratorio llamado «SQL injection vulnerability allowing login bypass» se encuentra dentro del listado de laboratorios de la plataforma de Portswigger Web Security Academy dentro de la vulnerabilidad SQL injection.

Se encuentra dentro de la categoría «Apprentice» (fácil) de los 3 niveles que ofrece la plataforma.

Este laboratorio contiene una vulnerabilidad SQL injection en la parte del login web.

Para resolver el laboratorio, se realizará un ataque de inyección SQL para iniciar sesión en la aplicación como usuario administrador.

Una vez accedes al laboratorio, se te abre una nueva ventana con la aplicación web.

Antes de nada, abro la aplicación de BurpSuite dentro de Kali y activo el FoxyProxy configurado para interceptar la petición y manipularla.

Me voy a la parte de My Account de la Web y en el campo de login introduzco a modo de ejemplo el valor «test» en ambos campos: usuarios y contraseña.

Al introducirlos, se abre Burp con la petición POST del envío de los dos valores y el campo «csrf» con toda la información del login.

El campo csrf se refiere a un token CSRF (Cross-Site Request Forgery), el cual es un mecanismo de seguridad diseñado para proteger aplicaciones web contra ataques de falsificación de solicitudes en sitios cruzados.

Entonces, ahora que ya tenemos la petición, lo que vamos a hacer es un ataque de SQL Injection utilizando la técnica de (administrator'--) la cual se usa para bypassear la autenticación o sistema de login de un sistema, aprovechando vulnerabilidades en la forma en que se construyen las consultas SQL.

Este ataque tiene como objetivo alterar la consulta SQL original para cambiar su comportamiento, en este caso específico, intentando acceder al sistema sin necesidad de una contraseña válida introduciendo ese valor en el campo username.

Después de introducir el username SQL query (adniminstrator’–), si le das a Forward para enviar la nueva solicitud alterada al navegador por varias veces seguidas, verás que finalmente la página te devuelve que has resuelto el laboratorio y por tanto has inyectado SQL y eludido el sistema de autenticación.

¿Cómo funciona este ataque SQL Injection en un login?

Supongamos que un formulario de login espera dos entradas: un nombre de usuario y una contraseña. El código vulnerable podría tener una consulta SQL similar a esta:

SELECT * FROM usuarios WHERE usuario = 'usuario_ingresado' AND contraseña = 'contraseña_ingresada';

Al incluir en el username el valor administrator'-- , la consulta final sería algo así:

SELECT * FROM usuarios WHERE usuario = 'administrator'--' AND contraseña = 'lo_que_sea';

Es decir:

  1. administrator'--: Ese campo cierra el valor de 'administrator' con el apóstrofe ('), y luego añade --, que en SQL es un comentario.
  2. -- : Todo lo que aparece después de -- se ignora, porque es interpretado como un comentario.
  3. Por tanto, la consulta SQL se transforma en algo similar a:
SELECT * FROM usuarios WHERE usuario = 'administrator';

Y esto significa que la parte de la contraseña es ignorada por el sistema, lo que permitiría el acceso sin verificar si la contraseña es correcta.

Si en la base de datos, existe un usuario «administrator» , el atacante podría acceder directamente a esa cuenta sin necesidad de una contraseña válida.

Otros posts relacionados