Énoncé et objectif :
Ce lab inclut un serveur front-end et back-end. Les deux supportent l'entête Transfer-Encoding. L'objectif est de faire passer une requête au serveur back-end, de sorte que celui-ci semble utiliser la méthode "GPOST".
Solution :
On lance le lab et on se retrouve dans un blog.
On recharge la page d'accueil en interceptant la requête émise vers le serveur :
Pour découvrir si les serveurs sont vulnérables à une attaque de type HTTP request smuggling, on va modifier cette requête en changeant la méthode en POST et inclure un entête Content-length et un entête Transfer-Encoding "obfusqué" : on va définir deux fois ce header avec une valeur aléatoire sur le deuxième. Cette technique est utilisée lorsque le front-end et back-end supportent l'entête Transfer-Encoding. Le but est que le serveur front-end prenne en compte l'encodage chunked et que le serveur back-end prenne seulement en compte l'entête Content-length ( avec une valeur précisément définie jusqu'au payload ) car il est trompé par l'obfuscation.
On va ensuite définir le premier chunk en définissant une requête avec la méthode GPOST. Ce qui donne :
On redirige ensuite notre requête au serveur. On envoie une deuxième requête légitime, et on reçoit la réponse suivante :
En effet, le serveur back-end a traité une requête commençant par "GPOST" ( comme on l'a indiqué précédemment dans la requête du payload ) car les données du chunk ont été concaténées au début de la deuxième requête envoyée.
Donc ce serveur est en effet vulnérable à une attaque de type HTTP request sumggling.
Le lab est désormais validé.