SQL injection

0
198

El mundo de internet está plagado de vulnerabilidades como puertos abiertos, puertas traseras, agujeros de seguridad, ataques troyanos, gusanos, vulnerabilidades en cortafuegos, y otros tipo de amenazas. Para la privacidad y seguridad de los datos de un usuario, los virus , gusanos y troyanos son una verdadera molestia. Mientras que para los administradores de bases de datos y aplicaciones web, la inyección SQL es una de las vulnerabilidades de seguridad más destructivas.

 

Para entender una ataque por inyección SQL, se debe entender la forma en que funciona el lenguaje y las consultas SQL, y es uno de los lenguajes más utilizados para el almacenamiento de datos en una aplicación de escritorio o una aplicación Web.

 

SQL significa Structured Query Language o Lenguaje Estructurado de Consultas, que provee de ciertos comandos, sintaxis y semántica para optimizar el manejo de tablas de datos. Los comandos más utilizados para el uso de SQL se debe dependiendo de las circunstancias:

 

– Cuando se necesita insertar datos

– Cuando se necesita cambiar datos

– Cuando se necesita eliminar datos

– Cuando se necesita buscar y listar datos

 

Estos comando se ejecutan en un servidor SQL a través de un gestor de bases de datos. La mayoría de las veces los programadores deciden cuando y como se va a ejecutar una consulta SQL en el servidor de base de datos en el código fuente de una aplicación. Pero existen circunstancias en las que no se puede evitar que un usuario pueda forzar la manipulación de una base de datos.

 

Una de las posibilidades de acceder a la base de datos, es a través de los campos en los formularios de una aplicación Web, donde un usuario con intenciones maliciosas puede incrustar un fragmento de una sentencia SQL para obtener información acerca del funcionamiento de la base de datos.

 

Por ejemplo, en un formulario de autenticación donde se pida el usuario y la contraseña de un usuario para acceder a un sistema, se puede agregar fragmentos de una consulta usando comandos de SQL que muestren información acerca del manejo de errores por parte del gestor de base de datos de un sistema.

 

Uno de los ejemplos para este tipo de ataques es a través de una consulta para autenticar un usuario en una base de datos, una de las formas utilizadas con frecuencia es la siguiente:

 

SELECT user_id

FROM users

WHERE username=’$user’ AND password = ‘$pasword’

 

Básicamente, la sentencia anterior buscar la clave principal de una tabla con los parámetros usuario y contraseña enviados a través de un formulario en una página web y suponiendo que el usuario haya llenado el formulario con la siguiente información:

 

Usuario: admin

Password: 4dm1n’ OR ‘1’ = ‘1’

 

Cuando el servidor recibe la petición enviada a través del formulario la sentencia SQL quedaría de la siguiente forma:

 

SELECT user_id

FROM user

WHERE username=’admin’ AND password = ‘4dm1n’ OR ‘1’ = ‘1

 

Cuando el servidor ejecuta la última consulta, la última parte de la sentencia SQL siempre va a retornar 1 o verdadero. Esto significa que un usuario con los conocimientos suficientes puede acceder a una cuenta sin saber el usuario ni la contraseña de una aplicación.

 

Dejar respuesta