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:

    SQL
    SELECT * 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.

    SQL
    SELECT * FROM users WHERE username = 'admin' AND password = '' OR '1'='1';
    
  • Explicación: La condición password = '' OR '1'='1' siempre se evalúa como TRUE porque '1'='1' es una condición lógicamente verdadera. Esto permite al atacante iniciar sesión como el usuario admin 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.

    SQL
    SELECT 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.

    SQL
    SELECT 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:

    1. Si la página carga normalmente (la consulta es TRUE), el atacante sabe que la primera letra del nombre de usuario es 'a'.

    2. Si la página muestra un error (la consulta es FALSE), el atacante prueba con 'b', 'c', etc.

    3. 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.

Entradas populares de este blog

Ciberseguridad y hacking con Whatweb

Como robar contraseñas haciendo un phishing web

Arsenal software hacking NFC