LFI - Local File Inclusion

50 %
50 %
Information about LFI - Local File Inclusion
Education

Published on November 8, 2013

Author: FaresEmir

Source: slideshare.net

Description

LFI (Local File Inclusion) Comment détecter, exploiter et se protéger

Par Emir Fares BELMAHDI @The_Crzay3D emir.belmahdi@gmail.com www.rpg-exploit.com Fb.com/groups/cscclub www.csc-club.org

 Cette présentation est à but éducatif, vous êtes le seul responsable de vos actes, notez que la loi condamne toute intrusion dans un système informatique

PHP est un langage de programmation interprété qui s'intègre dans vos pages HTML. Il permet entre autres de rendre automatiques des tâches répétitives, notamment grâce à la communication avec une base de données

Exemple de code PHP <?php echo "Bonjour, je suis un script PHP !"; ?> Ou même :              <?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) { ?> <h3>strpos() n'a pas retourné FALSE</h3> <p>Vous utilisez Internet Explorer</p> <?php } else { ?> <h3>strpos() a retourné FALSE</h3> <p>Vous n'utilisez pas Internet Explorer</p> <?php } ?>

L'instruction de langage include inclut et exécute le fichier spécifié en argument. Exemple : vars.php <?php  $couleur = 'verte';  $fruit = 'pomme';  ?> test.php       <?php echo "Une $fruit $couleur"; // Une include 'vars.php'; echo "Une $fruit $couleur"; // Une pomme verte ?>

