Le scénario classique : Le développeur veut gérer le multilingue. Il attend `?lang=fr.php` ou `?lang=en.php` pour inclure le bon fichier de langue.
L'erreur : Il fait confiance à l'utilisateur : include($_GET['lang']);
Si la configuration PHP est permissive, un attaquant peut remplacer `fr.php` par une URL vers son propre serveur.
Le serveur victime télécharge alors shell.txt, et l'exécute comme du code PHP local !
À quoi servait `allow_url_include` ?
Initialement, c'était pensé pour faciliter le partage de code (ex: inclure un menu commun depuis un serveur central). C'est aujourd'hui considéré comme une mauvaise pratique (les API sont préférées).
Pourquoi c'est rare aujourd'hui ?
Depuis PHP 5.2, l'option allow_url_include est désactivée par défaut (`Off`).
allow_url_fopen : Permet de lire des fichiers distants (data only). Souvent ON.allow_url_include : Permet d'EXÉCUTER du code distant. Souvent OFF.La RFI n'est possible que si un administrateur a imprudemment réactivé cette option.
Une fois la RFI confirmée, l'attaquant héberge un fichier texte contenant un "Webshell".
Ensuite, il appelle l'autodestruction :
Dans ce labo, nous avons simulé un serveur DNS "evil.local" qui pointe vers le dossier /evil/.
Un script malveillant shell.txt est déjà prêt sur ce serveur.
Copiez ce payload dans l'URL pour prendre le contrôle du serveur.