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
6fe5caf61d
commit
df7db598ec
@ -6,7 +6,7 @@
|
||||
|
||||
## Was ist ViewState
|
||||
|
||||
**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** 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-Informationen können durch die folgenden Eigenschaften oder deren Kombinationen charakterisiert werden:
|
||||
|
||||
@ -44,13 +44,13 @@ Entwickler können **ViewState** daran hindern, Teil einer HTTP-Anfrage zu werde
|
||||
Man könnte annehmen, dass, wenn **ViewState** **nicht vorhanden** ist, ihre Implementierung **sicher** vor potenziellen Schwachstellen ist, die mit der Deserialisierung von ViewState verbunden sind.\
|
||||
Das ist jedoch nicht der Fall. Wenn wir den **ViewState-Parameter** zum Anfragekörper hinzufügen und unser serialisiertes Payload, das mit ysoserial erstellt wurde, senden, werden wir dennoch in der Lage sein, **Codeausführung** zu erreichen, wie in **Fall 1** gezeigt.
|
||||
|
||||
### Testfall 2 – .Net < 4.5 und EnableViewStateMac=true & ViewStateEncryptionMode=false
|
||||
### Testfall: 2 – .Net < 4.5 und EnableViewStateMac=true & ViewStateEncryptionMode=false
|
||||
|
||||
Um **ViewState MAC** für eine **spezifische Seite** zu **aktivieren**, müssen wir folgende Änderungen an einer bestimmten aspx-Datei vornehmen:
|
||||
```bash
|
||||
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
|
||||
```
|
||||
Wir können dies auch für die **gesamt** Anwendung tun, indem wir es in der **web.config**-Datei wie unten gezeigt festlegen:
|
||||
Wir können es 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 bereitgestellt werden:
|
||||
Es kann entweder direkt mit dem viewstate und dem generator versorgt werden:
|
||||
```
|
||||
pip install badsecrets
|
||||
git clone https://github.com/blacklanternsecurity/badsecrets
|
||||
@ -106,7 +106,7 @@ In Fällen, in denen der `_VIEWSTATEGENERATOR`-Parameter **nicht** vom Server **
|
||||
```bash
|
||||
--apppath="/" --path="/hello.aspx"
|
||||
```
|
||||
### Testfall: 3 – .Net < 4.5 und EnableViewStateMac=true/false und ViewStateEncryptionMode=true
|
||||
### Test Case: 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.
|
||||
|
||||
@ -116,11 +116,11 @@ In diesem Fall ist nicht bekannt, ob der Parameter mit MAC geschützt ist. Dann
|
||||
|
||||
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.
|
||||
|
||||
### Testfall: 4 – .Net >= 4.5 und EnableViewStateMac=true/false und ViewStateEncryptionMode=true/false, außer beide Attribute auf false
|
||||
### Test Case: 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.
|
||||
Wir können die Verwendung des ASP.NET-Frameworks erzwingen, indem wir den folgenden Parameter in die web.config-Datei einfügen, wie unten gezeigt.
|
||||
```xml
|
||||
<httpRuntime targetFramework="4.5" />
|
||||
```
|
||||
@ -155,7 +155,7 @@ Wenn Sie den Wert von `__VIEWSTATEGENERATOR` haben, können Sie versuchen, den `
|
||||
|
||||

|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
### Testfall 6 – ViewStateUserKeys wird verwendet
|
||||
|
||||
@ -210,12 +210,10 @@ ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \
|
||||
--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}}
|
||||
Rotierende statische Schlüssel oder der Wechsel zu *AutoGenerate* Schlüsseln in Web .config (`<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />`) mindern diese Angriffsart.
|
||||
|
||||
### 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).
|
||||
Kudelski Security entdeckte, dass mehrere CentreStack / Triofox-Versionen mit identischen `machineKey` Werten ausgeliefert wurden, was eine nicht authentifizierte Remote-Code-Ausführung durch ViewState-Fälschung ermöglichte (CVE-2025-30406).
|
||||
|
||||
One-liner Exploit:
|
||||
```bash
|
||||
|
Loading…
x
Reference in New Issue
Block a user