¿Qué son las Inyecciones de Bases de Datos?
Definición General: Las inyecciones de bases de datos son vulnerabilidades de seguridad que ocurren cuando los datos de entrada del usuario no se validan o filtran adecuadamente antes de ser procesados por la base de datos. Los atacantes pueden manipular estas consultas para ejecutar comandos no autorizados, acceder a información sensible o modificar datos.
Definición: Vulnerabilidad que afecta bases de datos relacionales (MySQL, PostgreSQL, MSSQL, Oracle) donde se manipulan consultas SQL mediante entrada maliciosa.
- Estructura de tablas con filas y columnas
- Lenguaje SQL estándar
- Esquemas fijos y relaciones definidas
- ACID compliance
Definición: Vulnerabilidad que afecta bases de datos no relacionales (MongoDB, CouchDB, Redis) donde se manipulan consultas a través de objetos JSON, operadores especiales o comandos específicos.
- Documentos, clave-valor, grafos
- Consultas mediante objetos/operadores
- Esquemas flexibles
- Escalabilidad horizontal
Herramientas de Testing
Inyecciones SQL - Ejemplos Prácticos
Utilizaremos los payloads especializados de la comunidad GitHub para cada caso específico:
SQL Injection Payloads- Servidor Web: Apache
- Base de Datos: MySQL
- Vulnerabilidad: Panel de autenticación sin validación
- Objetivo: Bypass de autenticación
En este escenario, nos enfrentamos a un panel de autenticación que utiliza servidor web Apache y motor de base de datos MySQL. Para eludir el mecanismo de autenticación, implementaremos una serie de payloads de inyección SQL hasta identificar el comando adecuado.
Panel de autenticación vulnerable de la máquina HTB Writer
Proceso de Explotación:
- Reconocimiento: Identificación del panel de login
- Testing de payloads: Prueba sistemática de inyecciones
- Bypass exitoso: Autenticación conseguida
Proceso de prueba de diferentes payloads de inyección SQL
admin'-- -
Bypass exitoso utilizando el payload 'admin'-- -'
Explicación técnica del payload:
admin': Cierra la cadena del usuario--: Comentario SQL que ignora el resto de la consulta-: Carácter adicional para evitar problemas de espacios
Este payload convierte una consulta como SELECT * FROM users WHERE username='admin'-- -' AND password='[input]' en una que solo verifica el usuario, ignorando la validación de contraseña.
Consulta SQL Original (aproximada):
SELECT * FROM users WHERE username='[USER]' AND password='[PASSWORD]'
Consulta SQL Modificada:
SELECT * FROM users WHERE username='admin'-- -' AND password='[PASSWORD]'
Acceso conseguido al panel de administración tras el bypass SQL exitoso
Inyecciones NoSQL - Ejemplos Prácticos
Payloads especializados para bases de datos NoSQL:
NoSQL Injection Payloads- Servidor Web: Nginx
- Base de Datos: MongoDB
- Tecnología: Node.js
- Vulnerabilidad: Panel de login con validación inadecuada
Fase de Reconocimiento:
Durante el proceso inicial de reconocimiento, se descubre que el usuario admin existe en el sistema. Esto se determina por el comportamiento diferencial de los mensajes de error:
- Usuario inexistente: "Usuario no válido"
- Usuario válido: "Contraseña no válida" ← Indica que 'admin' existe
Panel de login de HTB NodeBlog mostrando error diferencial que revela usuario válido
Respuesta del servidor confirmando que el usuario 'admin' existe
Proceso de Explotación con Burp Suite:
- Configuración del Proxy: FoxyProxy + Burp Suite
- Intercepción: Captura de petición de login
- Modificación: Inyección del payload NoSQL
- Bypass exitoso: Acceso al panel de administración
{"user":"admin", "password":"test123"}
{"user":"admin", "password": {"$ne": null}}
Configuración de Burp Suite con FoxyProxy para interceptar tráfico HTTP
Intercepción y modificación de la petición con el payload NoSQL {"$ne": null}
Análisis técnico del payload:
"user":"admin": Usuario conocido válido{"$ne": null}: Operador MongoDB "not equal"- Lógica: "Contraseña no es igual a null"
- Resultado: Evaluación como
true
MongoDB interpreta esta condición como verdadera, ya que cualquier contraseña hash almacenada no será null, permitiendo el bypass de autenticación.
Consulta MongoDB Resultante:
db.users.find({
"username": "admin",
"password": {"$ne": null}
})
Acceso exitoso al panel de administración tras el bypass NoSQL
Otros Operadores NoSQL Útiles
Medidas de Protección
Protección contra SQL Injection
- Prepared Statements: Uso de consultas parametrizadas
- Stored Procedures: Lógica en la base de datos
- Input Validation: Validación y sanitización estricta
- Principio de menor privilegio: Usuarios DB con permisos limitados
- WAF: Web Application Firewall
Protección contra NoSQL Injection
- Schema Validation: Validación de estructura JSON
- Query Sanitization: Filtrado de operadores especiales
- Type Checking: Validación de tipos de datos
- Rate Limiting: Limitar intentos de autenticación
- Monitoring: Detección de patrones anómalos
// Validación de entrada para NoSQL
function validateInput(input) {
if (typeof input !== 'string') {
throw new Error('Input must be string');
}
// Rechazar operadores MongoDB
if (input.includes('$') || input.includes('{')) {
throw new Error('Invalid characters detected');
}
return input.trim();
}
Consideraciones Éticas y Legales
Advertencia Legal: Las técnicas de inyección de bases de datos solo deben utilizarse en:
- Aplicaciones propias o con autorización explícita por escrito
- Plataformas de aprendizaje autorizadas (HTB, TryHackMe, PortSwigger Academy)
- Entornos de pentesting con contrato legal válido
- Laboratorios de práctica controlados
El acceso no autorizado a sistemas y bases de datos constituye un delito grave según las legislaciones nacional e internacional.