Hacking con SQL Injection
www.onlinetis.com
La inyección SQL (SQL Injection) es un tipo de ataque de inyección donde un atacante manipula consultas a una base de datos. Esto se logra insertando código SQL malicioso a través de la entrada de datos de una aplicación, lo que permite al atacante ejecutar comandos no autorizados.
Aquí tienes ejemplos de diferentes tipos de ataques de inyección SQL.
1. Inyección de autenticación (SQL de tipo OR '1'='1'
) 🔓
Este es uno de los ejemplos más clásicos y sencillos. Un atacante usa esta técnica para eludir la autenticación y acceder a una cuenta sin conocer la contraseña.
Petición normal de la aplicación:
SQLSELECT * FROM users WHERE username = 'admin' AND password = 'su_password';
Petición maliciosa del atacante:
El atacante introduce ' OR '1'='1 en el campo de la contraseña.
SQLSELECT * FROM users WHERE username = 'admin' AND password = '' OR '1'='1';
Explicación: La condición
password = '' OR '1'='1'
siempre se evalúa comoTRUE
porque'1'='1'
es una condición lógicamente verdadera. Esto permite al atacante iniciar sesión como el usuarioadmin
sin necesidad de la contraseña real.
2. Inyección de información (SQL de tipo UNION SELECT
) 🕵️♂️
Este tipo de ataque se utiliza para obtener datos de otras tablas de la base de datos a las que el atacante no debería tener acceso.
Petición normal de la aplicación:
La página web muestra información de un producto basándose en un id.
SQLSELECT name, description, price FROM products WHERE id = 123;
Petición maliciosa del atacante:
El atacante inserta un UNION para combinar el resultado de la consulta original con una consulta a otra tabla.
SQLSELECT name, description, price FROM products WHERE id = 123 UNION SELECT username, password, NULL FROM users;
Explicación: El comando
UNION
une los resultados de la consulta original (products
) con los de la nueva consulta (users
). El atacante debe asegurarse de que el número de columnas (username
,password
,NULL
) coincida con el de la consulta original para evitar un error. El resultado es que la página web, que debería mostrar la información del producto, ahora muestra los nombres de usuario y contraseñas de la base de datos.
3. Inyección de ciegos (SQL de tipo Blind
) 🕵️♀️
Este ataque es más complejo y se utiliza cuando la aplicación no muestra errores de la base de datos en la página. El atacante debe deducir la información de la base de datos haciendo preguntas que solo devuelven TRUE
o FALSE
.
Escenario: Una página que te indica si el producto existe (
TRUE
) o no (FALSE
) en lugar de mostrar su información.Petición maliciosa del atacante:
El atacante puede hacer preguntas una por una para adivinar el nombre de la primera letra del usuario:
https://ejemplo.com/product.php?id=123 AND (SELECT SUBSTRING(username, 1, 1) FROM users WHERE id = 1) = 'a';
Explicación:
Si la página carga normalmente (la consulta es
TRUE
), el atacante sabe que la primera letra del nombre de usuario es 'a'.Si la página muestra un error (la consulta es
FALSE
), el atacante prueba con 'b', 'c', etc.Este proceso se repite, letra por letra, hasta reconstruir toda la información de la base de datos, lo que lo convierte en un proceso lento pero muy efectivo.