Colissimo : Bypasser le captcha

J’ai effectué une commande sur internet (ouais, c’est bientôt noël :D ) et on m’a donc fournis un numéro de suivis Colissimo.

En me rendant sur le site, j’ai vu qu’on pouvait se créer un compte pour gérer les suivis de commande et personnaliser les alertes e-mails. Plutôt intéressé par cette fonctionnalité étant donnée que noël c’est samedi et que mon colis doit arriver jeudi, il faudrait mieux que je sois là quand le facteur va se pointer. Donc je décide de m’inscrire. 

Formulaire classique d’inscription. Et puis comme sur beaucoup de site un captcha à compléter. 

Un captcha, c’est quoi ?

Un captcha c’est un système qui à pour but de s’assurer qu’on à bien affaire à un humain et non pas un ordinateur qui réalise automatiquement une inscription (on parle de robot). Pour ça, il faut poser une question à laquelle seul un humain peut répondre et que cette question change tous le temps (sinon il suffit de dire au programme qu’elle est la réponse).

La méthode la plus courante est d’afficher une image qui contient des lettres ou des chiffres (ou les deux) mais de façon brouillés. Soit en inclinant les lettres ou en les déformants. On va aussi souvent utiliser un fond qui n’est pas uni et si possible des couleurs proches entre le fond et les lettres. Tous ça pour rendre l’analyse par un ordinateur très compliqué, parce que si l’œil humain lui va facilement reconnaitre les chiffres (enfin avec certains système de captcha, même pour un humain c’est balaise…) l’ordinateur lui à beaucoup de mal à reconnaitre ces chiffres dans une image.

Le problème c’est que ce n’est pas toujours évident d’arriver à lire le code du captcha. Surtout quand on voit pas très clair parce qu’on à des problèmes de vision.  Du coup, de plus en plus de site propose une alternative au captcha image, c’est le captcha audio. Le principe est similaire, un fichier audio qui énonces des chiffres ou des lettres qu’il faut recopier. Là aussi pour un ordinateur la reconnaissance vocal n’est pas toujours facile alors que pour les humains c’est naturel.

 

Là, j’ai mis un petit tableau sympa qui montre les taux de réussites de programme pour déchiffrer des Captchas visuel. On constate que pour celui de google, pour avoir un taux de réussite proche de 80% on doit analyser l’image pendant environs une minute, ce qui est très long. Bon ça montre que les captcha ne sont pas infaillible mais il faut savoir que les algorithmes pour les déchiffrer sont souvent très complexe et repose sur des algorithmes mathématiques pousser. Bref, c’est pas à la porter de tous le monde et sa suffit donc pour se protéger de 99% des petits malins qui voudrais faire des programmes qui passe les captcha.  

Le captcha de Colissimo

Mais revenons à mon inscription sur Colissimo. Le site propose deux méthodes pour entrer le captcha : Soit en lisant les chiffres présent sur une image brouillé. Soit, pour ceux qui ne voient pas clair une version audio du numéro.

Bon, déjà en réactualisant le formulaire plusieurs fois, on constate que le captcha est toujours un numéro composé de 4 chiffres. C’est déjà une grosse faiblesse parce qu’on sais ce qu’on cherche : 4 chiffre séparé allant de 0 à 9  et que le nombre total de possibilité différente est seulement de 10 000.

Par curiosité, j’écoute la version audio. Et là je me dis « ça dois quand même pas être bien compliqué de trouver le numéro automatiquement à partir du fichier audio vu comme la nana parle » En effet, en écoutant plusieurs captcha différents on s’aperçoit que l’intonation est toujours la même et qu’on à toujours un gros blanc entre les chiffres. En gros, on peut supposer que le fichier audio final est un assemblage de 4 fichiers audio où la nana dis un seul chiffre.Du coup, on peut facilement créer un programme qui découpe le fichier final en 4 puis comparer ces fichiers  avec des fichiers audio de référence qu’on aurais découpé et qui contiendrais les 10 chiffres uniques (de 0 à 9).

Et là, je me dis, faut que j’essaye ! Déjà parce que la comparaison de fichier audio et la découpe me semblaient intéressantes à réaliser, et puis parce que j’avais quand même un doute sur ma solution. ça me semblait trop simple, et je pensais que Colissimo avait surement dû envisager ce cas là.

Alors, je me créer un petit dossier dans les quelles j’allais enregistrer plusieurs fichiers audio de captcha différent généré par le site histoire d’avoir matière à bosser dessus et à pouvoir les analyser.

