Se protéger de la faille LFI (Local File Inclusion)

  1. Accueil
  2. Hacking Éthique
  3. Se protéger de la faille LFI (Local File Inclusion)

Introduction : Qu’est-ce que la faille LFI

Article à destination des développeurs web et administrateurs de sites.

La faille LFI tient son nom de Local File Inclusion (Inclusion de fichier local). Elle permet à un utilisateur d’inclure des fichiers locaux (appartenant donc au serveur externe) à partir d’une URL.

Ces fichiers peuvent très bien être en dehors du répertoire racine du site web. Des fichiers sensibles comme ceux contenant des données personnelles et notamment des mots de passe peuvent donc être inclus et récupérés.

On a souvent besoin d’inclure un fichier dans une page de façon tout à fait légitime comme sur l’exemple qui suit :

 http://exemple.com/vulnerable.php?page=menu.php

Seulement le fait de vérifier si ce fichier existe ne suffit pas, il faut s’assurer qu’il soit celui que l’on veut.

Notez que cette faille permet également d’exécuter du code PHP sur le serveur distant.

Que peut-on faire avec une faille LFI ?

Habituellement cette faille peut permettre de récupérer des informations comme les noms des utilisateurs de votre serveur et leurs mot de passe :

http://www.exemple.com/pagevulnerable.php?page=../../../../../../../../../../../etc/passwd

Faille LFI fichier passwd

Exemple de fichier passwd qui peut s’afficher directement sur un site faillible.

On peut également récupérer le code source d’une page php ou exécuter des commandes PHP à distance en les postant vers une url spécifique.

Dans le pire des cas, un shell php peut être installé sur votre serveur afin d’autoriser un utilisateur à exécuter des commandes à distance.

Comment savoir si mon site est faillible ?

Si votre site utilise une URL comme nous l’avons vu plus haut, il est possible qu’il soit faillible.

Voici un exemple typique de script php faillible :

<?php
   $fichier = $_GET['fichier'];
   if(isset($fichier))
   {
       include("pages/$fichier"); //inclut le fichier si il existe
   }
   else
   {
       include("index.php"); 
   }
   ?>

Par exemple, regardez si un utilisateur peut accéder aux fichiers de votre site :

http://www.exemple.com/vulnerable.php?page=../../../../../../../../fichier

Comment s’en prémunir

On va donc changer notre script précédent pour éliminer la possibilité d’utiliser « ../ » et forcer l’extension « .php »:

<?php
   $fichier= str_replace('../', '', $_GET['fichier']); //élimine ../
   if(isset($fichier))
   { //le fichier devra être inclus par son nom sans .php
       include("$fichier". ".php"); //ajoute ici le .php
   }
   else
   {
       include("index.php");
   }
   ?>

Sachez cependant qu’il est possible d’utiliser l’encodage hexadécimal à la place des slashs car le navigateur les convertit correctement :

http://www.exemple.com/vulnerable.php?page=..%2F..%2F..%2F..%2F..%2Ffichier

Et il est aussi possible d’utiliser le NULL Byte pour arrêter la chaîne avant l’extension et ainsi passer outre cette restriction.

Sur les nouvelles versions de apache ce genre d’exploitation n’est maintenant plus possible car %2F et %00 ne sont pas gérés par sécurité. Cela dit vous pouvez tout de même ajouter cette ligne pour éviter à coup sûr toute faille :

$fichier= str_replace(chr(0), '', $fichier); //chr(0) étant le null byte

Une autre technique simple et radicale consiste à inclure le nom directement dans le code sans passer par l’URL mais en testant un nom à la place:

<?php if ($_GET['page'] == “news”) {
    include(“news.php”);
} else {
    include (“accueil.php”);
}?>

Envie d’en apprendre plus sur les failles web ?

Cette faille et bien d’autres est vue en détail dans mon cours vidéo sur les tests d’intrusion web.

Nous allons parler des fondamentaux : fonctionnement d’HTTP, d’HTTPs, de DNS et de l’architecture web de manière générale.

Nous allons également mettre en place un laboratoire de test avec des machines virtuelles pour héberger et scanner nos sites vulnérables afin d’apprendre sans rien casser.

Nous allons bien sûr parler de toutes les failles web (XSS, CSRF, SQL, LFI, RFI, …etc) en suivant le Top 10 OWASP mais aussi de tout ce qui gravite autour de la sécurité web : dénis de service, mauvaises configurations, données personnelles, reconnaissance, etc…
Impatient de commencer avec vous, je vous propose de rejoindre le cours dès maintenant : https://cyberini.com/cours/hacking-ethique-tests-intrusion-web/

5 Commentaires. En écrire un nouveau

Laisser un commentaire

Menu
More in Hacking Éthique, Failles Web
Se protéger de la faille XSS (Cross-site scripting)

Introduction : Qu'est-ce que la faille XSS Article à destination des développeurs web et administrateurs de sites. XSS vient de Cross-Site Scripting et comme l'acronyme CSS...

Close