¿QUE ES UNA INYECCIÓN SQL Y COMO FUNCIONA?

¿QUE ES UNA INYECCIÓN SQL?  TE LO EXPLICO MUY FÁCILMENTE


Una de las principales preguntas que surgen a la hora de crear o administrar una web es referente a la seguridad de la misma.  Así que en esta ocasión vamos a hablar del que probablemente sea (o de hecho lo es) la vulnerabilidad mas común y la que mas ha causado problemas, pese a ser relativamente “tonta”. Y no es para menos ya que ha estado 1 en el top de OWASP desde hace ya muchos años, estoy hablando de el SQL-INJECTION.

Así que haré una breve y sencilla explicación para aquellos que siempre se hallan preguntado de que se trata:


¿EN QUE CONSISTE?

Antes que nada es necesario aclarar que como su nombre lo indica, una SQL-INJECTION solo afecta a webs que consulten bases de datos, por ejemplo las típicas web que requieren un login para ingresar a ellas. Aun así no es necesario ser un experto en el lenguaje SQL para entender como funciona esta vulnerabilidad.

Básicamente consiste en lo siguiente, y lo explicare con el ejemplo mas sencillo posible:
Una consulta típica y básica de SQL para acceder a la bases de datos a través de un login seria algo así:

SQL Query:  SELECT * FROM users WHERE user=’Pepito’ AND password=’1234’

Hasta ahí no hay problema, es una consulta en una base de datos común y corriente que literalmente dice “seleccionar desde todos los usuarios donde usuario sea ‘’Pepito y contraseña sea ‘1234’ ” .  No tiene gran misterio.
¿Entonces donde esta el problema?..  El problema, es que los lenguajes informáticos se rigen por los llamados valores booleanos “TRUE(1)” y “FALSE(0)”, en otras palabras, si es correcto ejecuta acción, si es incorrecto, no la ejecuta.

Así que de la misma forma en que podemos afirmar que user=“Pepito”  y  password=’1234’ son correctos, también podríamos afirmar que ‘1’=’1’  es correcto para cada uno de los casos. Y aunque parezca obvio para nosotros, para un lenguaje informático no lo es, ya que este solo busca comparar lo que es verdadero y lo que es falso, y evidentemente ‘1’=’1’ es verdadero, quiere decir que se ejecuta la acción. Y es en este punto en donde comienza la inyección.

Vamos a ver como se aplicaría la inyección en una situación real. Para este caso necesitaríamos modificar la SQL Query de la siguiente forma:

SQL Query:  SELECT * FROM users WHERE user=’Pepito’ OR ‘1’=’1’ AND password=’1234’ OR ‘1’=’1’

Con lo cual el Query ahora diría los siguiente: “seleccionar todos de usuarios donde usuario sea ‘’Pepito O 1=1 y contraseña sea ‘1234’ O también 1=1 ”.. básicamente al incluir OR estamos convirtiendo a ‘Pepito’ y a ‘1234’ en simples datos opcionales que en caso de no estar correctos serán suplidos por el dato indiscutible mente correcto de que 1=1. De hecho estos datos ahora opcionales nunca serán colocados por que justamente el atacante de la web no los conoce por lo que los dejara en blanco enviando la Query finalmente así:

SQL Query:  SELECT * FROM users WHERE user=’’ OR ‘1’=’1’ AND password=’’ OR ‘1’=’1’


¿PERO COMO SE INYECTA ESTO EN LA WEB?

Es tan simple como colocar en cada campo del login la cadena:  ’OR ‘1’=’1 
Esto es debido a que el resto de la Query ya se registra automáticamente al enviar el formulario de acceso, por lo que la primera comilla del “ ’OR ‘1’=’1”cierra una cadena vacía, y la ultima faltante no se requiera al ya estar presente con el propósito que tenia de cerrar la cadena de los datos no malintencionados ingresados por un usuario normal.

Como podemos ver, es evidente que esta vulnerabilidad se crea por malas practicas de programación de quien creo el sitio web, pero aun así es un error muy común.

Cabe destacar que no todas las web que manejan bases de datos son vulnerables a esto ya que un sitio web muy importante o profesional difícilmente caería en algo como esto, pero aun así hay miles sino es que millones de webs por ahí que siguen cometiendo estos errores tan elementales, tanto que incluso hay herramientas open source como SQLMap que automatizan la explotacion de este tipo de vulnerabilidad. 
En la próxima publicación explicare las formas de evitar que esto ocurra y como saber si una web es vulnerable.


ARTICUL0

Share this

Related Posts

Previous
Next Post »

Entrada destacada

¿CUAL ES LA DIFERENCIA ENTRE DISCO DURO, RAM, CACHE Y BUFFER?

¿CUAL ES LA DIFERENCIA ENTRE DISCO DURO, RAM, CACHÉ Y BUFFER? Es común que muchas personas se confundan respecto a las diferencias ...