Volver al inicio
</>

Inyecciones SQL y NoSQL

Técnicas de explotación de bases de datos relacionales y no relacionales

¿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.

SQL Injection

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
NoSQL Injection

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

Burp Suite
Plataforma integral para pruebas de seguridad web con interceptor de tráfico y scanner automático.
SQLmap
Herramienta automatizada para detectar y explotar vulnerabilidades de inyección SQL.
NoSQLMap
Framework especializado en la detección y explotación de inyecciones NoSQL.
FoxyProxy
Extensión de navegador para gestión avanzada de proxies y interceptación de tráfico.

Inyecciones SQL - Ejemplos Prácticos

Recursos de PayloadsAllTheThings

Utilizaremos los payloads especializados de la comunidad GitHub para cada caso específico:

SQL Injection Payloads
Caso Práctico: HTB Writer (10.10.11.101)
Información del objetivo:
  • 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 de HTB Writer

Panel de autenticación vulnerable de la máquina HTB Writer

Proceso de Explotación:

  1. Reconocimiento: Identificación del panel de login
  2. Testing de payloads: Prueba sistemática de inyecciones
  3. Bypass exitoso: Autenticación conseguida
Proceso de inyección SQL en HTB Writer

Proceso de prueba de diferentes payloads de inyección SQL

Payload SQL Exitoso
admin'-- -
Bypass exitoso de autenticación SQL

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):

SQL Query
SELECT * FROM users WHERE username='[USER]' AND password='[PASSWORD]'

Consulta SQL Modificada:

SQL Query Inyectada
SELECT * FROM users WHERE username='admin'-- -' AND password='[PASSWORD]'
Acceso conseguido al panel de administración

Acceso conseguido al panel de administración tras el bypass SQL exitoso

Inyecciones NoSQL - Ejemplos Prácticos

Recursos NoSQL Injection

Payloads especializados para bases de datos NoSQL:

NoSQL Injection Payloads
Caso Práctico: HTB NodeBlog (10.10.11.139)
Información del objetivo:
  • 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 NodeBlog con error diferencial

Panel de login de HTB NodeBlog mostrando error diferencial que revela usuario válido

Respuesta del servidor confirmando usuario admin

Respuesta del servidor confirmando que el usuario 'admin' existe

Proceso de Explotación con Burp Suite:

  1. Configuración del Proxy: FoxyProxy + Burp Suite
  2. Intercepción: Captura de petición de login
  3. Modificación: Inyección del payload NoSQL
  4. Bypass exitoso: Acceso al panel de administración
Payload JSON Original
{"user":"admin", "password":"test123"}
Payload JSON Modificado
{"user":"admin", "password": {"$ne": null}}
Configuración de Burp Suite y FoxyProxy

Configuración de Burp Suite con FoxyProxy para interceptar tráfico HTTP

Intercepción y modificación del payload NoSQL

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:

MongoDB Query
db.users.find({ "username": "admin", "password": {"$ne": null} })
Acceso conseguido al panel de administración NodeBlog

Acceso exitoso al panel de administración tras el bypass NoSQL

Otros Operadores NoSQL Útiles

$ne (not equal)
{"password": {"$ne": ""}}
$regex
{"password": {"$regex": ".*"}}
$exists
{"password": {"$exists": true}}
$where
{"$where": "this.password != ''"}

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
Ejemplo: Validación Node.js
// 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.

Recursos de Aprendizaje

PortSwigger Academy
Laboratorios interactivos gratuitos de SQL injection con diferentes niveles de dificultad.
DVWA
Damn Vulnerable Web Application - Aplicación vulnerable para práctica.
SQLi-Labs
Laboratorio especializado en diferentes tipos de inyecciones SQL.
NoSQLInjection-Labs
Entorno de práctica para inyecciones NoSQL con MongoDB y CouchDB.