¿Qué es la inyección SQL?
La inyección SQL es la técnica que consiste en insertar comandos SQL completos o partial en los campos de datos de las aplicación web que rellenan los usuarios y enviarlos para que los ejecute el servidor de la base de datos.
Dicho de forma más sencilla, la inyección SQL se produce 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 por inyección SQL?
Las empresas utilizan 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 a los usuarios enviar información legítimamente a la base de datos de la empresa y recuperar información de ella. Esta «línea abierta» entre el usuario y la base de datos es propensa a la inyección 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 SQL.
¿Qué pasos sigue un atacante en un ataque por inyección SQL?
El atacante introduce un comando SQL manipulado en un campo de formulario
Una base de datos no segura considera válida esta consulta
El atacante obtiene una respuesta de la base de datos que contiene información confidencial
El atacante obtiene información (como el nombre de la tabla) para comprender la estructura de la base de datos
El atacante modifica los datos de la base de datos de forma maliciosa
Tipos de inyecciones SQL
Hay tres categorías de inyecciones SQL:
Inyección SQLI inferencial (ciega)
En un ataque SQL a ciegas, el atacante envía datos al servidor y observa su comportamiento en respuesta. El atacante puede recopilar información basándose en la respuesta de la base de datos a las petición 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 aprovecharla. Este tipo de inyección es «ciega» porque el atacante no puede ver realmente el interior de la base de datos.
Inyección SQL dentro de banda
También conocido como una inyección SQL clásica, en un ataque por inyección SQL en banda, el atacante obtiene el 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 de código SQL fuera de banda
En un ataque por 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 su lugar, 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 utiliza 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 tiene este aspecto:
SELECT * FROM Users WHERE name = 'test' OR 1 = 1 --' AND password = 'xxxxx'
Después de introducir la consulta, el hacker obtiene acceso a una sesión iniciada sin contraseña. A continuación, 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 violación de la 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 codificando correctamente los campos y actualizando el software del servidor con los últimos parches.
Herramientas como el WAF de última generación de Fastly, con su motor de detección patentado 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 por inyección SQL y otros 10 principales ataques según OWASP con Fastly aquí.




