miércoles, 7 de marzo de 2012

SQL Injection (1ª Parte)

********************************************

SQL Injection (1ª Parte)
SQL Injection (2ª Parte)
SQL Injection (3ª Parte)
SQL Injection (4ª Parte)

********************************************



Una vez visto un poco de base sobre SQL vamos a ver una pequeña introdución a los ataques SQL Injection.

El SQL Injection consiste en un ataque que se realiza en las aplicaciones web contra la base de datos. Esto se debe a una falta de filtrado en la consulta a la base de datos (En este caso en la pagina web).

Ahora que sabemos que en que consiste este ataque vamos a mostrar una serie de ejemplos:

          Imaginemos que tenemos la siguiente tabla :

          Usuarios

          +-----------------+------------------+
          | usuario       | password     |
          +-----------------+------------------+
          | Eduardo     | 123456        |
          | Pepito        | 321654        |
          +-----------------+------------------+

          Y nos encontramos ante un login, donde logicamente no tenemos el usuario y la
          contraseña y tendremos que saltarnoslo.

          Por dentro, la aplicación realiza la siguiente consulta:

                   SELECT usuario, password FROM usuarios WHERE usuario='x' and
                   password='y'

          Siendo x e y respectivamente el usuario y contraseña que introducimos nosotros
          en la aplicación.

          Supongamos que introducimos:

           x --> pepe             y --> hola

          La consulta quedaria de la siguiente manera:

                   SELECT usuario, password FROM usuarios WHERE usuario='pepe' and
                   password='hola'
       
          Como vemos no existe ningun registro con ese usuario y contraseña por lo que
          nos denegaría el acceso.

          Veamos ahora que pasaría si introducimos lo siguiente:

           x --> 'a             y --> 'a

          La consulta quedaria de la siguiente manera:

                   SELECT usuario, password FROM usuarios WHERE usuario='' a' and
                   password='' a'

          Lo que lograriamos con esto seria un fallo en la base de datos, debido a que
          hemos cerrado ambos campos poniendo nosotros una comilla simple que es
          lo que va a utilizar el programa para cerrar lo que metieramos nosotros como
          nombre y contraseña.

          Lo que nos interesa de aqui es que si realizaramos la siguiente consulta:

           x --> ' or '1'='1             y --> ' or '1'='1

          La consulta quedaría de la siguiente manera:

                   SELECT usuario, password FROM usuarios WHERE usuario=''
                   or '1'='1' and password='' or '1'='1'

          En esta consulta estamos diciendo lo siguiente:

          1. Existe un usuario='' (es decir vacio) o... '1'='1' ,cosa que siempre sera
              verdad, por lo que en esta parte seria siempre cierto sin importar el usuario.

          2. Existe una password='' o... '1'='1' que al igual que antes sera siempre cierto.

          3. Siempre cierto AND siempre cierto = Acceso al login

          Para entender bien lo que hace es importante ver que entre otras cosas las
          consultas ' or '1'='1 siempre se dejan sin cerrar la comilla al final debido a
          que el sistema introducira una comilla, y con ello evitamos que de error la
          consulta.

         Pues esto seria una forma de saltarse el login de una página. Lógicamente
         no todas las páginas son asi ya que muchas de ellas implementan unas medidas
         de seguridad, pero por desgracias... En muchos de los sitios como se mostrara
          en la chara sigen siendo así de sencillo.


Espero que les haya gustado, y os espero en la segunda entrega del post.

Un saludo!

P.D: Ante cualquier duda no duden en mandarme un correo.
       hacking.etico.web@gmail.com

No hay comentarios:

Publicar un comentario