¿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
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