SQL Injection (Inyección SQL)
🌐 Vulnerabilidad: SQL Injection (Inyección SQL)
🕵️♂️ ¿Qué es SQL Injection?
SQL Injection (SQLi) es una vulnerabilidad que ocurre cuando un atacante manipula entradas del usuario para alterar consultas SQL en una aplicación. Esto permite ejecutar comandos maliciosos en la base de datos, exfiltrar datos sensibles, modificar registros, o incluso comprometer el sistema.
⚙️ ¿Cómo se produce?
Entrada no validada: El usuario introduce datos que se utilizan directamente en una consulta SQL.
Inyección en la consulta: Los datos inyectados manipulan la consulta SQL original.
Ejecución del código malicioso: La base de datos procesa el comando inyectado como si fuera legítimo.
🛠️ Mecanismo de ataque
Ejemplo de código vulnerable en PHP:
Ataque: Un atacante introduce:
Esto convierte la consulta SQL original:
El condicional 1='1'
siempre es verdadero, lo que permite al atacante acceder a todos los registros de la tabla.
🎯 Impacto
Exposición de datos sensibles: Robo de datos personales, credenciales o información financiera.
Modificación de datos: Cambiar o eliminar registros.
Toma de control del sistema: En casos extremos, los atacantes pueden obtener acceso administrativo al servidor.
Denegación de servicio (DoS): Uso de consultas pesadas para sobrecargar la base de datos.
📉 Puntaje CVSS v3
Vector de ataque: Red (Explotable remotamente)
Complejidad del ataque: Baja
Impacto en confidencialidad: Alto
Impacto en integridad: Alto
Impacto en disponibilidad: Alto
Puntaje CVSS v3: 9.0 - 10.0 (Crítico) 🔥
🧑💻 Ejemplo práctico
Código vulnerable:
Ataque para evadir autenticación:
Consulta resultante:
📌 Esto permite al atacante acceder sin conocer la contraseña real.
🛡️ ¿Cómo prevenir SQL Injection?
1️⃣ Uso de consultas parametrizadas
Utiliza sentencias preparadas para separar los datos de la lógica de la consulta:
2️⃣ Validar y sanitizar entradas
Verifica que las entradas de usuario cumplan con los formatos esperados:
3️⃣ Límite de privilegios
Configura la base de datos para que el usuario que accede desde la aplicación tenga permisos mínimos necesarios.
4️⃣ Usar ORM seguros
Frameworks como Laravel, Django o SQLAlchemy manejan automáticamente las consultas de manera segura.
5️⃣ Escapar caracteres especiales
Escapa manualmente las entradas cuando no se usan sentencias preparadas:
6️⃣ Auditorías y pruebas de seguridad
Realiza pruebas de penetración regularmente para detectar vulnerabilidades de inyección.
7️⃣ Deshabilitar funciones peligrosas
En algunos casos, deshabilitar funciones como xp_cmdshell
en bases de datos como SQL Server puede prevenir la ejecución de comandos.
💡 Dato extra: Las vulnerabilidades de SQL Injection son unas de las más antiguas y comunes en aplicaciones web, pero también unas de las más prevenibles.
🚨 Nota importante: Nunca confíes en las entradas del usuario, incluso si provienen de fuentes internas o de administradores.
Última actualización
¿Te fue útil?