Evaluar el ViewState de ASP NET

  • Posted on: 22 January 2015
  • By: ReYDeS

Uno de los mecanismos comúnmente encontrados para transmitir datos mediante el cliente es el ViewState de ASP.NET. Este es un campo oculto creado por defecto en todas las aplicaciones web ASP.NET. Contiene información serializada sobre el estado de la página actual. La plataforma ASP.NET emplea ViewState para mejorar el desempeño del servidor. Permite al servidor preservar los elementos dentro de la interfaz de usuario entre peticiones sucesivas sin la necesidad de mantener toda la información relevante al estado en el lado del servidor.

El servidor por ejemplo puede poblar una lista desplegable en base a los parámetros enviados por un usuario. Cuando el usuario hace peticiones subsecuentes, el navegador no envía el contenido de la lista de retorno hacia el servidor. Sin embargo, el navegador envía el campo oculto ViewState, el cual contiene el formulado en serializado de la lista. El servidor deserializa el ViewState y recrea la misma lista la cual es presentada nuevamente al usuario.

Los desarrolladores además pueden utilizar ViewState para almacenar información arbitraria entre peticiones sucesivas. Es decir, en lugar de guardar el precio de un producto en un campo oculto del formulario, la aplicación puede guardarlo en el ViewState.

La manera más sencilla de localizar estos campos es visualizando la fuente HTML y buscando la cadena de texto “__VIEWSTATE”.

Cuando se intenta decodificar lo que parece ser un cadena codificada en Base64, un error común es empezar la decodificación en una posición errónea dentro de la cadena. Esto debido al funcionamiento de la codificación Base64, pues si se inicia en una posición errónea la cadena decodificada contendrá basura. Base64 es formato basado en bloques en el cual cada 4 bytes de datos codificados se traduce en 3 bytes de datos decodificados. Por lo tanto si se intenta decodificar una cadena Base64 sin descubrir nada significativo, se debe intentar iniciar desde 4 desplazamientos adyacentes en la cadena codificada.

Por defecto ASP.NET protege el ViewState de manipulación añadiendo un hash con clave (conocido como protección MAC (Message Authentication Codes) ). Sin embargo muchas aplicaciones deshabilitan esta protección por defecto, lo cual implica la capacidad de modificar el valor de ViewState para determinar si tiene algún efecto en el procesamiento del lado del servidor.

Existen diversos sitios web disponibles, los cuales permiten realizar la decodificación del ViewState.

Burp Suite incluye un interprete de ViewState el cual indica si tiene la protección MAC. Si no está protegido, el contenido del ViewState puede ser editado utilizando el editor hexadecimal, para luego enviarlo hacia la aplicación web objetivo

Fuentes:

https://msdn.microsoft.com/en-us/library/ms972976.aspx
http://ignatu.co.uk/ViewStateDecoder.aspx
http://en.wikipedia.org/wiki/Base64
http://www.troyhunt.com/2013/09/understanding-and-testing-for-view.html
http://portswigger.net/burp/
http://testaspnet.vulnweb.com/

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor en Hacking Ético, Forense Digital & GNU/Linux
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero
Resumen de mi CV: https://www.reydes.com/d/?q=node/1