viernes, 20 de julio de 2018

Ataques Web - Demostración - Sql Inyection

Como su propio nombre indica, esta vulnerabilidad consiste en inyectar código SQL invasor dentro del código SQL programado con el objetivo de alterar la funcionalidad del programa. Este tipo de intrusión normalmente es de carácter malicioso y, por tanto, un problema de seguridad informática. Un programa o página web que no haya sido validado de forma correcta podrá ser vulnerable y la seguridad del sistema (base de datos) no podrá ser asegurada.

La intrusión se puede llevar a cabo al ejecutar un programa vulnerable, ya sea, en ordenadores de escritorio o bien en sitios Web.

La vulnerabilidad se puede producir cuando el programador use parámetros a ingresar por parte del usuario, para realizar una consulta de la base de datos. En esos parámetros es donde se puede incluir el código SQL intruso para que sea ejecutado en dicha consulta.

El objetivo más común del código intruso es extraer toda la información posible de la base de datos, aunque tienen más usos como puede ser el iniciar sesión con la cuenta otro usuario, subir una shell al servidor, etc.


DVWA muestra un formulario donde se podrá escribir el número identificativo (ID) de un usuario de la base de datos, devolviendo el script su nombre y apellidos.
devolviendo el script su nombre y apellidos
El código que obtiene la id del para la consulta no tiene ningún tipo de filtrado por lo que es vulnerable a este tipo de ataque y se podrá inyectar código SQL. Antes de inyectar código malicioso se vera un ejemplo de cómo funciona la página:

jemplo de cómo funciona la página

Una forma rápida y sencilla de ver si la página tiene una vulnerabilidad del tipo SQL Injection es introducir una comilla simple, en el caso de tener este tipo de vulnerabilidad va a devolver un error de SQL:


tipo de vulnerabilidad


En la anterior figura se observa que el mensaje devuelto por el servidor es que hay un error de sintaxis en la consulta de SQL, por lo tanto es vulnerable y se puede proceder con una  inyección. Hay que tener en cuenta que no en todos los casos aparece el error, dependerá del tipo de vulnerabilidad que tenga, ya que en inyecciones avanzadas no muestran nada enviando una comilla.
A continuación se muestran consultas básicas que se usan al hacer este tipo de ataque:
  • 1' OR 1=1----'
  • 1' OR '1' = '1
  • 'OR='
  • ' OR 1=1----'
  • ' OR 0=0 ----'
  • ' OR 'x'='x
Al probar la inyección con 1'' OR 1=1----'' se muestra todos los usuarios que hay en la base de datos:

muestra todos los usuarios que hay en la base de datos

Pese a la restricción de caracteres especiales se sigue teniendo un gran abanico de  posibilidades a la hora de formar una consulta para obtener datos, a continuación se muestra un ejemplo en el que anida la consulta original con otra para poder obtener la contraseña de cada usuario:
1 UNIION ALL SELECT ffiirstt_name,, password ffrom dvwa..users;;

obtener la contraseña de cada usuario

Una vez obtenida la contraseña (encriptada con MD5), basta con dirigirse a algún servicio como el que ofrece la página web http://md5.rednoize.com/ para obtener la contraseña desencriptada. Para ello, se copia la contraseña encriptada y se pulsa en buscar. A modo de ejemplo se muestra la contraseña desencriptada del usuario Gordon:

encriptada con MD5


Prevención


DVWA hace uso en el nivel de seguridad high de algunas funciones PHP para filtrar la información recibida desde el formulario:



Existen ciertos principios a considerar para proteger aplicaciones de un SQL Injection:
     No confiar en la entrada del usuario.
     No utilizar sentencias SQL construidas dinámicamente.
     No utilizar cuentas con privilegios administrativos.
     No proporcionar mayor información de la necesaria.

Adicionalmente se recomienda el uso de la librería mysqli puesto que permite la posibilidad de realizar conexiones seguras a la base de datos a través de SSL y ofrece mucha más seguridad frente a la vulnerabilidad SQL Injection.


No hay comentarios:

Publicar un comentario