Les failles d'inclusion vivent dans des sinks de type include/require dynamiques, où un paramètre de requête décide quel fichier l'interpréteur charge et exécute.
Du code PHP classique comme include($_GET['page'] . '.php') confie à l'attaquant le contrôle du chemin chargé. Deux directions s'ensuivent. L'inclusion locale pointe le sink vers des fichiers déjà présents sur le serveur : traversée pour lire le source et les secrets, wrappers pour divulguer ou décoder, et astuces d'empoisonnement (logs, /proc, fichiers de session, uploads antérieurs) qui convertissent une primitive de lecture en exécution de code. L'inclusion distante pointe le sink vers une URL hébergée par l'attaquant, de sorte que l'interpréteur récupère et exécute directement du code externe, sous réserve des paramètres d'inclusion d'URL du moteur. Les deux pages couvrent les payloads et les chaînes qui promeuvent une simple lecture de fichier en exécution complète.
Pages#
- Local : LFI par traversée et wrappers PHP pour la divulgation de source, plus des chaînes d'empoisonnement de log, environ, session et upload qui escaladent une lecture de fichier en exécution de co...
- Remote : le RFI pointe un sink d'inclusion vers une URL contrôlée par l'attaquant de sorte que l'interpréteur récupère et exécute du code externe, conditionné par allow_url_include et allow_url_fopen.
Outils#
- LFISuite : détection et exploitation automatisées de LFI.
- kadimus : scan et exploitation de LFI et RFI.
- fimap : test automatisé d'inclusion de fichiers locale et distante.
- Burp Suite : Repeater pour les payloads de traversée, de wrapper et d'inclusion d'URL.