Inyección SQL (SQLi)

Análisis de Vulnerabilidades Web

Una inmersión técnica en cómo se manipulan las bases de datos a través de entradas no confiables.

🛡️ ⚡ 💾

El Concepto Fundamental

La Inyección SQL ocurre cuando una aplicación web permite que los datos ingresados por un usuario alteren la estructura lógica de una consulta a la base de datos.

¿Por qué sucede?
Los intérpretes SQL antiguos o mal implementados no distinguen automáticamente entre el "plano de control" (el código del programador) y el "plano de datos" (lo que escribe el usuario). Si concatenamos texto directamente, el usuario puede cerrar comillas e insertar nuevos comandos.

Vector 1: Manipulación de Formularios

Este ataque suele darse en pantallas de Login o campos de búsqueda (método POST). El objetivo principal suele ser la evasión de autenticación (Authentication Bypass).

El atacante aprovecha el funcionamiento de la lógica booleana (`OR`). Si una parte de la condición es verdadera, toda la sentencia se vuelve verdadera.

Backend Vulnerable (PHP) $user = $_POST['username'];
// El programador espera solo texto, pero concatena la variable directamente
$sql = "SELECT * FROM users WHERE user='$user' AND pass='...'";
Payload del Atacante admin' OR '1'='1

Al inyectar esto, la base de datos interpreta: "Selecciona el usuario si el nombre es 'admin' O si 1 es igual a 1". Como 1 siempre es 1, entra sin contraseña.

Vector 2: Manipulación de URL (Path)

Muchas webs pasan identificadores (IDs) a través de la URL para mostrar contenido dinámico (ej: noticias, productos). Si estos parámetros no se validan, son una puerta de entrada directa.

Aquí es común usar el ataque UNION BASED. El operador `UNION` permite combinar los resultados de la consulta original (el producto) con resultados de otras tablas arbitrarias (usuarios, claves).

URL Vulnerable https://tienda.com/producto.php?id=15
Ataque de Extracción (UNION) ?id=15 UNION SELECT null, username, password FROM users--

Requisitos técnicos: Para que el `UNION` funcione, la consulta inyectada debe tener el mismo número de columnas y tipos de datos compatibles que la consulta original del programador.

Herramientas de Auditoría (DAST)

En el ámbito de la ciberseguridad, no se realizan pruebas manuales de cada campo uno por uno. Se utilizan herramientas automatizadas y proxies para detectar estos fallos de forma eficiente.

Burp Suite

El estándar de la industria. Es un proxy que intercepta el tráfico entre el navegador y el servidor. Permite modificar las peticiones al vuelo (Repeater) y tiene un escáner de vulnerabilidades activo.

OWASP ZAP

La alternativa Open Source. Zed Attack Proxy funciona de manera similar a Burp. Es excelente para automatizar escaneos de seguridad en pipelines de desarrollo (CI/CD) y detectar SQLi básicas.

SQLMap

Una herramienta de línea de comandos específica para SQLi. Automatiza el proceso de detección, explotación y extracción de bases de datos. Es capaz de detectar inyecciones ciegas (Blind SQLi) analizando tiempos de respuesta.

*Nota: El uso de estas herramientas solo está permitido en entornos controlados o con autorización expresa del propietario.

Defensa en Profundidad

La corrección de una inyección SQL no debe basarse en "limpiar" caracteres (listas negras), ya que los atacantes siempre encuentran formas de evadirlas. La solución debe ser arquitectónica.

Código Seguro (PHP PDO) $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);