* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
**ViewState** es el método que el framework ASP.NET utiliza de forma predeterminada para **preservar los valores de la página y los controles entre las páginas web**. Cuando se renderiza el HTML de la página, el estado actual de la página y los valores que deben conservarse durante el postback se serializan en cadenas codificadas en base64 y se muestran en el campo o campos ocultos de ViewState.\
Los desarrolladores pueden **eliminar ViewState** para que no forme parte de una solicitud HTTP (el usuario no recibirá esta cookie).\
Uno podría asumir que si **ViewState** no está presente, su implementación está **segura** de cualquier posible vulnerabilidad relacionada con la deserialización de ViewState.\
Sin embargo, ese no es el caso. Si **agregamos el parámetro ViewState** al cuerpo de la solicitud y enviamos nuestra carga útil serializada creada usando ysoserial, aún podremos lograr la **ejecución de código** como se muestra en el **Caso 1**.
Como el parámetro está protegido por MAC, esta vez, para ejecutar con éxito el ataque, primero necesitamos conocer la clave utilizada. En este caso, BurpSuite nos indicará que el parámetro está protegido por MAC:
Puedes intentar usar [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) para encontrar la clave utilizada.
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) es otra herramienta que puede identificar machineKeys conocidos. Está escrita en Python, por lo que a diferencia de Blacklist3r, no tiene dependencia de Windows. Para los viewstates de .NET, hay una utilidad llamada "python blacklist3r", que es la forma más rápida de usarla.
Para buscar viewstates vulnerables a gran escala, en conjunto con la enumeración de subdominios, se puede utilizar el módulo `badsecrets` de [**BBOT**](exploiting-\_\_viewstate-parameter.md):
En los casos en los que el parámetro `_VIEWSTATEGENERATOR`**no se envía** por el servidor, **no** es necesario **proporcionar** el parámetro `--generator`, **pero sí estos**:
En este caso, Burp no encuentra si el parámetro está protegido con MAC porque no reconoce los valores. Entonces, probablemente el valor esté encriptado y **necesitarás la Machine Key para encriptar tu carga útil** y explotar la vulnerabilidad.
**En este caso, el módulo** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **está en desarrollo...**
Antes de .NET 4.5, ASP.NET puede **aceptar** un parámetro \_`__VIEWSTATE`\_ **sin encriptar** de los usuarios, incluso si **`ViewStateEncryptionMode`** se ha establecido en _**Always**_. ASP.NET **solo verifica** la **presencia** del parámetro **`__VIEWSTATEENCRYPTED`** en la solicitud. **Si se elimina este parámetro y se envía la carga útil sin encriptar, aún se procesará**.
Por lo tanto, si se conoce la Machine Key (por ejemplo, a través de un problema de recorrido de directorios), se puede utilizar el comando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) utilizado en el **Caso 2** para realizar RCE utilizando la vulnerabilidad de deserialización de ViewState.
* Elimina el parámetro `__VIEWSTATEENCRYPTED` de la solicitud para explotar la vulnerabilidad de deserialización de ViewState, de lo contrario, se mostrará un error de validación de MAC de ViewState y la explotación fallará, como se muestra en la figura:
Como en el caso anterior, Burp no identifica si la solicitud está protegida por MAC porque el **valor está encriptado**. Entonces, para enviar una **carga útil válida, el atacante necesita la clave**.
Puedes intentar usar [**Blacklist3r(AspDotNetWrapper.exe)**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) para encontrar la clave que se está utilizando:
Para obtener una descripción más detallada de IISDirPath y TargetPagePath, consulta [aquí](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
Una vez identificada una clave de máquina válida, **el siguiente paso es generar una carga útil serializada utilizando** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
Si tienes el valor de `__VIEWSTATEGENERATOR`, puedes intentar **usar** el parámetro `--generator` con ese valor y **omitir** los parámetros `--path` y `--apppath`
Si se explota con éxito la vulnerabilidad de deserialización de ViewState, un servidor controlado por un atacante recibirá una solicitud fuera de banda que contiene el nombre de usuario. [Prueba de concepto de explotación exitosa](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)
La propiedad **ViewStateUserKey** se puede utilizar para **defenderse** contra un **ataque CSRF**. Si se ha definido una clave de este tipo en la aplicación y tratamos de generar la carga útil de **ViewState** con los métodos discutidos hasta ahora, la **aplicación no procesará la carga útil**.\
Para todos los casos de prueba, si el payload ViewState de YSoSerial.Net funciona **exitosamente**, el servidor responde con un "error interno del servidor 500" y el contenido de la respuesta es "La información de estado no es válida para esta página y puede estar corrupta". Además, obtenemos la solicitud OOB como se muestra en las siguientes figuras:
Si estás interesado en una **carrera de hacking** y en hackear lo inhackeable, ¡**estamos contratando!** (se requiere fluidez en polaco, tanto escrito como hablado).
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).