lunes, 19 de abril de 2010

Ataque Blind sql inyection

Seguro que muchos habreis oido hablar en foros sobre el sql inyection o blind sql inyection. Pues bien ¿Qué es y para que sirve este tipo de ataques?

Chema Alonso en su blog, El lado del Mal, hablaba sobre este tipo de ataques como si jugaramos al "¿Quién es quién?" En este juego había que adivinar un personaje haciendo preguntas del tipo "Si, No":
  • ¿Es moreno?>No
  • ¿Es hombre?>Si
  • ¿Tiene bigote?>No
Con esto podrías llegar a deducir que personaje era el que tenía nuestro contrincante, y si hacíamos las preguntas adecuadas podríamos llegar a saber todo sobre el personaje.
Pues bien, así es como funciona el bind sql inyectión. Veámoslo.

¿Qué es un ataque blind sql Inyection?
Es una técnica de ataque que utiliza consultas sql inyection, preguntas a la base de datos. Cuando una página web, por motivos de seguridad (El motivo es que no hay seguridad) no muestra mensajes de error de la base de datos al no haber un resultado correcto mostrándose siempre el mismo contenido (solo habrá respuesta si el resultado es correcto).
Para las páginas que si poseen seguridad, si se hace una consulta no válida a la base de datos, aunque sea verdadera, mostrará un mensaje de error.
Las consultas a la base de datos en una web se hacen a través del método GET, que hemos visto recientemente en la teoría de PHP.
El blind sql inyection funciona si en una url del tipo:  http://localhost/mipágina/index.php?id=1 le añadimos una consulta a la base de datos, mediante la inyección de código SQL, quedando algo así:
  • http://localhost/BlinSQLInjection/blindmysql.php?id=1 AND 1=1;
Con esto no hacemos otra cosas que decirle a la página que 1 es igual a 1, cosa que es verdadera y, aquí viene lo bueno, si la página nos devueve la misma página con el mismo contenido que el que estamos viendo.... ¡BINGO! La página es vulnerable.


¿Para que sirve un ataque Blind SQL Inyectión?
El sistema parece algo tonto, pero no es así, porque si la consulta nos devuelve que es verdadera, entonces nos muestra la misma página, si no, nos da un error. Por eso es MUY IMPORTANTE HACER CONSULTAS QUE SOLO DEVULEVEN VALORES LÓGICOS (VERDADERO O FALSO).


Sabiendo el funcionamiento del ataque y viendo que la página es vulnerable, pordrmos llegar a obtener cualquier información que esté en la base de datos de la página.
Siguiendo con el ejemplo de la URL de antes, podríamos empezar a preguntar por otra cosa:
  • http://localhost/BlinSQLInjection/blindmysql.php?id=1 id=1 AND (SELECT (COUNT(*)) FROM users);
Con esto preguntamos si el nombre de la tabla es "users". Aunque nos da un mensaje de error ==>Ha sido FALSO, no es users.
Probamos con usuarios:
  • http://localhost/BlinSQLInjection/blindmysql.php?id=1 id=1 AND (SELECT (COUNT(*)) FROM usuarios);
Nos devuelve la misma página en la que estábamos ==>Ha sido VERDADER la tabla se llama users.

Y así sucesivamente, luego podríamos llegar a deducir si hay un campoque se llame contraseña o passwd y llegar a sacarla, aunque claro primero habría que averiguar el número de caracteres (hay una función SQL que te los devuelve y si preguntamos por ellos podríamos llegar a sacarlos). Luego probar:
  • Si la contrseña es de 5 caracteres:  "aaaaa", "baaaa","bbaaa",etc.
Esto último sería un auténtico rollo, aunque con los programas adecuados, podríamos generar las posibilidades de las claves y llegar a sacarlas en poco tiempo.
Con este ataque se puede sacar, toda esa información, y llegar a hackear una cuenta de un usuario o tener acceso a información del servidor, por ejemplo.

Así que si estaís pensando en realizar una Web, ojito con este tipo de ataques y aseguraros de que vestra página no es vulnerable.

 En este enlace hay un tutorial sobre el Blind SQL Inyection, del cual he sacado parte de la información. Saludos curiosos.

No hay comentarios:

Install Drupal 8 in CentOS

Drupal is an open source, flexible, highly scalable and secure Content Management System (CMS) which allows users to easily build and create...