Inyecciones SQL – Empezando

inyectionLas inyecciones SQL son ataques a las aplicaciones que utilizan bases de datos para almacenar su información, como por ejemplo las páginas web. Una inyección SQL no es más que alterar el código de las consultas SQL que se realizan por ejemplo, en formularios de acceso. Su objetivo es añadir trozos de sentencia para envenenarla o para añadir más sentencias maliciosas.

En el caso de las páginas web, la mayoría de los frameworks y aplicaciones están concienciadas con este peligroso método de ataques, securizando al máximo las aplicaciones usando filtros y verificaciones.

Si bien la mayoría de las aplicaciones están al tanto de estos ataques, aún quedan muchas (te sorprendería ver cuantas) aplicaciones expuestas a ataques de inyección SQL (entre otros tipos de ataques).

Últimamente me he interesado por saber cómo trabajan los autores de este tipo de ataques. En este artículo vamos a empezar comprendiendo conceptos básicos de cómo funciona una inyección de código SQL usando el ejercicio del artículo de las cookies. Entiendo que para realizar este ejercicio se tienen unos conocimientos básicos sobre sentencias SQL.

Para refrescar un poco el ejercicio, recordamos que tenemos una tabla de usuarios en la base de datos que contiene 4 campos (identificador, usuario, contraseña y campo de cookie).

La aplicación tenía dos archivos, uno con el formulario de acceso a la aplicación y otro con la comprobación y el mensaje de usuario autenticado o error.

Tenemos en cuenta que este ejercicio es básico y sin controles de seguridad en la verificación de contraseña, ni encriptación.

Comprobar que es susceptible a los ataques

Un paso principal es verificar que nuestra aplicación es susceptible a inyecciones SQL, y por lo tanto no está dotada de medidas de seguridad (o al menos no las suficientes) para combatir nuestros ataques.

Empezaremos por ingresar con un usuario existente y su contraseña verdadera, pero añadiendo una condición WHERE más.

inyectionHará la siguiente consulta al servidor:

SELECT * FROM users WHERE username='jorge' AND password='12345' AND 'a'='a'

La función de la comilla simple justo después de la contraseña es para cerrar la comprobación del campo password, y hacer otra más en el WHERE de la consulta. Ésa consulta que añadimos es una comprobación simple dos valores iguales que dará siempre true. En el segundo operador no se cierran las comillas porque la consulta utilizará la que el sistema tenía prevista para el cierre de la comprobación de la contraseña y que le hemos puesto en la parte de la contraseña (12345′).

Si nuestro usuario (que sabemos que existe y funciona, podría ser el nuestro) es autenticado correctamente, sabemos que algo podremos hacer.

Borrado de datos

Una forma de destruir todo el trabajo (es bastante agresivo) es borrar directamente la información de la base de datos, esto es algo que normalmente no se utiliza ya que el atacante estaría más interesado en sacar información que en destruirla.

Para este ejercicio vamos a unir dos consultas en el campo de contraseñas, la que hace por defecto para comprobar el usuario y otra más para borrar la tabla de usuarios.

inyectionEn esta sentencia hacemos la misma operación para cerrar la comprobación del campo de la contraseña. A continuación cerraremos la consulta con punto y coma. Entonces empezaremos otra consulta que será para borrar la tabla users (tendremos que probar varios nombres como usuarios, users…) y cerramos la consulta.

Si nos fijamos al final de la sentencia hay dos guiones (– ). Esos guiones omitirán la última comilla que recordemos se añadirá a la consulta (deberemos dejar un espacio después de los guiones), su función es la de comentar hasta final de línea, por lo tanto la última comilla no se ejecutará y por lo tanto no dará el error que daría de lo contrario.

Ahora podemos comprobar que la tabla users ha desaparecido.

Entrando como usuario administrador

Para entrar como un usuario administrador podemos deducir que su usuario tendrá un identificador primario 1 (al ser el primer usuario en crearse), si nos basamos en esta teoría, sabiendo el nombre de un usuario normal (el nuestro por ejemplo) podremos confundir al sistema para que ejecute el primer registro de la tabla, que será el usuario administrador.

inyectionEn nuestra inyección hacemos la misma operación de los ejercicios anteriores para el password y además añadimos una condición OR con un LIKE de cualquier password (deberemos probar distintos nombres utilizados para la columna de contraseña). Además limitaremos los resultados a 1 y podemos ordenar por ID o buscar el nombre de usuario con LIKE ‘admin%’ para encontrar coincidencias con administrador, admin, administrator, etc.

El resultado que podremos ver será:

inyectionY aquí tenemos al usuario admin autenticado. Imprimo la consulta para comprobar que se ha puesto el usuario jorge en el formulario de acceso.

Vistos los fundamentos básicos del envenenamiento de consultas SQL, si aún no estabamos concienciados con la seguridad en este aspecto, deberemos aplicarla a nuestras herramientas si no queremos tener una desgracia algún día.

En el siguiente artículo vamos a analizar las medidas que tendremos que tomar para aumentar la seguridad de nuestra aplicación ante los ataques de inyección SQL.

¿Te ha gustado? Compártelo y Comenta! Puedes darme tu opinión o consultar tus dudas, de esta forma mantendremos la blogosfera viva.

    2 Commentsto Inyecciones SQL – Empezando

    1. Información Bitacoras.com…

      Valora en Bitacoras.com: Las inyecciones SQL son ataques a las aplicaciones que utilizan bases de datos para almacenar su información, como por ejemplo las páginas web. Una inyección SQL no es más que alterar el código de las consultas SQL que s……

    2. Dryken dice:

      Mejor explicado imposible Jorge, así de sencillito se entiende perfectamente. Lo suyo sería para complementarlo hacer en otra ocasión otro tutorial pero en este caso de XSS.

      Gran trabajo. Saludos compañero!

    Responder a Bitacoras.com Cancelar respuesta

    Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *


    *

    © 2018 Soy Autodidacta | Design Theme by: D5 Creation | Powered by: WordPress