Kristo

Utilisateur open source
  • Compteur de contenus

    18
  • Inscrit(e) le

  • Dernière visite


Messages posté(e)s par Kristo


  1. Bonjour,

    Ayant subi cette attaque sur ma boutique, je vous fais profiter ci-dessous de mon investigation et de la correction de cette importante faille de sécurité.

    Une injection de code permet en effet à n'importe qui d'afficher les adresses email et les mots de passe en MD5 de tous les utilisateurs. A partir du MD5, il est assez facile de retrouver un certain nombre de mots de passe en clair.

    Pour corriger la faille :

    dans boutique/lire/index.php

    Remplacer

    if (!isset($_GET['rubid'])) { $rubid = 0;} else {$rubid = $_GET['rubid'];}

    par :

    if (!isset($_GET['rubid'])) { $rubid = 0;} else {$rubid = intval($_GET['rubid']);}

    Voilà plus en détails mon investigation :

    J'ai d'abord eu la surprise de recevoir un mail m'annonçant le changement de mon mot de passe d'admin de la boutique.

    Aucun autre admin n'en étant à l'origine, j'ai regardé dans les logs, l'appel de init_mdp.

    Je l'ai trouvé en effet, à l'heure du message que j'avais reçu.

    Un peu plus haut dans le log, en provenance de la meme IP, j'ai trouvé un appel de lire/index.php avec un passage de paramètres contenant entre autres (je ne mets pas les détails) : conc...(...,email,mot_passe)...from peel_utilisateurs

    J'ai testé cette ligne sur ma boutique et j'ai eu la surprise de voir s'afficher les adresses email et des mots de passe (hashés en MD5) de tous les utilisateurs. En voici une copie d'écran (floutée en partie) :

    copieecranpiratagebouti.gif

    Il est facile ensuite pour les pirates de décrypter un certain nombre de mots de passe en MD5, avec des outils comme celui ci : AuthSecu, pour les mots de passe qui ne sont pas assez complexes.

    Le pirate a donc retrouvé un mot de passe admin et l'a utilisé pour se connecter. Heureusement il n'a apparemment pas fait de dégats à la boutique. Je suppose que son but était de collecter des mots de passe pour les utiliser par ailleurs (sur paypal par exemple, si quelqu'un a un compte avec le meme mot de passe).

    Cette faille circule parmi les pirates, je l'ai retrouvée avec google sur un forum à l'étranger.

    Je vous suggère à tous de corriger lire/index.php rapidement.

    Si quelqu'un découvre la même faille dans d'autres fichiers merci aussi de nous en informer.


  2. J'ai bien avancé depuis la dernière fois et ma boutique fonctionne avec les choix de couleurs et de tailles...

    Il me reste encore un problème à résoudre, et je bloque dessus.

    Je vous dis d'abord, en complément de mon post précédent, les autres fichiers modifiés :

    achat/modeles/produits_details.php

    ajout d'un nouveau fichier : achat/modeles/saisie_attributs_produits.php

    ajout des champs taillesdispo et couleursdispo dans la table produits

    factures/factures_html.php : ajout taille et couleur

    administrer/modeles/commande_details.php : affichage de la commande

    administrer/commandes.php : ajout taille et couleur

    achat/historique_commandes.php et achat/modeles/historique_commande_details.php

    achat/achat_maintenant.php et modeles/achat_maintenant.php : mode de paiement

    modeles/achat_confirmation.php : taille, couleur

    Le problème qu'il me reste est que lorsque je mets dans le caddie X produits de couleur A puis Y memes produits de couleur B, il additionne les deux et me dit qu'il y a X+Y produits de couleur B.

    C'est à dire par exemple : 1 T-shirt bleu + 2 T-shirts rouges = 3 T-shirts rouges, ce qui est un peu gênant.

    Idem pour les tailles.

    Pour résoudre le problème je sens bien qu'il faut modifier la structure du caddie pour qu'il y ait un array à trois dimensions ("produit", "taille", "couleur") en modifiant dans lib/class/caddie.php les fonctions init, ajout et compte_elements, mais je bloque sur compte_elements.

    Il faut aussi modifier achat/modeles/caddie.php.

    Voilà les fonctions init et ajout modifiées, pensez-vous qu'il y ait un bug ?

    function init() {

    /* Initialise (ou réinitialise) un caddie */

    $this->articles = array("produit", "taille", "couleur");

    $this->total = 0;

    $this->cout_transport = 0;

    $this->transport = "";

    $this->paiement = "";

    }

    function ajout(&$produitid, $quantite, $taille, $couleur) {

    /* Ajoute un article au caddie et met à jour le montant total */

    if (isset($produitid)) {

    if (! isset($this->articles[$produitid][$taille][$couleur])) {

    $this->articles[$produitid][$taille][$couleur] = 'O';

    }

    $this->articles[$produitid][$taille][$couleur] += $quantite;

    }

    }

    Et comment modifier compte_elements ?

    function compte_elements() {

    /* Renvoie le nombre d'articles dans le caddie */

    $total = 0;

    foreach ($this->articles as $produitid => $quantite) {

    $total += $quantite;

    }

    return $total;

    }

    Merci de votre aide... attendu avec espoir...

    (alexletiti, ensuite je pourrai te donner le détail)


  3. Bon, après maints essais et maints tatonnements j'ai finalement trouvé les modifs à faire :

    Dans achat\recherche.php :

    Remplacer :

    $resultat = mysql_query("SELECT id, reference, nom FROM peel_produits WHERE etat = '1' AND nom LIKE '%" . addslashes($_GET['motclef']) . "%' OR descriptif LIKE '%" . addslashes($_GET['motclef']) . "%' LIMIT $start,$nb");

    par :

    // pour filtrer les injections de données dans les formulaires (faille XSS)

    $search = array("<",">","/","'","", "%3c", "%3e",";","?");

    $replace = array("_","_","_","_","_","_","_","_","_");

    $motclef = str_replace($search,$replace,$motclef);

    $resultat = mysql_query("SELECT id, reference, nom FROM peel_produits WHERE etat = '1' AND nom LIKE '%" . $motclef . "%' OR descriptif LIKE '%" . $motclef . "%' LIMIT $start,$nb");

    Puis remplacer

    echo "<tr><td colspan=\"2\" class=\"normal\">Nous n'avons pas trouvé de résultats incluant le mot clé <b>". stripslashes($_GET['motclef']) ."</b>.<p></p><b>Suggestions :</b><br /><li type=\"square\"> Vérifiez l’orthographe du mot clé.<br /><li type=\"square\"> Essayez d'autres mots.<br /><li type=square> Utilisez des mots plus généraux.<p></p><a href=\"$wwwroot/achat/index.php\" class=\"normal\"><b>Cliquez ici</b></a> pour consulter directement notre catalogue.</td></tr>";

    par

    echo "<tr><td colspan=\"2\" class=\"normal\">Nous n'avons pas trouvé de résultats incluant le mot clé <b>". $motclef ."</b>.<p></p><b>Suggestions :</b><br /><li type=\"square\"> Vérifiez l’orthographe du mot clé.<br /><li type=\"square\"> Essayez d'autres mots.<br /><li type=square> Utilisez des mots plus généraux.<p></p><a href=\"$wwwroot/achat/index.php\" class=\"normal\"><b>Cliquez ici</b></a> pour consulter directement notre catalogue.</td></tr>";

    Puis remplacer

    print("<a class=\"petit\" href=\"recherche.php?motclef=".$_GET['motclef']."&start=".($start-$nb)."\">Page pr&eacute;c&eacute;dente</a>");

    par

    print("<a class=\"petit\" href=\"boutique/achat/recherche.php?motclef=".$motclef."&start=".($start-$nb)."\">Page pr&eacute;c&eacute;dente</a>");

    Puis remplacer

    print("<a class=\"petit\" href=\"recherche.php?motclef=".$_GET['motclef']."&start=".($start+$nb)."\">Page suivante</a>");

    par

    print("<a class=\"petit\" href=\"boutique/achat/recherche.php?motclef=".$motclef."&start=".($start+$nb)."\">Page suivante</a>");

    (ce qui au passage corrige un bug sur les boutons précédent et suivant);

    Puis remplacer

    <a class="petit" href="<?php echo $_SERVER['PHP_SELF']."?motclef=.$_GET['motclef]."&start=".$index*$nb; ?>"><?php echo $index+1; ?></a>&nbsp;

    par

    <a class="petit" href="<?php echo $_SERVER['PHP_SELF']."?motclef=".$motclef."&start=".$index*$nb; ?>"><?php echo $index+1; ?></a>&nbsp;


  4. il faut modifier l'objet caddie pour cela et ajouter 2 champs attributs dans la table commandes

    Merci Patrice !

    J'ai regardé un peu la chose. Je pense que tu parles de la table commandes_articles (et non commandes) ?

    Si je comprends bien, il me faut ajouter un champ "taille" et un champ "couleur" dans cette table.

    Et en php :

    il me faut modifier : achat\caddie_ajout.php

    pour ajouter ces deux variables à la ligne $_SESSION['caddie']->ajout($_REQUEST['id'], $_REQUEST['qte']);

    et dans lib\class\caddie.php : il faut modifier la fonction init et la fonction ajout

    et il faut modifier toutes les pages qui permettent de commander des produits, pour y ajouter un menu déroulant de taille ou de couleur :

    index.php

    achat/index.php et

    achat/produit_details.php

    Mais pour que mes produits "sachent" individuellement qu'ils doivent avoir une taille ou une couleur à gérer, il me faut aussi modifier la table produits;

    et du coup administrer/produits.php pour y dire qu'il y a une taille ou/et une couleur à gérer.

    J'ai bon ?

    J'espère que je ne vais pas mettre le bordel dans la base avec mes modifs... d'autant qu'il faut que mon truc marche dans les jours qui viennent...

    Par contre, je vais buter sur un problème : suivant les produits, les choix de tailles ou de couleurs ne sont pas les mêmes (par exemple, certains T-shirts ne sont pas disponibles en taille S) ce qui m'oblige à mettre des choses en "dur" dans les fichiers php... (?)


  5. $frm['references'] = array(); corrige une autre erreur comme expliqué plus haut !

    Ok j'ai fait cette modif...

    pour le reste j'ai demandé à avoir la page produits.php

    ... mais elle ne corrige pas le pb

    Voilà 2 extraits du source de la page produits.php lorsque j'ajoute un produit :

    <select size="1" name="categorie" class="formulaire1">

    <option value="NULL">Toutes les catégories</option>

    <br />

    <b>Warning</b>: Cannot use a scalar value as an array in <b>/home/mvtpaix/domains/mvtpaix.org/public_html/boutique/administrer/produits.php</b> on line <b>873</b><br />

    <br />

    <b>Warning</b>: Cannot use a scalar value as an array in <b>/home/mvtpaix/domains/mvtpaix.org/public_html/boutique/administrer/produits.php</b> on line <b>875</b><br />

    <option value="2" >Autocollants</option><option value="4" >Badges - Pins</option><option value="9" >Cartes de voeux et postales</option><option value="8" >Divers</option><option value="1" >Livres / Agenda 2008</option><option value="3" >Tee-shirts et vêtements</option><option value="5" >Vidéos / DVD</option> </select>

    et

    tr><td align="center" class="normal" colspan="7">

    <br />

    <b>Warning</b>: Cannot use a scalar value as an array in <b>/home/mvtpaix/domains/mvtpaix.org/public_html/boutique/administrer/produits.php</b> on line <b>1026</b><br />

    <a class="normal" href="/boutique/administrer/produits.php?start=30&categorie=">page suivante</a><br /><a class="normal" href="/boutique/administrer/produits.php?start=0&categorie=<br />

    <b>Warning</b>: Cannot use a scalar value as an array in <b>/home/mvtpaix/domains/mvtpaix.org/public_html/boutique/administrer/produits.php</b> on line <b>1038</b><br />

    ">1</a>&nbsp;

    <a class="normal" href="/boutique/administrer/produits.php?start=30&categorie=<br />

    <b>Warning</b>: Cannot use a scalar value as an array in <b>/home/mvtpaix/domains/mvtpaix.org/public_html/boutique/administrer/produits.php</b> on line <b>1038</b><br />

    ">2</a>&nbsp;

    </td></tr></table></td>

    </tr>


  6. ok faites passer la page produits.php

    ???

    erratum : regardez également ligne 160 ds la fonction function affiche_formulaire_ajout_produit

    si vous avez $frm['references'] = array(); sinon ajoutez le sous $frm['categories'] = array($categorie_id); car il y a un warning ds le code source au niveau des références

    cela bien entendu n'est pas la réponse à votre demande

    ???

    No comprendo

    Ca règle le pb ?

    Sinon quel pb ?

    Merci


  7. Bonjour,

    J'ai exactement le meme problème que sayaflo : comment faire pour ajouter un critère sur certains produits : la taille ou la couleur par exemple ? :huh:

    Des T-shirts de tailles S, M, L, XL et de couleurs Bleu, Rouge, Vert par exemple; et faire en sorte que les acheteurs puissent choisir la taille et la couleur...

    Sayaflo si tu as réussi à le faire, peux-tu expliquer ici quelles sont les modifs à faire dans la base et dans le code ?

    Sinon, quelqu'un peut-il nous aider ?

    Merci... help je suis bloqué... ;)


  8. Bonjour,

    Les corrections pour éviter cette faille n'ont pas été faites par défaut dans la version de Peel Shopping disponible actuellement (3.0 beta) apparemment...

    Pouvez-vous préciser un peu mieux où mettre ces modifs ?

    Je vois a quoi sert

    $search = array("<",">","/","'","", "%3c", "%3e",";","?");

    $replace = array("_","_","_","_","_","_","_","_","_");

    $motclef = str_replace($search,$replace,$motclef );

    Mais ca, à quoi ca sert et où le mettre ? :

    Puis

    $SqlRequest = "SELECT id, reference, nom_".$_SESSION['langue'].", image1, prix, promotion FROM peel_produits WHERE

    etat = '1' AND (reference LIKE '%" . $motclef . "%'

    OR nom_".$_SESSION['langue']." LIKE '%" . $motclef . "%' OR descriptif_".$_SESSION['langue']."

    LIKE '%" . $motclef . "%') LIMIT $start, $nb";

    Il y a un mysql_query dans recherche.php...


  9. Bonjour,

    J'ai installé Peel Shopping avec succès (merci !) sur mon site.

    Je compte l'interfacer avec le système de paiement par carte bancaire Paybox.

    Je cherche à faire une boutique qui soit la plus simple et pratique à utiliser pour la personne qui commande des articles.

    Je me demande donc s'il y a moyen de se passer de l'obligation, pour la personne qui achète un article, d'ouvrir un compte client et de s'identifier.

    Quel est l'intéret, sachant qu'il y a de toute façon un paiement sécurisé ensuite ?

    A quoi sert d'avoir des comptes clients ? Peut-on s'en passer ? Les désactiver, et comment ?

    Merci d'avance de vos réponses...

Twitter Advisto ecommerce

Facebook PEEL Shopping