* Você trabalha em uma **empresa de cibersegurança**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **versão mais recente do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Adquira o [**material oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o repositório** [**hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Se você está interessado em **carreira de hacking** e em hackear o inquebrável - **estamos contratando!** (_é necessário polonês fluente escrito e falado_).
**ViewState** é o método que o framework ASP.NET usa por padrão para **preservar valores de páginas e controles entre páginas web**. Quando o HTML da página é renderizado, o estado atual da página e os valores que precisam ser mantidos durante o postback são serializados em strings codificadas em base64 e saída no campo oculto ViewState ou campos.\
Desenvolvedores podem **remover o ViewState** de se tornar parte de uma Requisição HTTP (o usuário não receberá este cookie).\
Pode-se assumir que se o **ViewState****não está presente**, a implementação está **segura** contra quaisquer vulnerabilidades potenciais surgindo com a desserialização do ViewState.\
No entanto, isso não é verdade. Se **adicionarmos o parâmetro ViewState** ao corpo da requisição e enviarmos nosso payload serializado criado usando ysoserial, ainda seremos capazes de alcançar a **execução de código** como mostrado no **Caso 1**.
Como o parâmetro é protegido por MAC, desta vez, para executar o ataque com sucesso, precisamos primeiro da chave usada. Neste caso, o BurpSuite nos informará que o parâmetro é protegido por MAC:
Você pode tentar usar [**Blacklist3r(AspDotNetWrapper.exe)**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) para encontrar a chave usada.
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) é outra ferramenta que pode identificar machineKeys conhecidos. É escrita em Python, então, ao contrário do Blacklist3r, não há dependência do Windows. Para viewstates .NET, existe a utilidade "python blacklist3r", que é a maneira mais rápida de usá-la.
Para procurar viewstates vulneráveis em larga escala, em conjunto com a enumeração de subdomínios, o módulo `badsecrets` [**BBOT**](exploiting-\_\_viewstate-parameter.md) pode ser utilizado:
Nos casos em que o parâmetro `_VIEWSTATEGENERATOR`**não é enviado** pelo servidor, você **não** precisa **fornecer** o parâmetro `--generator`, **mas estes sim**:
Neste caso, o Burp não identifica se o parâmetro está protegido com MAC porque não reconhece os valores. Então, o valor provavelmente está criptografado e você **precisará da Machine Key para criptografar seu payload** para explorar a vulnerabilidade.
**Neste caso, o módulo** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **está em desenvolvimento...**
**Antes do .NET 4.5**, o ASP.NET pode **aceitar** um parâmetro \_`__VIEWSTATE`\_ **não criptografado** dos usuários **mesmo** se **`ViewStateEncryptionMode`** estiver configurado para _**Always**_. O ASP.NET **apenas verifica** a **presença** do parâmetro **`__VIEWSTATEENCRYPTED`** na requisição. **Se alguém remover este parâmetro e enviar o payload não criptografado, ele ainda será processado.**
Portanto, se a Machinekey for conhecida (por exemplo, através de um problema de traversal de diretório), o comando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) usado no **Caso 2**, pode ser usado para realizar RCE usando a vulnerabilidade de desserialização do ViewState.
* Remova o parâmetro `__VIEWSTATEENCRYPTED` da requisição para explorar a vulnerabilidade de desserialização do ViewState, caso contrário, retornará um erro de validação do MAC do Viewstate e a exploração falhará, conforme mostrado na Figura:
Como no caso anterior, o Burp não identifica se a solicitação é protegida por MAC porque o **valor está criptografado.** Então, para enviar um **payload válido, o atacante precisa da chave**.
Você pode tentar usar o [**Blacklist3r(AspDotNetWrapper.exe)**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) para encontrar a chave sendo usada:
Para uma descrição mais detalhada de IISDirPath e TargetPagePath [consulte aqui](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
Uma vez identificada uma chave de Máquina válida, **o próximo passo é gerar um payload serializado usando** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
Se você tiver o valor de `__VIEWSTATEGENERATOR`, pode tentar **usar** o parâmetro `--generator` com esse valor e **omitir** os parâmetros `--path` e `--apppath`
Se a vulnerabilidade de deserialização ViewState for explorada com sucesso, um servidor controlado pelo atacante receberá uma solicitação fora de banda contendo o nome de usuário. [Prova de Conceito de Exploração Bem-Sucedida](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)
A propriedade **ViewStateUserKey** pode ser usada para **defender** contra um **ataque CSRF**. Se tal chave foi definida na aplicação e tentarmos gerar o **ViewState** payload com os métodos discutidos até agora, o **payload não será processado pela aplicação**.\
Você precisa usar mais um parâmetro para criar corretamente o payload:
Para todos os casos de teste, se o payload YSoSerial.Net do ViewState funcionar **com sucesso**, então o servidor responde com “**500 Internal server error**” tendo como conteúdo da resposta “**The state information is invalid for this page and might be corrupted**” e recebemos a solicitação OOB conforme mostrado nas Figuras abaixo:
Se você tem interesse em **carreira de hacking** e em hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado exigida_).
* Você trabalha em uma **empresa de cibersegurança**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **versão mais recente do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Adquira o [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).