Mais…

En regardant l’adresse du fichier audio pour l’enregistrer sur mon disque dure je constate que l’url est de cette forme là :

http://colissimo.fr/sounds/e5e580bb7e6f5e01ecf1be2c21a834e7.mp3 

Et là, un truc m’interpelle tous de suite : on dirais un hash md5 nan ?

Un hash c’est quoi ?

En gros c’est une fonction qui transforme une suite de caractère de longueur variable en une suite de caractère hexadécimal de longueur fixe. Qu’on passe une chaine de caractère comme « Pouet Pouet » , un fichier jpg de 2Mo ou une image ISO de 4Go, la résultat du hash aura la même longueur.  Ce qu’il faut savoir, c’est que pour une suite de caractère donnée, le hash sera toujours le même. Par exemple « Plop » donnera toujours « 64a4e8faed1a1aa0bf8bf0fc84938d25″ 

Les fonctions de hash sont également conçu pour ne pas permettre l’opération inverse. C’est à dire qu’il n’existe pas de fonction qui puisse faire en sorte qu’avec la valeur « 64a4e8faed1a1aa0bf8bf0fc84938d25″ on puisse retrouvé le texte d’origine « Plop ».

En faite on peut comparé ça à une empreinte digital. Chaque individu à une empreinte unique qui sera toujours la même. Mais l’empreinte en elle même ne nous indique pas grand chose sur l’individu à qui elle appartient (on ne peut pas savoir à qui il ressemble par exemple)

Les hash servent pour pleins de choses. Par exemple pour stocker les mots de passes sur les sites internet. Quand quelqu’un s’inscrit on stocke le mot de passe sous forme de hash et quand l’utilisateur veut se connecter, il fournit sont mot de passe non hashé, le site web vas alors le hashé et le comparer au hash stocké dans la base de donnée. Comme le hashage d’une même chaine donne toujours le même hash, si les deux hash sont identique, cela voudra dire que le mot de passe est le bon. Alors ça peut paraitre un peu inutile de comparer les hash plutôt que de directement stoquer le mot de passe en claire et ensuite de le comparé avec celui entré par l’utilisateur, mais c’est en faite une question de sécurité. Si quelqu’un pirate le site il n’aura pas les mots de passes mais seulement les hash, et il ne pourra pas en faire grand chose.

Le nom du fichier audio est un hash ?

Revenons à notre fichier audio de Colissmo. Le nom du fichier audio semble donc être un hash md5, en tout cas il y ressemble beaucoup. Là, me viens une idée assez folle et peu probable : Et si le nom du fichier était en faite un hash du nombre contenu dans le fichier audio ? Dans le doute, je vérifie quand même…

Bingo ! Si le captcha affiché est 4938, le hash md5 correspondant est « ec16c57ed363c5ca91a3e5e5b88fe502″ ce qui correspondant effectivement au fichier lié qui est : « ec16c57ed363c5ca91a3e5e5b88fe502.mp3″

Retrouver le code à partir du Hash ?

Bon, le truc avec les hash md5, si vous avez bien suivi, c’est que logiquement on peut pas faire la fonction inverse c’est à dire qu’à partir de la valeur du hash on ne peut pas retrouver la valeur de la chaine de caractère de base. Mais ce qu’on se faire c’est se construire une liste de correspondance étant donné qu’on sais que les codes vont seulement de 0000 à 9999.

1
0001 => 042e7ebf4edecc7ac0b444a7e75f21a3
2
0002 => fcd04e26e900e94b9ed6dd604fed2b64
3
0003 => 7cd86ecb09aa48c6e620b340f6a74592
4
...
5
9999 => fa246d0262c3925617b0c72bb20eeb1d

On peut facilement écrire un script qui nous génère tous les hash et qui les enregistres dans une base de donnée (on aura donc 10 000 enregistrements ce qui est pas énorme pour une BDD)

Ensuite il nous suffit d’écrire un script qui réalise une inscription tout seul et qui remplis la valeur du captcha en cherchant dans la base de donnée la valeur du nombre qui correspond à l’adresse du fichier audio indiqué par le formulaire.

Autrement dis, le catpcha du site Colissimo n’a absolument aucun intérêt puisqu’en quelques lignes de codes ont peut le bypasser sans avoir à analyser l’image ou même le fichier audio, il suffit de récupérer le nom du fichier audio et de regarder dans notre base de donnée à quel nombre il correspond.


Cette entrée a été publiée dans Informatique, avec comme mot(s)-clef(s) , . Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>