En Mutillidae una de las primeras cosas que debemos probar es a loguearnos ya que tienen la típica SQL injection que podemos probar, para entender la SQL injection vemos un ejemplo:

IF username= usuario Y pass = password

Traducimos esto, sí el usuario es correcto y la password también, déjalo pasar, en cambio si usuario o el pass no coincide no te deja pasar y nos manda un error como una casa.

Cuando accedemos a un login, suele estar escrita en html que se valida en PHP y ejecuta una query en SQL (Menudo batiburrillo eh?) en este caso el de Mutillidae es así:

Formulario HTML

Se valida generando esta query:

SELECT * FROM users WHERE username=’$USER’ AND pass=’$PASS’

Siendo $??? lo que nos pide el formulario, de manera que al sustituirse podemos injectar lo que queramos, vamos a poner un ejemplo y como lo ejecutaría el servidor, un login valido:

Campo Username: OtroUser

Campo Pass: 1234

SELECT * FROM users WHERE user=’OtroUser’ AND pass=’1234′

  1. ADMIN    PASS
  2. OtroUser    1234
  3. blablabla    love
  4. jeremy    fuck1234

En cambio si usamos un login invalido, logicamente la query no dará resultado y nos mostrara un error. Ahora vayamos al plato fuerte de la entrada, el como es posible la SQL injection:

Campo Username: admin

Campo Pass: ‘ OR ‘a’ = ‘a

Observese que se empieza con una coma simple y se acaba sin ella, ya que al sustituir $PASS se usara la coma del final:

SELECT * FROM users WHERE username=’admin’ AND pass=” OR ‘a’ = ‘a’

  1. ADMIN    PASS
  2. OtroUser    1234
  3. blablabla    love
  4. jeremy    fuck1234

Con esto tenemos un bonito Log IN:

Logueados como Admin

Es verdad que si ponemos otro usuario nos da error, esto ocurre por que el primer usuario que esta en la base de datos es admin, y esto hace que la query solo use la primera fila resultante, si nos metemos un poco en lenguaje SQL vemos como la clausula WHERE actúa como un filtrado a cada fila, entonces para asegurarnos de que nos devuelve la fila del usuario que deseamos, planteamos la query de otra manera, igualando el nombre del usuario al deseado:

Campo Username: jeremy

Campo Pass: ‘ OR (‘a’ = ‘a’ AND username = ‘jeremy’) —

Observese que se usa — con un espacio al final, para comentar el resto de la linea que quede.

SELECT * FROM users WHERE username=’admin’ AND pass=” OR (‘a’ = ‘a’ AND username = ‘jeremy’) — ‘

  1. ADMIN    PASS
  2. OtroUser    1234
  3. blablabla    love
  4. jeremy    fuck1234

Siendo jeremy la única fila valida para la query.

En este caso mutillidae tiene un limite de caracteres en el campo del password, así que para evitar ese campo usamos firebug, inspeccionamos el elemento y le aumentamos el tamaño y por que no le quitamos el tipo password:

Boton Derecho > Inspect Element whit Firebug

Cambiamos los valores maximos a 999 y de paso le quitamos el tipo Password

Ahora introducimos la query y vemos el resultado:

SQL Query para obtener acceso como Jeremy

LogIN!

Espero que haya gustado y hasta la próxima!

Anuncios

»

  1. Todo muy muy bien explicado, pero mi neurona no da mas de si 😦

  2. Me ha gustado mucho la entrada. Continua así.

  3. Hexbintoor dice:

    Buenas,

    Intento hacer el SQLi y no me funciona
    Campo Username: admin

    Campo Pass: ‘ OR ‘a’ = ‘a

    He creado un usuario y me sigue fallando. Tambien he probado en samurai e instalarlo en backtrack y no me funciona.

    ¿Qué puede pasar?
    Muchas gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s