¿Qué es la inyección SQL?

La inyección SQL es la técnica de insertar comandos SQL completos o "partial" en campos de datos proporcionados por el usuario en aplicación web y enviarlos para que el servidor de base de datos los ejecute. 

Dicho de forma más simple, la inyección SQL ocurre cuando un actor malicioso puede inyectar código malicioso en una aplicación debido a código mal escrito en la aplicación.

¿Cómo funciona un ataque de inyección SQL?

Las empresas usan campos como formularios de contacto, formularios de comentarios, formularios de pago y barras de búsqueda para interactuar con los usuarios del sitio web. Estos campos permiten que los usuarios envíen información legítimamente a la base de datos de la empresa y recuperen información de ella. Esta “línea abierta” entre el usuario y la base de datos es propensa a la inyección de SQL.

Si el campo está codificado incorrectamente, un atacante puede usarlo para insertar comandos SQL maliciosos. El código inyectado puede engañar a la base de datos para que ejecute los comandos del atacante, capaces de extraer información privada y modificar o arruinar tablas de la base de datos. El contenido dinámico, así como los campos, son susceptibles a la inyección de SQL.

¿Qué pasos sigue un atacante en un ataque de inyección SQL?

  1. El atacante introduce un comando SQL manipulado en el campo del formulario

  2. Una base de datos insegura considera válida esta consulta

  3. El atacante obtiene una respuesta de la base de datos que contiene información confidencial

  4. El atacante obtiene información (como el nombre de la tabla) para entender la estructura de la base de datos

  5. El atacante modifica datos en la base de datos de forma maliciosa

Tipos de inyecciones SQL

Hay tres categorías de inyecciones SQL:

Inyección SQL inferencial (ciega)

En un ataque SQL ciego, el atacante envía datos al servidor y observa su comportamiento en respuesta. El atacante puede recopilar información con base en las respuestas de la base de datos a las solicitudes/indicaciones del atacante y deducir información crítica sobre la base de datos. Con suficiente observación, el atacante puede formarse una idea de la base de datos y de cómo está construida, lo que ayuda a informar al atacante sobre la mejor manera de explotarla. Este estilo de inyección es “ciego” porque el atacante no puede ver realmente el interior de la base de datos. 

Inyección SQL en banda

También conocido como una inyección SQL clásica, en un ataque de inyección SQL in-band, el atacante obtiene su resultado en el mismo “canal” en el que lanzó el ataque. Por ejemplo, supongamos que un atacante realiza una inyección SQL en un navegador web; el atacante recibirá los resultados de ese ataque en la misma ubicación (el navegador web). 

Inyección SQL fuera de banda

En un ataque de inyección SQL fuera de banda, el atacante no obtiene su resultado (respuesta) de la aplicación atacada en el mismo “canal” que su ataque. En cambio, el ataque obliga a la aplicación a enviar datos a un endpoint remoto. Este endpoint está controlado por el atacante, lo que le permite acceder a la respuesta de la aplicación. 

Ejemplo de inyección SQL

Cuando un usuario envía credenciales en una página de inicio de sesión, la aplicación web las usa en una consulta SQL que se envía a la base de datos para su ejecución. Si el nombre de usuario y la contraseña enviados son válidos, el usuario obtiene acceso. Suponiendo que el nombre de usuario es ‘user1’ y la contraseña es ‘pass123’, la aplicación web envía la siguiente consulta SQL a la base de datos para su verificación:

SELECT * FROM Users WHERE name = 'user1' AND password = 'pass123'

En lugar de usar un nombre de usuario válido, un atacante envía “test’ OR “1 = 1–” como nombre de usuario y cualquier cosa como contraseña. Esta consulta SQL arbitraria devolverá un valor verdadero. La consulta arbitraria se ve así:

SELECT * FROM Users WHERE name = 'test' OR 1 = 1 --' AND password = 'xxxxx'

Después de ingresar la consulta, el hacker obtiene acceso a una sesión sin iniciar sesión. Luego, el hacker roba datos o manipula las bases de datos del sitio web. 

Cómo prevenir ataques de SQL

Que un atacante obtenga acceso administrativo a una base de datos es una filtración de seguridad extrema que la inyección SQL hace posible. Mediante este tipo de ataque, un hacker puede cambiar o eliminar partes de toda la base de datos. El atacante también puede lanzar ataques desde un servidor comprometido y acceder a información confidencial almacenada en la base de datos. Es posible prevenir esta importante amenaza de seguridad si se codifican correctamente los campos y se actualiza el software del servidor con los parches más recientes.

Herramientas como Next-Gen WAF de Fastly, con su motor de detección propietario, SmartParse, toman decisiones instantáneas en línea para determinar si hay cargas útiles maliciosas o anómalas presentes. SmartParse elimina la necesidad de usar regex y de realizar ajustes manuales intensivos. 

Puedes obtener más información sobre cómo prevenir ataques de inyección SQL y otros Los 10 principales ataques de OWASP con Fastly aquí

Más información sobre las capacidades de seguridad de Fastly

Más información


¿Estás listo para empezar?

Ponte en contacto con nosotros