jueves, 22 de julio de 2010

Los peligros de "La Roja"

La selección española de futbol, "La Roja", nos ha dado grandes alegrias pero hay que tener cuidado con ciertos peligros asociados ella. Con el "boom" de "La Roja" internet se ha visto plagada de webs sobre la selección y lamentablemente no todas estan hechas de la mejor forma posible por lo que son un peligro potencial para la seguridad y sobre todo para la privacidad de los usuarios.

Un ejemplo de esto es http://www.laroja.es/, un pequeño portal donde algunos aficionados han querido plasmar su interes por la selección.

La sección de noticias es vulnerable a inyección SQL o "inyección Access" ya que curiosamente la base de datos utilizada es Access pero el procedimiento es el mismo. Si accedemos a una de las noticias podemos ver que la url contiene el parámetro idNoticia=x donde x es el código de la noticia, por ejemplo:



Si añadimos una comilla simple a la url obtenemos lo siguiente:



Con el mensaje de error obtenido "[Microsoft][ODBC Microsoft Access Driver] Syntax error in string in query expression 'idNoticia=72''" podemos confirmar que se trata de una base de datos Access y parece claro que podemos modificar la url para "inyectar" nuestra propia consulta, por ejemplo, del tipo UNION:



Mirando el mensaje de error pronto nos daremos cuenta que Access tiene algunas peculiaridades con respecto a MySQL o a MSSQL. El mensaje de error dice: "Query input must contain at least one table or query." lo que básicamente quiere decir que se debe especificar una tabla o consulta para poder hacer una consulta SELECT ¿que tabla podriamos utilizar? lo primero que se me viene a la cabeza es utilizar la tabla de sistema MSysObjects que es la tabla equivalente a sysobjects (MSSQL) o a information_schema.tables (MySQL) así que vamos a intentarlo.



Parecia sencillo ¿verdad? pero lamentablemente vemos que se muestra un mensaje de error: "Record(s) cannot be read; no read permission on 'MSysObjects'." es decir que la tabla existe pero no tenemos permiso para leer su contenido. ¿Que tabla podremos utilizar? Pues ahora no hay más remedio que intentar pensar como el programador de la web ¿como deberia llamarse la tabla que guarde los usuarios que tienen acceso a la web? ¿que tal si lo intentamos con "usuarios"?



Parece que vamos bien, ahora el mensaje de error es diferente: "The number of columns in the two selected tables or queries of a union query do not match.", es decir que el número de columnas que hemos puesto en nuestra consulta SELECT es diferente al de la SELECT inicial (que no conocemos) así que solo tenemos que ir añadiendo campos hasta encontrar la sentencia correcta, es decir:

...

¡¡¡bingo!!!


Hemos conseguido montar una consulta válida y que nos devuelve información. ¿Como saber el nombre de los campos de la tabla usuarios? pues nuevamente toca pensar como el programador de la web, lo más normal es que siempre se pongan nombres comunes como usuario, nombre, email, mail, correo, etc... una ayuda puede ser navegar por la web, concretamente por el formulario de registro para que tipo de nombres suele utilizar el programador en dicho formulario.



En este formulario vemos que los campos se llaman Nombre, Apellidos, E-mail, Pais, Provincia, Edad, Nick y Contraseña aunque si miramos el nombre real de los campos en el formulario vemos que se llaman nombre, ape, mail, pais, provincia, edad, nick y pass así que podemos hacer pruebas con todos a ver que se consigue.

Después de algunas pruebas vemos que los campos válidos son: Nombre, Apellidos, Mail, Pais, Provincia, Edad, Nick y Pass por lo que podemos montar una consulta del tipo:



Una vez construida esta consulta podemos modificarla para obtener toda la información de la tabla usuarios y acceder así al portal pero lo más importante es que, como ya he comentado en otros post, muchos usuarios utilizan la misma clave para todos los sitios webs que utilizan por lo que algunas contraseñas obtenidas aquí pueden ser utilizadas en hotmail, yahoo, gmail, facebook, etc.

Como curiosidad comentar que, el día que se descubrio esta vulnerabilidad habia 156 usuarios registrados. Por suerte no son muchos pero, para ellos, "La Roja" puede suponerles un calentamiento de cabeza.

PD: Este post se publicó después de que el webmaster de "La Roja" pudiera resolver estos problemas.

No hay comentarios:

Publicar un comentario