Capturer les requêtes d’autres utilisateurs

Exploiting HTTP request smuggling to capture other users' requests

Le laboratoire met en place un serveur front-end et un serveur back-end. Le front-end ne prend pas en charge le chunked encoding. L’objectif est de smuggler une requête vers le back-end afin que la requête du prochain utilisateur soit stockée par l’application. Ensuite, il faut récupérer cette requête et utiliser les cookies de la victime pour accéder à son compte.

Le laboratoire simule un utilisateur victime : toutes les quelques requêtes POST envoyées, la victime exécute sa propre requête. Il est parfois nécessaire de répéter l’attaque plusieurs fois.

Bien que le lab permette l’HTTP/2, la solution doit obligatoirement utiliser HTTP/1, car certaines techniques ne sont possibles que dans ce protocole.

Le front-end interprète Content-Length, tandis que le back-end traite Transfer-Encoding: chunked, créant un décalage exploitable.

L’extension Burp HTTP Request Smuggler peut aider à corriger manuellement les longueurs.

1. Requête interprétée par le front-end

Le front-end lit Content-Length: 13, puis voit aussi Transfer-Encoding: chunked :

On ajoute ensuite, après la fin du chunk (0), une requête supplémentaire destinée au back-end.

2. Injection d’une requête POST pour publier un commentaire

Tu construis une requête smuggled contenant une seconde requête complète :

Résultat : La requête smuggled est traitée comme si elle provenait de votre propre session, et l’application publie le commentaire.

3. Forcer la victime à publier un commentaire

Tu modifies le corps pour :

et envoies une requête similaire. Lors du rechargement, l’application affiche Thanks for your comment, ce qui indique que la victime a publié ce commentaire.

4. Préparer la capture de la requête de la victime

Pour capturer la requête entière de l’utilisateur victime, tu augmentes fortement le Content-Length afin que le back-end consomme la requête suivante comme contenu :

La prochaine requête envoyée par la victime est alors absorbée dans le corps attendu… et elle devient consultable dans le stockage de l’application.

Mis à jour

Ce contenu vous a-t-il été utile ?