Plusieurs variables prédéfinies en PHP sont "superglobales", ce qui signifie qu'elles sont disponibles quel que soit le contexte du script. Il est inutile de faire global $variable; avant d'y accéder dans les fonctions ou les méthodes. Les variables superglobales sont :          $GLOBALS $_SERVER $_GET $_POST $_FILES $_COOKIE $_SESSION $_REQUEST $_ENV

 $_GET ◦ Un tableau associatif des valeurs passées au script courant via les paramètres d'URL. ◦ http://www.google.dz/search?q=SDW  $_POST. ◦ Un tableau associatif des valeurs passées au script courant via le protocole HTTP et la méthode POST. ◦ Exemple : Les informations transmises via formulaire d’inscription/Connexion

 $_REQUEST ◦ Un tableau associatif qui contient par défaut le contenu des variables $_GET, $_POST et $_COOKIE. ◦ Les variables contenues dans $_REQUEST sont fournies au script via les mécanismes d'entrée GET, POST, et COOKIE et donc, peuvent être modifiées par l'utilisateur final ; aussi, vous ne pouvez faire confiance à leur contenu. La présence ainsi que l'ordre de ces variables dans ce tableau sont définis suivant la directive de configuration variables_order.

 Local File Inclusion (également connu sous le nom LFI) est le processus d'inclusion de fichiers sur un serveur via le navigateur web. Cette vulnérabilité survient lorsque une page n'est pas correctement protégé, et permet l’injection des caractères du Directory Traversal ( .. Et /)

 Exemple 1 : (Mauvaise conception) ◦ <?php include($_REQUEST["page"]); ?>  Exemple 2 : (Mauvaise conception) ◦ <?php if isset($_REQUEST["page"]) { $page = $_REQUEST["page"]; include(“$page.php”); } ?>  Exemple 3 : (Une meilleure conception) ◦ <?php if isset($_GET["page"]) { //remove any attempts at directory traversal $page = str_replace(‘../’, ‘’, $_GET ["page"]; include(“$page.php”); }?>

 Même Notre 3ème exemple est vulnérable, bien que les caractères de LFI sont remplacé. On peut évader ce filtre en encodant les caractères en hexadécimal : ◦ http://www.site.com/index.php?page=..%2F..%2F..%2F..%2F etc%2Fpasswd  Le « .php » peut être éliminer en empoisonnant l’url avec un « null byte » 0x00 (%00) ◦ http://www.site.com/index.php?page=..%2F..%2F..%2F..%2F etc%2Fpasswd%00

 Maintenant que l’on sait que LFI nous permet d’interpréter et d’exécuter des fichiers locaux contenant du code PHP, quel est le risque ? ◦ On peut inclure n’importe quel fichier (accessible par l’utilisateur actuel), pensez à un shell se situant dans le dossier /tmp ◦ On peut utiliser la LFI afin de télécharger un fichier sur le serveur (un backdoor par exemple)

LFI – Logs Apache Vert : IP Source, Rouge : URL, Bleu : User-Agent

  Cette technique consiste à empoisonner les logs apache de sorte à injecter du code PHP dans le fichier « access_log » (ou autre, tout dépends du serveur), en utilisant : le UserAgent, requête HTTP Telnet, curl/wget ou même un simple navigateur. Il ne reste plus qu’à inclure les logs d’accès avec notre LFI (exemple : http://www.site.com/index.php?page=../../.. /../../../etc/httpd/logs/access_log%00)

 En utilisant l’addon Firefox (Live HTTP Headers) on injecte du code PHP dans le user-agent qui sera ensuite sauvegardé dans les logs apache

 Vous pouvez également utiliser Telnet pour envoyer une requête HTTP malveillante

 Maintenant il ne reste plus qu’à inclure les logs apache, ainsi le code php sera exécuté grâce à la fonction include

  On peut aussi utiliser « /proc/self/environ » afin d’injecter du code PHP et exécuter des commandes sur le serveur, on peut même aller jusqu’à créer un fichier qui nous permettra de télécharger d’autres fichiers sur le serveur (un formulaire upload) Notez la présence du « User-Agent » dans l’image qui suit …

LFI - Exemples

  Nous allons donc refaire les mêmes étapes et empoisonner le User-Agent de sorte a ce qu’il contient un code PHP (voir l’exemple précédent) Un petit programme qui permet d’exploiter cette faille existe, je vous invite à visiter les liens ci-dessous ◦ http://www.youtube.com/watch?v=IDSP2768jEQ ◦ http://pastebin.com/RDY7zW0X

   Une autre technique d’exploitation consiste à inclure les session PHP (souvent dans /tmp, parfois dans /var/lib/php5) Vous pouvez essayer de déterminer votre sessionid grâce aux cookies du navigateur Il ne vous restera plus qu’à modifier le contenu des sessions et les inclure sous la forme de sess_[votre_phpsessid]

 Une autre méthode pour exécuter du code PHP grâce à une LFI est tout simplement l’utilisation d’un formulaire upload (celui pour ajouter votre avatar par exemple), en modifiant l’extension un fichier php en .jpg/.png/.bmp … etc vous pouvez l’upload sur le serveur et ainsi inclure cette image (bien-sûr elle contient un code malveillant) et voilà !!

  Vous devez maintenant savoir qu’en utilisant une LFI les scripts PHP sont exécutés, hum … que doit-on faire afin d’éviter que les pages soient interprétés? Rien de très difficile, il suffit simplement d’utiliser les Filtres PHP

    L’utilisation de filtres PHP est une manière assez simple afin de bypass d’exécution des scripts PHP en utilisant une LFI Exemple : http://192.168.1.50/select.php?page=php://filt er/read=convert.base64encode/resource=index.php Grâce a ce filtre la page index.php sera encodé en base64 avant son inclusion, ce qui empêche l’exécution du code PHP A vous après de la décoder afin de récupérer le contenu.

LFI – Les Filtres PHP Au lieux d’exécuter le code php le serveur nous renvoi le contenu de la page encodée en base64

   Pour savoir si un dossier existe grâce à une LFI il faut tout simplement faire comme ceci http://192.168.1.50/select.php?page=../../.. /../../../var/nom_dossier/../../etc/passwd Si l’inclusion de « /etc/passwd » se fait correctement c’est que le dossier existe.

    Vous pouvez utiliser une LFI afin d’essayer de gagner un accès root. Commencez par réunir un maximum d’informations sur le serveur par exemple la distribution sur la quelle le serveur tourne (/etc/issue). Essayez ensuite d’upload un shell sur le serveur (dans n’importe quel dossier modifiable) puis tenter de l’inclure. Créez une reverse connexion afin de travailler à l’aise

   Maintenant qu’on a un accès au serveur il suffit de tenter l’élévation des privilèges Utilisez vos privilèges utilisateur pour avoir quelques informations sur les programmes en cours d’exécution Direction (www.1337day.com / www.exploitdb.com) et cherchez un local root exploit, un petit script qui exploite une vulnérabilité en rapport avec l’un des processus en cours d’exécution.

    Activer magic_quotes Configurer open_basedir afin de ne permettre l’accès « read » que sur le dossier web et /tmp Filtrer les caractères de LFI (‘..’, ‘/’ ,’%00’) Utiliser les includes statiques si possible ◦ <?php If ($_GET['file'] == 'mypage'){include('mypage.php');}; ?> ◦ (vous pouvez également utiliser ‘switch’ à la place de ‘if’

  Voilà c’est le ‘The End’ si vous avez des questions n’hésitez pas. Liens utiles : http://www.owasp-dz.org/forum/showthread.php?tid=5 http://www.blackhatlibrary.net/File_Inclusion https://www.owasp.org/index.php/Path_Traversal http://www.enigmagroup.org/articles/view/Linux%20Hacki ng/115-LFI-Apache-log-poisoning ◦ http://evilzone.org/tutorials/local-file-inclusion-(lfi)/ ◦ ◦ ◦ ◦

Par Emir Fares BELMAHDI @The_Crzay3D emir.belmahdi@gmail.com www.rpg-exploit.com Fb.com/groups/cscclub www.csc-club.org

Add a comment

Related presentations

Related pages

Local File Inclusion - Hakipedia

Local File Inclusion (also known as LFI) is the process of including files on a server through the web browser. This vulnerability occurs when a page ...
Read more

Testing for Local File Inclusion - OWASP

Local File Inclusion (also known as LFI) is the process of including files, that are already locally present on the server, through the ...
Read more

Local File Inclusion [LFI] Tutorial - YouTube

Exploiting site with LFI(Local File Inclusion) to Upload shell Tutorial-By Spirit - Duration: 5:06. Pentesting with spirit! 2,643 views
Read more

File inclusion vulnerability - Wikipedia, the free ...

Local File Inclusion ... (LFI) is similar to a Remote File Inclusion vulnerability ... already uploaded file called exploit.php (local file inclusion ...
Read more

IT Nerdbox Local File Inclusion (LFI) - IT Nerdbox

Introduction to LFI Local File Inclusion (LFI) is a vulnerability that allows an attacker to read files that are stored on the (local) web server, through ...
Read more

Local File Inclusion (LFI) - YouTube

This tutorial explains how local file inclusion works. Then, it shows you how to protect against it the easy way.
Read more

Local File Inclusion (LFI) - Tutorials - Evilzone

Local File Inclusion (LFI)Tutorial created by ande for www.evilzone.orgWritten June 15, 2011.Updated Never.In this tutorial1.0 What is LFI?1.1 ...
Read more

PHP File Inclusion Vulnerability | CWE-98 Weakness | Local ...

PHP File Inclusion [CWE-98] Local File Inclusion (LFI), Remote File Inclusion (RFI) This weakness describes improper control of filename within Include or ...
Read more

Remote and Local File Inclusion Vulnerabilities 101

Remote and Local File Inclusion Vulnerabilities 101 And the Hackers Who Love Them 1. Executive Summary Remote and local file inclusion (RFI/LFI) attacks ...
Read more

Remote File Inclusion – Wikipedia

Der Begriff Remote File Inclusion beschreibt eine Sicherheitslücke in Skript-basierten Webanwendungen, die es einem Angreifer ermöglicht, unkontrolliert ...
Read more