XUT_ / COURSES / CYBER SECURITY 101

SQL Injection Vulnerability

En la tarea anterior, estudiamos cómo las páginas web y aplicaciones interactúan con las bases de datos para almacenar, modificar y recuperar la información de manera estructurada. En esta veremos cómo la interacción entre la aplicación y la base de datos ocurre a través de queries SQL y cómo los atacantes utilizan estas queries para realizar SQLI.

CAUTION

Prueba métodos manuales o automáticos de SQLI pero SÓLO de aquellas aplicaciones de las cuales tengas permiso explícito del dueño para hacerlo.

Pongamos un ejemplo:

Una página web te pide las credenciales y nosotros le mandamos:

Username: John Password: Un@detectable444

Una vez que lo introducimos el sitio web lo recibe y realiza una query SQL a la base de datos con nuestras credenciales:

SQL
SELECT * FROM users WHERE username = 'John' AND password = 'Un@detectable444';

Esta query será ejecutada en la base de datos. Comprobará si hay un usuario que sea John y si su contraseña es Un@detectable444. Si lo hay, devolverá todos sus datos. Sólo funcionara si coinciden el usuario y la contraseña, debido al AND de la query.

Si el input no está correctamente sanitizado, los atacantes pueden manipular el input y escribir queries SQL que se ejecutarán en la base de datos. La SQLI tiene un efecto muy dañino en el mundo digital ya que todas las empresas guardan información (incluida información crítica).

Si el input no está sanitizado, un atacante podría escribir algo como:

Username: John Password: abc' OR 1=1;-- -

Esta vez, la query que se ejecutaría se vería como:

SQL
SELECT * FROM users WHERE username = 'John' AND password = 'abd' OR 1=1;-- -';

Observa como el atacante ha sustituido la última comilla por la suya (la que escribió después de abc). Además insertó el operador OR que hace que aunque la contraseña sea incorrecta, si el statement que hay a la derecha es true, la query será exitosa. Es decir, como 1=1, siempre será exitosa pongamos la contraseña que pongamos. Y como acaba la contraseña con ; para cerrar la query sin errores y -- - para comentar el resto de la query, esta no ve '; que restaba de la query anterior, por lo que no falla.