Web: PHP - Erreur de redirection

Aujourd'hui je vais vous présenter une erreur de programmation qui peut permettre de bypasser un système d'authentification.
J'ai pu observer cette faille sur des CTF mais également sur de véritable serveur.
Cette erreur de programmation concerne la redirection en PHP.
Pour vous expliquer le problème j'ai créé un serveur de test avec 2 pages.
La première page index.php demande à l'utilisateur de s'identifier via un mot de passe:

La seconde page pass.php vérifie que le mot de passe fourni par l'utilisateur est bien le bon.
Si le mot de passe n'est pas correct le serveur web redirige instantanément l'utilisateur sur la page index.php.

En pratique ce code fonctionne tres bien pourtant il y a bien une faille 🙂
L'avez vous trouvé? 🙂

Sur la page pass.php le serveur vous redirige instantanément sur index.php mais il envoie quand même l'intégralité du code HTML.
Donc même si il nous redirige il est possible de lire le code HTML comme si on avait rentré le bon mot de passe.
On peux exploiter cette erreur de programmation avec curl:

il est également possible d'utiliser l'extension NoRedirect de firefox ou d'utiliser burp.

Pour résoudre ce problème il faut mettre un exit(); après la redirection pour que PHP ne continue pas d'exécuter le reste du code.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *