<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
**Savet za bug bounty**: **registrujte se** za **Intigriti**, premium **platformu za bug bounty kreiranu od hakera, za hakere**! Pridružite nam se na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) danas, i počnite da zarađujete nagrade do **$100,000**!
**ViewState** služi kao podrazumevani mehanizam u ASP.NET-u za održavanje podataka stranice i kontrola preko veb stranica. Tokom renderovanja HTML-a stranice, trenutno stanje stranice i vrednosti koje treba sačuvati tokom postback-a se serijalizuju u base64 enkodirane stringove. Ovi stringovi se zatim smeštaju u skrivena polja ViewState-a.
1. Za **bilo koju verziju .NET-a**, kada su i MAC i Enkripcija onemogućeni, MachineKey nije potreban, i stoga ne postoji primenjiva metoda za identifikaciju.
2. Za **verzije ispod 4.5**, ako je MAC omogućen ali Enkripcija nije, potreban je MachineKey. Metoda za identifikaciju MachineKey-a se naziva "Blacklist3r."
3. Za **verzije ispod 4.5**, bez obzira da li je MAC omogućen ili onemogućen, ako je Enkripcija omogućena, potreban je MachineKey. Identifikacija MachineKey-a je zadatak za "Blacklist3r - Future Development."
4. Za **verzije 4.5 i novije**, sve kombinacije MAC-a i Enkripcije (bilo da su oba tačna, ili je jedan tačan a drugi netačan) zahtevaju MachineKey. MachineKey se može identifikovati koristeći "Blacklist3r."
Možete pokušati da identifikujete da li je ViewState zaštićen MAC-om snimanjem zahteva koji sadrži ovaj parametar pomoću BurpSuite-a. Ako Mac nije korišćen za zaštitu parametra, možete ga iskoristiti koristeći [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
Programeri mogu **ukloniti ViewState** da postane deo HTTP zahteva (korisnik neće primiti ovaj kolačić).\
Može se pretpostaviti da ako **ViewState** nije prisutan, njihova implementacija je **sigurna** od potencijalnih ranjivosti koje proizilaze iz ViewState deserijalizacije.\
Međutim, to nije slučaj. Ako **dodamo ViewState parametar** u telo zahteva i pošaljemo naš serializovani payload kreiran korišćenjem ysoserial, i dalje ćemo moći postići **izvršenje koda** kao što je prikazano u **Slučaju 1**.
Možete pokušati koristiti [**Blacklist3r(AspDotNetWrapper.exe)**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) da biste pronašli korišćeni ključ.
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) je još jedan alat koji može identifikovati poznate machineKeys. Napisan je u Python-u, tako da za razliku od Blacklist3r-a, nema zavisnosti od Windows-a. Za .NET viewstate-ove, postoji "python blacklist3r" alat, koji je najbrži način za korišćenje.
Za pretragu ranjivih viewstate-ova u velikom obimu, u kombinaciji sa enumeracijom poddomena, može se koristiti `badsecrets` [**BBOT**](exploiting-\_\_viewstate-parameter.md) modul:
U ovom slučaju nije poznato da li je parametar zaštićen MAC-om. Tada je vrednost verovatno šifrovana i **trebaće vam Machine Key da biste šifrovali svoj payload** kako biste iskoristili ranjivost.
**Pre .NET 4.5**, ASP.NET može **prihvatiti** nešifrovan \_`__VIEWSTATE`\_ parametar od korisnika **čak i** ako je **`ViewStateEncryptionMode`** postavljen na _**Always**_. ASP.NET **samo proverava** prisustvo **`__VIEWSTATEENCRYPTED`** parametra u zahtevu. **Ako se ovaj parametar ukloni, i pošalje se nešifrovan payload, i dalje će biti obrađen.**
Stoga, ako napadači pronađu način da dobiju Machinekey putem druge ranjivosti poput prolaska kroz fajlove, [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) komanda korišćena u **Slučaju 2**, može se koristiti za izvođenje RCE korišćenjem ranjivosti deserializacije ViewState-a.
* Uklonite `__VIEWSTATEENCRYPTED` parametar iz zahteva kako biste iskoristili ranjivost deserializacije ViewState-a, inače će se vratiti greška validacije Viewstate MAC-a i iskorišćavanje će neuspeti.
Možete pokušati da koristite [**Blacklist3r(AspDotNetWrapper.exe)**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) da pronađete korišćeni ključ:
Za detaljniji opis IISDirPath i TargetPagePath [pogledajte ovde](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
Kada se identifikuje važeći ključ mašine, **sledeći korak je generisanje serializovanog payload-a korišćenjem** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
Ako imate vrednost `__VIEWSTATEGENERATOR`, možete **koristiti** parametar `--generator` sa tom vrednošću i **izostaviti** parametre `--path` i `--apppath`.
Uspešno iskorišćavanje ranjivosti deserijalizacije ViewState-a dovest će do zahteva van opsega ka serveru pod kontrolom napadača, koji uključuje korisničko ime. Ovaj tip eksploatacije je prikazan u dokazu koncepta (PoC) koji se može pronaći kroz resurs pod nazivom "Eksploatisanje deserijalizacije ViewState-a korišćenjem Blacklist3r i YsoSerial.NET". Za dalje detalje o tome kako proces eksploatacije funkcioniše i kako koristiti alate poput Blacklist3r za identifikaciju MachineKey-a, možete pregledati [PoC uspešne eksploatacije](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC).
Svojstvo **ViewStateUserKey** može se koristiti za **odbranu** od **CSRF napada**. Ako je takav ključ definisan u aplikaciji i pokušamo generisati **ViewState** payload sa metodama koje smo do sada razmatrali, **payload neće biti obrađen od strane aplikacije**.\
Za sve test slučajeve, ako ViewState YSoSerial.Net payload radi **uspešno**, server odgovara sa "**500 Internal server error**" sa odgovorom "The state information is invalid for this page and might be corrupted" i dobijamo OOB zahtev.
**Bug bounty savet**: **Prijavite se** za **Intigriti**, premium **platformu za bug bounty kreiranu od hakera, za hakere**! Pridružite nam se na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) danas, i počnite da zarađujete nagrade do **$100,000**!
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.