Inyección SQL: cómo y por qué funciona
Comprenda la inyección SQL clásica, ciega y fuera de banda, y por qué las consultas parametrizadas la evitan.
Inyección SQL: cómo y por qué funciona es una lección gratuita de Cyber Security Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cyber Security Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cyber Security Academy incluye 4 lecciones en total.
¿Qué es la inyección SQL?
La inyección SQL (SQLi) ocurre cuando se incluye una entrada proporcionada por el usuario en una consulta SQL sin la sanitización adecuada, lo que permite a los atacantes manipular la lógica de la consulta. Es una de las vulnerabilidades web más antiguas y dañinas.
Cómo funciona la inyección SQL
Un formulario de inicio de sesión realiza la consulta: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'
Si el atacante introduce ' OR 1=1-- como nombre de usuario, la consulta se convierte en: SELECT * FROM users WHERE username='' OR 1=1--' AND password='...', lo que devuelve todos los usuarios.
Tipos de inyección SQL
Variantes de SQLi:
- En banda: los resultados se devuelven directamente en la respuesta (clásica, basada en errores)
- A ciegas basada en booleanos: no hay salida directa; los datos se deducen a partir de respuestas verdaderas o falsas
- A ciegas basada en tiempo: los datos se deducen a partir de los retrasos de respuesta (
SLEEP(5)) - Fuera de banda: los datos se exfiltran mediante solicitudes DNS/HTTP
Inyección basada en UNION
Los ataques UNION agregan resultados de consultas controladas por el atacante:
-- Discover number of columns:
id=1 ORDER BY 3--
-- Extract data:
id=1 UNION SELECT username,password,NULL FROM users--Inyección basada en errores
Los mensajes de error revelan la estructura de la base de datos. Un atacante introduce datos que provocan un error de sintaxis y el mensaje de error resultante filtra nombres de tablas, nombres de columnas o la versión de la base de datos. Deshabilite los mensajes de error detallados en producción.
Inyección SQL a ciegas
Cuando no hay una salida visible, los atacantes utilizan condiciones booleanas:
-- If admin exists, page loads normally:
id=1 AND (SELECT COUNT(*) FROM users WHERE username='admin')=1--
-- Time-based:
id=1; IF(1=1) WAITFOR DELAY '0:0:5'--sqlmap: inyección SQL automatizada
sqlmap automatiza la detección y explotación de inyecciones SQL. Puede volcar bases de datos, leer archivos e incluso ejecutar comandos del sistema operativo si el usuario de la base de datos tiene privilegios suficientes.
sqlmap -u "http://target.com/page?id=1" --dbs
sqlmap -u "http://target.com/page?id=1" -D webapp -T users --dumpPrevenir la inyección SQL: consultas parametrizadas
La principal defensa son las consultas parametrizadas (sentencias preparadas). La entrada del usuario se pasa como parámetro y nunca se concatena en la cadena de consulta:
# Python (safe):
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
# Node.js (safe):
pool.query("SELECT * FROM users WHERE id = $1", [userId])Protección mediante ORM
El uso de un ORM (SQLAlchemy, Hibernate, Sequelize) suele prevenir la inyección SQL, porque las consultas se crean mediante abstracciones seguras. Sin embargo, los métodos de consulta sin procesar (execute(), query()) con interpolación de cadenas eluden las protecciones del ORM.
Validación de entradas y WAF
Defensas adicionales:
- Valide las entradas y permita únicamente tipos incluidos en una lista blanca (enteros, correos electrónicos)
- Utilice un firewall de aplicaciones web (WAF) para detectar patrones de inyección
- Utilice cuentas de base de datos con mínimo privilegio (sin DROP ni UNION en consultas de solo lectura)
- Utilice procedimientos almacenados (reducen la exposición, pero no son una solución completa)
Impacto de la inyección SQL
Una inyección SQL exitosa puede provocar: volcado completo de la base de datos, elusión de la autenticación, modificación o eliminación de datos, lectura de archivos del servidor (LOAD_FILE), escritura de web shells y ejecución de comandos del sistema operativo mediante xp_cmdshell (MSSQL).
Comprobación rápida: inyección SQL
¿Cuál es la principal defensa contra la inyección SQL?
Repaso de la lección
La inyección SQL manipula las consultas a la base de datos mediante entradas de usuario sin sanitizar. Los tipos de ataque incluyen el clásico, el booleano ciego, el basado en tiempo y el basado en UNION. La principal defensa son las consultas parametrizadas: nunca concatene la entrada del usuario en SQL. Utilice los ORM con cuidado, aplique cuentas de base de datos con privilegios mínimos y desactive los mensajes de error detallados.
Preguntas frecuentes
¿La lección «Inyección SQL: cómo y por qué funciona» es gratis?
Sí — el texto completo de «Inyección SQL: cómo y por qué funciona» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cyber Security Academy, actualiza a CoddyKit PRO. El curso de Cyber Security Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Inyección SQL: cómo y por qué funciona»?
Comprenda la inyección SQL clásica, ciega y fuera de banda, y por qué las consultas parametrizadas la evitan. Practicas Cyber Security Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Cyber Security Academy?
No se requiere experiencia previa. Cyber Security Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Inyección SQL: cómo y por qué funciona»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Cyber Security Academy?
Sí. Cada lección de Cyber Security Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Inyección SQL: cómo y por qué funciona
- Cross-Site Scripting (XSS)
- Cross-Site Request Forgery (CSRF)
- Configuración incorrecta de seguridad y servicios expuestos