<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* 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
* **Participe do grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou do grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
Se você está interessado em **carreira de hacking** e em hackear o inquebrável - **estamos contratando!** (_polonês fluente escrito e falado necessário_).
**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.\
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 **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 **verifica apenas** 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 do ViewState YSoSerial.Net funcionar **com sucesso**, então o servidor responde com “**500 Internal server error**” tendo o 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_).
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** 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
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm).
* **Compartilhe suas dicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).