jueves, 19 de abril de 2012

Reto 1: Inyección SQL

Se trata de superar un formulario de login, se trata de un caso real. Reto 1

No existe ningún filtrado de caracteres. Se utiliza la función ENCODE de Mysql en la consulta.

La función ENCODE lo que único que hace es codificar un string utilizando una contraseña, se hace esto para que no se almacenen el usuario y contraseña en texto plano en la base de datos.

La consulta sql es esta:

$SQL = "SELECT DECODE(usr,'$clave'), id FROM usuarios WHERE ENCODE('$usr','$clave') = usr AND ENCODE('$pwd', '$clave') = pwd";

Para saltarse el login hay que introducir en el campo usuario: a','a') = 'a' OR 1 = 1 LIMIT 1 --

Añadimos el limit para que la consulta devuelva solo un resultado, es común que en el código php se compruebe que la consulta de login devuelve un resultado solamente.
Por último añadimos el -- para comentar el resto de la línea y que no produzca un error, después de -- hay que introducir un espacio para que la consulta sea correcta.

No hay comentarios:

Publicar un comentario