Failles dans les sondages AvotrAvis *********************************** Produit : ********* Avotravis Auteurs : ********* vince de EL ROUBIO http://vpontier.free.fr/ Modifications par Bertrand http://www.duplex-web.com Versions : ********** 2.1 et moins Date : ****** 01/03/02 Problèmes : *********** - Accès à l'administration. - Contournement des restrictions de vote. Developpement : *************** Avotravis est un service de vote php/php3 francophone. Les 2 failles ont une utilité tout à fait differentes mais sont toutes les 2 lièes aux cookies. La première permet d'acceder à la rubrique administrateur. Voici les premieres lignes du fichier admin.php3, expliquées par l'auteur : ----------------------------------------------------------------------------------------- // page d'administration $admin_pass="password"; // inscrivez ici le mot de passe d'accès // -- Vous n'avez rien d'autre à mofifier if ($bye) { setcookie("adminsondage"); header ("Location:admin.php3"); exit; } $auth = $HTTP_COOKIE_VARS["adminsondage"]; // on vérifie si on a un cookie if (!$auth) { if ($formulaire) { if ($pass==$admin_pass) { setcookie("adminsondage", "true"); $ADMIN_MODE = true; } else { echo "Erreur ! Le mot de passe n'est pas valide
"; echo "Retour"; exit; // on affiche pas la suite de la page } } ----------------------------------------------------------------------------------------- On voit que si le mot de pass admin est bon, le cookie avec comme nom 'adminsondage' et comme valeur 'true' sera envoyé au site. Il suffit donc d'envoyer soi-même ce cookie à la page "admin.php3" pour être considéré comme l'admin. La deuxième faille se trouve dans le fichier avotravis.php3 . Une partie de son code est censé interdire de voter plusieurs fois. Voici la partie concernant cette sécurité : --------------------------------------------------------------------------------- // ------------------------------------------------------ // ajoute de pierre [pc@sitoscope.com] // durée de validité du cookie // ------------------------------------------------------ // Pour une validité de 24 heures! // if($vote && !$already_voted) SetCookie( "already_voted", "86400"); // ------------------------------------------------------ // La validité est active ici jusqu'à la fermeture du navigateur // ------------------------------------------------------ if($vote && !$already_voted) SetCookie( "already_voted", "1"); --------------------------------------------------------------------------------- et plus loin la partie concernant le vote : --------------------------------------------------------------------------------- // procédure de vote if($vote == 1) { $fich="oui.txt"; $fp=fopen("$fich","r+"); $oui=fgets($fp,10); $oui++; fseek($fp,0); fputs($fp,$oui); fclose($fp); } if ($vote == 2) { $fich="non.txt"; $fp=fopen("$fich","r+"); $non=fgets($fp,10); $non++; fseek($fp,0); fputs($fp,$non); fclose($fp); } --------------------------------------------------------------------------------- La deuxieme partie nous permet de construire une url : http://www.host.com/avotravis.php3?vote=1 pour "oui" et http://www.host.com/avotravis.php3?vote=2 pour "non". Ainsi que de rajouter le boutton qui a comme nom Submit et comme valeur Voter, pour donner l'url http://www.host.com/avotravis.php3?vote=(1 ou 2)&Submit=Voter . La premiere partie du script php nous apprend qu'il suffit d'envoyer un cookie nommé "already_voted" et avec la valeur 0 à l'url vu juste avant pour pouvoir voter une 2eme fois. Patch : ******* Les créateurs ont été prévenus... voir les nouvelles versions ? Greetz : ******** / Credits : ********* frog-m@n (leseulfrog@hotmail.com)