2 min read

[CTF GEMA] Medium 1

CTF GEMA Groupe 2025

Niveau de Difficulté : Medium

Catégorie du Challenge : Web

Description :
just hack me!

Solutions Steps

  • Type d'attaque : Content-Length.Transfer-Encoding HRS (CL.TE)

  • L'attaquant effectuera un HRS en exploitant une faille dans la gestion des en-têtes HaProxy en utilisant un Transfer-Encoding malformé que HaProxy n'identifiera pas comme valide alors que le backend le considérera comme un en-tête Transfer-Encoding valide en raison de l'utilisation du caractère spécial \x0b (Vertical Tab) conduisant à contourner les restrictions du frontend pour accéder à la page d'administration interne.

    En résumé, le frontend HaProxy utilisera l'en-tête Content-Length tandis que le backend utilisera l'en-tête Transfer-Encoding, et ce parce que Transfer-Encoding est toujours préféré à CL lorsqu'il est disponible, à moins qu'une faille comme celle-ci ne soit survenue pour masquer le TE pour l'un des serveurs.


En regardant la page web, on remarque un contenu statique avec des fonctionnalités qui ne relèvent pas de la logique du backend, comme la recherche, la connexion, etc...

Si nous essayons de naviguer vers la page /admin, nous obtiendrons une redirection vers localhost/admin/

Nous avons donc accédé à /admin/ avec une barre oblique à la place et nous avons obtenu la réponse 403.

L'examen de notre liste de contrôle HRS ne mène à rien, mais si nous jetons un coup d'œil aux en-têtes de la réponse, nous remarquerons que la version de HaProxy est exposée

En cherchant, nous trouverons un CVE pour HaProxy notamment ici :
https://gist.github.com/ndavison/4c69a2c164b2125cd6685b7d5a3c135b

Flag :

FLAG{email_pass_user_Why?}