Hacking ASP.NET MVC
¿De qué va este post?
Con este post aprenderás a crearte usuarios en un sistema que utilice el framework ASP.NET MVC sin necesidad de tener credenciales para ello.¿Qué es ASP.NET MVC?
Es un framework de desarrollo rápido de aplicaciones web potentes, robustas y seguro creado por Microsoft, que sigue el modelo MVC, como otros frameworks como Spring, Struts, Symfony o Django.¿Cómo funciona?
A muy groso modo su funcionamiento está basado en la separación de la parte visual de la parte de código (o programática), además de tener un formato REST para llamar a cada una de las funciones (utiliza la URL para hacer la llamada a la función adecuada, por ejemplo: sitio.com/Usuarios/agregar). Cada función tiene asociada una parte visual o vista.La forma de llamar a una función es a través del formato REST. Supongamos que queremos dar de alta un usuario. Deberíamos tener un módulo de usuarios con una función “alta”. A esta función tendríamos que tener asociada una vista, que es lo que se envía al navegador del usuario, y poner en el navegador: sitio.com/Users/Add
Ejemplo práctico
Si utilizamos el IDE de desarrollo de Visual Studio de Microsoft, que es lo más habitual, éste nos facilita el desarrollo y nos permite crear una plantilla de un sitio tipo MVC con unos cuantos métodos y funciones predefinidas para ahorrarnos trabajo. Entre otras incluye: Un home por defecto, creación, eliminación y alta de usuarios, estructuras de gestión, etc.Si hemos utilizado dicha plantilla deberemos tener cuidado y borrar aquello que no vayamos a usar como, por ejemplo: el registro de usuario. ¿Por qué? Porque para dar de alta usuarios no es necesario ningún tipo de autenticación por defecto.
Lo más habitual es que los desarrolladores despistados o sin suficiente experiencia se dejen el código funcionando, aunque no tengan ningún enlace que apunte directamente a la funcionalidad.
¿Cómo podemos aprovecharnos de esta situación? Muy fácil. Sabiendo que el framework utilizado es asp.mvc con poner la ruta: site.com/Account/Register” debería de aparecernos un formulario que nos pide nuestros datos para crearnos nuestro usuario:
Más complicado todavía
Tal vez nos encontremos con que un desarrollador ha intentado quitar esta funcionalidad pero solo lo ha hecho parcialmente eliminando la vista asociada. Si este es el caso el servidor nos volcará un error parecido a este:A priori puede parecer que la funcionalidad no está disponible. Pero esto es solo una ilusión. Aunque la vista no esté disponible el código del servidor es ejecutado y es después de hacerlo cuando se vuelca el error. ¿Qué significa esto? Que si pudiéramos construir una petición correctamente formada y que l framework entendiera podríamos crear un usuario. Muy bien, pues vamos a ponernos a ello.
Como el framework es gratuito y tenemos una versión Express del Visual Studio podemos construirnos un sitio por defecto y ver información necesita para que la petición sea correcta.
Primero observamos los métodos encargados de dar de alta usuarios:
Todavía hay una cosa que nos falta: Conocer la estructura “RegisterModel”. Exploramos nuestro proyecto y vemos la definición de esta clase:
Con esto ya tenemos toda la información que necesitamos para crear nuestro usuario de forma… llamémoslo “ninja” J. Solo nos queda hacer la petición de forma manual. Aquí cada uno tienes sus manías y yo he preferido hacerlo con el ZAP Proxy por comodidad:
El verdadero “truco” está en enviar la información con los datos POST adecuados y el Referer en la cabecera HTTP. Sino enviamos el Referer ejecutará el primer método, que no tiene parámetros y solo nos muestra la vista. Cuando realmente llamamos al segundo método es utilizando el Referer tal y como lo podéis ver en la imagen.
Una vez hecho esto obtendremos el mismo mensaje de error que antes pero internamente se habrá creado nuestro usuario cr0hn con contraseña “holamundo”.
No seáis malos y cuidadito con donde “inyectáis” usuarios