Smuggling en masquant l’en-tête TE
HTTP request smuggling, obfuscating the TE header
Ce laboratoire met en scène un serveur frontal et un serveur interne. Les deux ne traitent pas les en-têtes HTTP dupliqués de la même manière. Le serveur frontal rejette toute requête dont la méthode n’est pas GET ou POST.
L’objectif est de faire parvenir une requête smuggled au serveur back-end de façon à ce que la requête suivante interprétée par ce dernier utilise la méthode GPOST.
Note : Même si le lab prend en charge HTTP/2, la solution repose sur des techniques qui ne fonctionnent qu’en HTTP/1, qu’il faut sélectionner manuellement dans Burp Repeater.
Astuce : Les champs de longueur sont délicats à ajuster manuellement. L’extension HTTP Request Smuggler du BApp Store simplifie ce travail.
Analyse du comportement : le front-end privilégie Content-Length
Exemple de requête où le front-end choisit CL :

Ici, la terminaison du chunk (X au lieu de 0) empêche l’interprétation correcte.
Tentative d’injection smuggled
Une requête envoyée telle quelle n’est pas interprétée comme prévu :
Le comportement du front-end empêche ici l’interprétation souhaitée.
Bypass : masquer le Transfer-Encoding principal
Pour contourner le mécanisme, on place une valeur invalide dans le premier en-tête Transfer-Encoding, afin que :
le front-end ignore celui-ci grâce à sa valeur incorrecte,
mais le back-end retienne l’en-tête
Transfer-Encoding: chunkedvalide.
Exemple fonctionnel :
Mis à jour
Ce contenu vous a-t-il été utile ?