0% encontró este documento útil (0 votos)
26 vistas3 páginas

Guía Didáctica Inyecciones SQL

La guía didáctica aborda las inyecciones SQL (SQLi), explicando cómo los atacantes insertan código malicioso en consultas SQL para manipular bases de datos. Se describen varios tipos de inyecciones SQL, como la basada en errores, unión, ciega y de segunda orden, junto con ejemplos y recomendaciones para prevenir estos ataques. Se enfatiza el uso de consultas parametrizadas, validación de entradas y el principio de mínimos privilegios como medidas clave de seguridad.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
26 vistas3 páginas

Guía Didáctica Inyecciones SQL

La guía didáctica aborda las inyecciones SQL (SQLi), explicando cómo los atacantes insertan código malicioso en consultas SQL para manipular bases de datos. Se describen varios tipos de inyecciones SQL, como la basada en errores, unión, ciega y de segunda orden, junto con ejemplos y recomendaciones para prevenir estos ataques. Se enfatiza el uso de consultas parametrizadas, validación de entradas y el principio de mínimos privilegios como medidas clave de seguridad.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Guía Didáctica sobre Inyecciones SQL: Conceptos Básicos, Sintaxis,

Recomendaciones y Ejemplos

1. Introducción a las Inyecciones SQL (SQLi)


La inyección SQL (SQL Injection, SQLi) es una técnica de ataque en la que un atacante
inserta o "inyecta" código SQL malicioso en una consulta que una aplicación realiza a la
base de datos. Esto permite manipular la consulta para acceder a información confidencial,
modificar datos, o incluso eliminar la base de datos.

2. ¿Cómo se Conforma una Inyección SQL?


Una consulta SQL estándar interactúa con la base de datos a través de comandos como
SELECT, INSERT, DELETE, o UPDATE. En una inyección SQL, se introduce un código
adicional en los campos de entrada de una aplicación (como formularios o URL), con el fin
de alterar la consulta original y obtener el control del comportamiento de la base de datos.

Por ejemplo, un formulario de inicio de sesión típico puede hacer una consulta SQL así:
SELECT * FROM usuarios WHERE usuario = 'admin' AND contraseña = '123456';

En una inyección SQL, un atacante podría alterar la consulta original de la siguiente


forma:
SELECT * FROM usuarios WHERE usuario = 'admin' OR '1' = '1';

Aquí, '1' = '1' siempre es verdadero, lo que permite al atacante saltarse la verificación de
la contraseña y acceder a la base de datos.

3. Tipos de Inyecciones SQL más Utilizadas

3.1. Inyección SQL Basada en Errores


Esta técnica consiste en aprovechar los mensajes de error que devuelve el sistema para
obtener información sobre la estructura de la base de datos, tablas o campos.

• Sintaxis común:
' OR 1=1 –

• Ejemplo: Si una aplicación realiza una consulta basada en el nombre de usuario


ingresado, el atacante podría escribir ' OR 1=1 --. Esto podría causar que todos los
registros sean devueltos o que el acceso sea permitido sin credenciales válidas.
• Recomendación: Deshabilitar los mensajes de error detallados o sensibles en
entornos de producción y validar correctamente todas las entradas.

3.2. Inyección SQL Basada en Unión (UNION)


Este tipo de ataque permite unir la salida de dos o más consultas diferentes. Se usa para
combinar los resultados de varias consultas y devolver datos no autorizados.

• Sintaxis común:
' UNION SELECT nombre, contraseña FROM usuarios --
• Ejemplo: Si el sitio web devuelve un producto según el ID proporcionado, un
atacante podría enviar algo como:
1 UNION SELECT nombre, contraseña FROM usuarios --

Esto forzaría a la aplicación a devolver datos de los usuarios en lugar de los productos.
• Recomendación: Limitar los permisos de la base de datos y utilizar consultas
preparadas (parametrizadas) para evitar manipulaciones de consulta.

3.3. Inyección SQL a Ciegas (Blind SQL Injection)


A diferencia de las inyecciones anteriores, en la inyección SQL a ciegas, el sistema no
muestra los resultados de la consulta SQL ni devuelve errores. El atacante realiza
inyecciones basadas en afirmaciones verdaderas o falsas para inferir información de la
base de datos.

• Sintaxis común:
' AND IF(SUBSTRING(contraseña,1,1) = 'a', SLEEP(5), 0) –

• Ejemplo: El atacante va enviando partes de la consulta, como si estuviera


preguntando “¿La primera letra de la contraseña es una 'a'?”. Si la consulta toma
más tiempo en responder (por el SLEEP(5)), el atacante sabe que la respuesta es
verdadera.

• Recomendación: Utilizar consultas parametrizadas y habilitar límites de tiempo de


ejecución en las consultas para evitar ataques de tipo “a ciegas”.

3.4. Inyección SQL de Segunda Orden


En este tipo de ataque, el atacante no obtiene resultados inmediatos. En lugar de ello, la
inyección SQL se almacena en la base de datos para ser ejecutada posteriormente cuando
los datos inyectados son procesados por otra consulta o módulo del sistema.

• Ejemplo: Un atacante puede inyectar código malicioso en un formulario de registro


de usuario, almacenándolo en la base de datos. Más adelante, cuando un
administrador revisa los detalles del usuario, el código SQL es ejecutado sin que él
lo sepa.
• Recomendación: Validar y sanear todos los datos de entrada, incluso los que
parecen ser confiables.

4. Sintaxis Común de las Inyecciones SQL


1. Comentado de consultas: El uso de -- para comentar el resto de la consulta SQL
y hacer que el código malicioso se ejecute sin restricciones:
' OR 1=1 –

2. Union-Based Injections: Usar UNION SELECT para combinar el resultado de dos


consultas:
' UNION SELECT nombre, contraseña FROM usuarios –
3. Boolean-Based Blind SQL: Consultas que evalúan si una afirmación es verdadera
o falsa:
' AND '1'='1' –

4. Time-Based Blind SQL: Utilizar funciones de espera (SLEEP) para observar los
tiempos de respuesta y deducir información:
' OR IF(1=1, SLEEP(5), 0) –

5. Recomendaciones para Prevenir Inyecciones SQL


1. Uso de Consultas Parametrizadas (Prepared Statements): Las consultas
parametrizadas son la mejor defensa contra la inyección SQL. Permiten que las
entradas del usuario se traten como simples datos, no como código ejecutable.

o Ejemplo en PHP:
$stmt = $pdo->prepare('SELECT * FROM usuarios WHERE usuario = :usuario AND
contraseña = :contraseña');
$stmt->execute(['usuario' => $usuario, 'contraseña' => $contraseña]);

2. Validación y Escapado de Entradas: Todas las entradas de usuarios deben ser


validadas y escapadas correctamente. No confíes en ninguna fuente de entrada,
incluso las internas.
3. Uso de ORM (Object Relational Mapping): Los ORM como Hibernate o Entity
Framework abstraen las consultas SQL, minimizando el riesgo de inyecciones SQL.
4. Principio de Mínimos Privilegios: El acceso a la base de datos debe estar
restringido. Las cuentas de usuario de bases de datos no deben tener más permisos
de los necesarios.
5. Monitoreo y Registro: Implementar un sistema de monitoreo que pueda detectar
patrones sospechosos en las consultas y realizar un análisis forense si es necesario.

6. Ejemplos Básicos
• Inyección de Login Bypass:
' OR '1'='1 –

• Inyección UNION:
' UNION SELECT usuario, contraseña FROM usuarios –

• Blind SQL (Basada en Tiempo):


' AND IF(1=1, SLEEP(5), 0) --

También podría gustarte