La faille LFI / RFI : Local / Remote File Inclusion

Cette faille s’appuie sur la fonction Include du langage PHP.

En PHP, la fonction Include permet d’inclure des pages ou des morceaux de code dans une autre page.

Cette fonction peut être exploitée de différentes manières lorsqu’elle n’est pas sécurisée.

Avertissement :
Utiliser les techniques présentées sur ce blog, sur des systèmes qui ne vous appartiennent pas est ILLEGAL et peut vous exposer à de lourdes sanctions.

Si vous souhaitez vous exercer, vous devez le faire sur un système qui vous appartient, ou avec un accord écrit du propriétaire.

Je ne pourrais en aucun cas être tenu pour responsable de vos actes.

La fonction include

Par exemple, si on a un fichier footer.php :

<?php
echo "<p>Copyright © 2010-" . date("Y") . " angrypingu.fr</p>";
?>

On peut l’inclure dans une page HTML :

<html>
<body>
<h1>Welcome to Angrypingu</h1>
<p>Some text.</p>
<p>Some more text.</p>
<?php include 'footer.php';?>
</body>
</html>

Si on a un fichier de variables vars.php :

<?php
$color='red';
$car='BMW';
?>

On peut l’inclure de cette manière :

<html>
<body>
<h1>Welcome to my home page!</h1>
<?php include 'vars.php';
echo "I have a $color $car.";
?>
</body>
</html>

La fonction require

La fonction require renverra une erreur et arrêtera l’exécution si le fichier à inclure n’existe pas.

<html>
<body>
<h1>Welcome to my home page!</h1>
<?php require 'noFileExists.php';
echo "I have a $color $car.";
?>
</body>
</html>

Ici, la fonction ne renverra rien.

La fonction require_once

La fonction require_once ne renverra rien si le fichier à déjà été inclus.

echo.php
<?php
echo "Hello";
?>
<?php
require('echo.php');
require_once('echo.php');
?>

Note :

La fonction allow_url_include est désactivée par défaut.
Si allow_url_fopen est désactivée, allow_url_include le sera également.
On peut l’activer via le fichier php.ini.

/etc/php7/apache2/php.ini
allow_url_include = On

Attaque par inclusion de fichier

Cette attaque permet d’inclure un fichier sur un serveur web via un script php.
Cette vulnérabilité survient lorsqu’une application web permet au client de soumettre des entrées dans des fichiers ou d’uploader des fichiers sur le serveur.
Cela permet les attaques suivantes :

  • Exécution de code sur le serveur
  • Cross Site Scripting (XSS)
  • Déni de service (DoS)
  • Manipulation de données

Il en existe deux types :

  • Local File Inclusion (inclusion de fichier local)
  • Remote File Inclusion (inclusion de fichier distant)

Local File Inclusion (LFI)

Cette vulnérabilité survient lorsqu’une page reçoit en entrée le chemin vers un fichier.
Si les entrées ne sont pas sécurisées, cela permet d’afficher des fichiers présents sur le serveur.

http://192.168.1.8/dvwa/vulnerabilities/fi/?page=file1.php
http://192.168.1.8/dvwa/vulnerabilities/fi/?page=/etc/passwd

Remote File Inclusion (RFI)

Cette vulnérabilité survient lorsque l’URL d’un fichier situé sur un serveur différent est passée en paramètre à la fonction include. Le code PHP contenu dans le fichier sera alors exécuté. Cela permet d’exécuter des commandes sur le serveur, de modifier l’affichage du site ou de dérober des informations confidentielles.

http:// 192.168.1.8/dvwa/vulnerabilities/fi/?page=http://google.com

Pour se protéger de ces attaques :

  • Valider les entrées
  • Utiliser une liste d’entées autorisées
  • Rejeter les entrées non conformes
  • Utiliser une liste des caractères autorisés dans les noms de fichiers
  • Exclure les séparateurs de dossiers comme “/”
  • Utiliser une liste des extensions de fichiers autorisées
  • Utiliser la dernière version de PHP
  • Désactiver l’utilisation de registres globaux
  • Désactiver allow_url_fopen
  • Exécuter votre code avec des privilèges réduits
  • Utiliser des librairies ou frameworks sécurisés

Dans un prochain article nous verrons différentes façons d’exploiter les LFI.

En attendant, retrouvez nos autres articles Hacking, Dev ou Sécu.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *