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)