Failles dans le portail PHP Portix ********************************** Produit : ********* PHP-Portix; Portail en PHP. http://marc.gavage.com/portix/ Versions : ********** 0.4.02 et moins. Date : ****** 30/01/02 Probleme : ********** - Accès aux fichier de configurations admins. - Lecture dans le disque dur. Developpement : *************** Je pense que ce petit tutoriel est une bonne representation d'une partie des failles qu'on peut trouver en php et dans les autres styles de pages webs dynamiques. La premiere faille se trouve dans l'index.php, à cet endroit : ----------------------------------------------------------------------- if (!isset($l)) include("includes/main.inc"); if (isset($l)){ if ((eregi("://",$l))) //Pour empecher des comics d'utiliser la ligne de commande pour utiliser des fichiers distants { // C'est mieux comme ça, non? include("includes/main.inc"); }else { if (file_exists($l)){ $extent=explode(".",$l); // afficheur de pdf $azerty=count($extent); if (($extent[$azerty-1]=="pdf") or ($extent[$azerty-1]=="doc")) { $docpdf=$l; include("includes/doc.inc"); } else { include ("$l"); } } } } ?> ----------------------------------------------------------------------- Ce code inclus donc un fichier stocké dans la variable $l : include ("$l"); . La partie "afficheur de pdf" ne nous interesse pas. Comme le créateur de Portix le dis lui-même, des "comics" ne pourraient pas utiliser de fichier distant, vu que le "://" est supprimé de l'adresse du fichier à ouvrir. Mais les comics ont plus d'un tour dans leur sac :) En effet, si on ne peut pas appeler des fichiers de l'exterieur, il n'y a aucune restriction quant aux appels vers l'intérieur. Une petite url du style www.host.com/index.php?l=../pleinsdeptitspoints/../etc/passwd devrait sans problemes nous inclure le fichier passwd dans l'index.php. La deuxieme faille est une autre façon d'acceder au fichier passwd ou autres fichiers du disque dur du site. Une url classique dans Portix pour lire un message du forum est du style : /index.php?l=forum/view.php&topic=20020108011729.txt Quelques lignes à propos du message, à titre informatif : Le nom du fichier 20020108011729.txt n'est rien d'autre que la date et heure à laquelle le message à été posté. Dans ce cas si, le 08/01/2002, à 01 heure 17 minutes 29 secondes. Ces messages sont stockés dans /forum/data/. Ils se composent de la sorte : ** Titre. Auteur. Email. Date, heure (ici "08-01-2002, 1:17"). Le message, sur une ligne. ** Voyons maintenant l'endroit dans forum/view.php où se trouve la faille : ----------------------------------------------------------------------- $msg = file("forum/data" . '/' . $topic); $msg[] = $value; ----------------------------------------------------------------------- et un peu plus loin : ----------------------------------------------------------------------- echo " $value\n"; echo "\n"; } if ($key == "1") { /* Author */ echo "