C502

Challenge C502 17/03/2026

LFI
Retour au cours

Challenge C502 17/03/2026

đŸ§‘â€đŸ« Pitch de l’exercice

Le challenge du jour consiste Ă  :

Cours C502.

📚 Ressources :


📂 RĂ©solution : Lab PortSwigger - File path traversal, simple case

https://portswigger.net/web-security/file-path-traversal/lab-simple

Contexte : Le site charge des images pour illustrer ses produits. On va intercepter la requĂȘte qui demande cette image au serveur pour modifier le chemin du fichier ciblĂ©.

Étape 1 : Interception de la requĂȘte

  • Activer Burp Suite (ou l'inspecteur rĂ©seau du navigateur) et afficher les dĂ©tails d'un produit.
  • RepĂ©rer la requĂȘte qui va chercher l'image dans la Target. Elle contient un paramĂštre vulnĂ©rable : filename=nom_de_l_image.jpg.

image

Étape 2 : L'attaque (Path Traversal)

  • Pour "remonter" dans l'arborescence du serveur, on utilise la technique du Path Traversal avec les caractĂšres ../.
  • Dans le Repeater on remplace le nom de l'image par notre payload : ../../../etc/passwd.
  • Explication : Chaque ../ fait remonter le serveur d'un niveau dans ses dossiers. On remonte 3 fois pour atteindre la racine globale du serveur Linux (/), puis on redescend dans le dossier /etc/ pour y lire le fichier passwd.
  • Envoyer la requĂȘte modifiĂ©e au serveur.
  • Le serveur s'exĂ©cute et, au lieu de renvoyer une image, il affiche le contenu brut du fichier /etc/passwd [la liste des utilisateurs du systĂšme Linux]. Le lab est validĂ© !

payload

solved


📂 RĂ©solution : Lab PortSwigger - File path traversal, sequences blocked with absolute path bypass

https://portswigger.net/web-security/file-path-traversal/lab-absolute-path-bypass

Contexte : Le serveur possÚde une protection basique : il bloque ou supprime les séquences ../. On ne peut donc plus utiliser de chemin "relatif" pour remonter l'arborescence.

Étape 1 : PrĂ©paration dans Burp Suite

  • Comme pour le lab prĂ©cĂ©dent, on envoie la requĂȘte de l'image (ligne /image?filename=...) dans le Repeater.

Étape 2 : Le contournement (Chemin Absolu)

  • Puisque les ../ sont bloquĂ©s, on va donner au serveur le chemin direct et absolu du fichier, en partant de la racine /.
  • On remplace la valeur du paramĂštre filename par : /etc/passwd
  • La ligne de la requĂȘte devient donc : GET /image?filename=/etc/passwd HTTP/2
  • On clique sur "Send".
  • La sĂ©curitĂ© du serveur est aveuglĂ©e car elle ne cherchait que des ../. Le serveur lit le chemin absolu et affiche le contenu du fichier /etc/passwd dans la rĂ©ponse. Le lab est validĂ© !

payload

solved


📂 RĂ©solution : Lab PortSwigger - File path traversal, sequences stripped non-recursively

Contexte : Le serveur possÚde un filtre de sécurité qui repÚre et efface automatiquement les séquences ../ de l'URL. Cependant, ce filtre est "non-récursif" : il ne nettoie le texte qu'une seule fois et ne vérifie pas le résultat aprÚs son passage.

Étape 1 : Le contournement (La technique de la poupĂ©e russe)

  • Pour tromper le filtre, on imbrique un ../ Ă  l'intĂ©rieur d'un autre, ce qui donne : ....//
  • L'astuce : Quand le filtre du serveur lit ....//, il supprime le ../ du milieu. Mais en faisant cela, les caractĂšres restants Ă  gauche (..) et Ă  droite (/) se recollent. Magie : ça forme un nouveau ../ tout neuf ! Comme le filtre est dĂ©jĂ  passĂ©, ce nouveau ../ passe incognito.

Étape 2 : L'attaque dans Burp Suite

  • Toujours dans le Repeater, sur la requĂȘte de l'image, on modifie le paramĂštre filename.
  • On remplace le nom du fichier par notre payload imbriquĂ©e : ....//....//....//etc/passwd
  • La ligne 1 devient donc : GET /image?filename=....//....//....//etc/passwd HTTP/2
  • En cliquant sur "Send", le filtre nettoie notre payload, la transformant en un classique ../../../etc/passwd en arriĂšre-plan.
  • Le serveur remonte l'arborescence et affiche le fichier /etc/passwd. Le lab est validĂ© !

payload

solved


📂 RĂ©solution : Challenge Root-Me - Local File Inclusion (File viewer)

https://www.root-me.org/fr/Challenges/Web-Serveur/Local-File-Inclusion

Contexte : L'application permet de naviguer dans des dossiers via le paramĂštre ?files= (ex: ?files=sysadm). Le but est d'exploiter une faille de type Path Traversal pour fouiller l'arborescence du serveur et trouver des informations confidentielles.

Étape 1 : Reconnaissance (Path Traversal)

  • On remplace le nom du dossier lĂ©gitime par .. pour forcer le serveur Ă  remonter au dossier parent.
  • L'URL devient : ?files=..
  • Le serveur affiche le contenu de son rĂ©pertoire parent. On y dĂ©couvre un dossier cachĂ© trĂšs suspect nommĂ© admin.

admin

Étape 2 : Exploration du dossier secret

  • On modifie Ă  nouveau l'URL pour demander au serveur de lister le contenu de ce dossier spĂ©cifique : ?files=../admin
  • Le serveur affiche les fichiers contenus dans la zone d'administration.
  • En cliquant sur le fichier d'authentification listĂ© dans le dossier admin, le serveur inclut son code PHP dans la page.
  • En lisant le code brut, on dĂ©couvre un tableau contenant les identifiants codĂ©s en dur : $users = array('admin' => 'XXXXXX');.

admin

  • Le mot de passe XXXXXX est le flag ! 🏁

OK


📂 RĂ©solution : Challenge Root-Me - LFI Double encoding

Contexte : L'application est vulnérable aux inclusions de fichiers locaux (LFI) via le paramÚtre ?page=. Cependant, un filtre de sécurité strict (WAF) bloque les caractÚres spéciaux et les tentatives classiques de lecture. L'objectif est de lire le code source du fichier de configuration local conf.inc.php (le script cible ajoutant automatiquement l'extension .inc.php).

Étape 1 : Contournement par Wrapper PHP et Double Encodage

  • Pour lire le contenu d'un fichier PHP sans l'exĂ©cuter, la technique classique est d'utiliser un wrapper : php://filter/convert.base64-encode/resource=conf
  • Pour passer sous le radar du pare-feu qui bloque les :, / et =, on encode l'URL deux fois de suite (le caractĂšre d'Ă©chappement % devenant lui-mĂȘme %25).
  • La payload finale double-encodĂ©e devient : php%253A%252F%252Ffilter%252Fconvert%252ebase64-encode%252Fresource%253Dconf
  • On l'injecte dans le paramĂštre vulnĂ©rable : ?page=php%253A%252F%252Ffilter%252Fconvert%252ebase64-encode%252Fresource%253Dconf

php

Étape 2 : Exfiltration et DĂ©codage

  • Le pare-feu lit le premier niveau d'encodage, ne dĂ©tecte aucune menace, et laisse passer. Le serveur web dĂ©code le deuxiĂšme niveau, exĂ©cute le wrapper, et renvoie le contenu du fichier conf.inc.php encodĂ© en Base64.
  • On copie la longue chaĂźne de caractĂšres affichĂ©e sur la page.
  • On la colle dans un outil comme CyberChef avec la recette "From Base64".
  • Le code source PHP s'affiche en clair. Tout en haut du fichier, avant le code CSS de la page, se trouve le tableau de configuration contenant le mot de passe.
  • Le flag est : XXXXXXX! 🏁

cooked

OK