La vulnerabilidad SQL Injection es de las más conocidas en el mundo de la ciberseguridad.
¿Pero sabes porque motivo estas inyecciones funcionan y nos permiten extraer información de la base de datos?
Vamos a comenzar por el principio, estoy seguro que has visto esta inyección alguna vez: ‘ or 1=1– –
Y quieres saber porque esto nos permite saltarnos un panel de Login y poder acceder como Administrador.
Las páginas web suelen utilizar consultas SQL para comunicarse con la Base de Datos, de esta forma comprobará si el usuario y contraseña son correctos.
Tabla Users
Supongamos que la tabla de usuarios es la siguiente:
Consulta Correcta
La página web para comprobar el usuario y contraseña que introducimos realiza la siguiente consulta:
- username: admin
- password: admin123
SELECT * FROM users WHERE username = 'admin' AND password = 'admin123'
En este caso la consulta es correcta porque coinciden el USERNAME y PASSWORD, la Base de Datos devolverá la fila del usuario y nos dejará acceder al panel de ADMIN.
Consulta Incorrecta
Ahora vamos a introducir el mismo usuario pero una contraseña incorrecta, para que veáis la respuesta que nos dará la consulta SQL.
- username: admin
- password: 1234
SELECT * FROM users WHERE username = 'admin' AND password = '1234'
Al introducir uno de los dos datos de forma incorrecta la Base de Datos NO devolverá información ya que se deben cumplir las dos condiciones porque tenemos el operador AND en la consulta SQL.
Inyección SQL
Este es el momento importante de este post, la SQL Injection, vamos a introducir en el campo de username el payload típico: ‘ or 1=1– – y en el campo de password una contraseña incorrecta.
- username: ‘ or 1=1– –
- password: 1234
SELECT * FROM users WHERE username = '' or 1=1-- -' AND password = '1234'
Lo que estamos haciendo en esta consulta SQL es introducir una nueva condición, si el USERNAME es igual a nada O 1 es igual a 1 como esta segunda condición SIEMPRE se va a cumplir la condición del USERNAME se va a cumplir.
¿Pero ahora faltaría comprobar si la PASSWORD es correcta?
Pues no!! Ahora la contraseña no se comprueba, da igual lo que pongas en este campo y todo gracias a: — – estos guiones lo que hacen es comentar el resto de la consulta SQL y evitan que se ejecute la comprobación de la contraseña.
Introducción SQL Injection – YouTube
Si todavía tienes dudas o quieres aprender más debes visitar este vídeo de YouTube.