Path Traversal / LFI

Web
250 pts
Difficile

Énoncé


L'application PHP de rh.helion-mutuelle.example inclut des pages via un paramètre non filtré :


include($_GET['page'] . ".php");

Deux protections naïves sont en place côté serveur : un suffixe .php est ajouté au nom de fichier, et les séquences ../ sont supprimées (str_replace).


Un auditeur a capturé une session de test (fichier ci-dessous) montrant plusieurs tentatives. À vous de comprendre lesquelles échouent, pourquoi, et comment la dernière exfiltre le secret. Le flag est la constante AUDIT_FLAG du code source à reconstituer.


Astuce historique : l'octet nul %00 ne neutralisait le suffixe .php que sur un PHP ancien (< 5.3.4). Sur un PHP récent, les chemins contenant un octet nul sont refusés : il faut passer par un wrapper (php://filter) ou viser un fichier qui se termine déjà par .php.



Local File Inclusion (LFI)


Le *Local File Inclusion* permet de lire (voire d'exécuter) des fichiers arbitraires quand une entrée utilisateur atteint include/require. Les wrappers comme php://filter servent à exfiltrer du code source, et une chaîne de filtres peut l'encoder plusieurs fois. Parades : ne jamais inclure un chemin construit depuis l'utilisateur ; utiliser une liste blanche de pages autorisées ; désactiver allow_url_include ; filtrer réellement (un simple str_replace('../') se contourne avec ....//) ; stocker les secrets hors de l'arborescence web et via des variables d'environnement.

Pièces jointes

Indices (0/3 révélés)

Soumettre le flag

Chargement…
CatégorieWeb
DifficultéDifficile
Points250 pts