Pourquoi les captchas basés sur les questions, les calculs ne sont pas fiables ?
Ecrit par admin le Dimanche 30 décembre 2007 à 19:42 - Catégorie Captchas, Outils de spam
Les captchas antispam basés sur les questions et ou les calculs, ne sont pas fiables, ces captchas sont facilement contournables (lisez cet article jusqu’au bout pour comprendre comment contourner ces captchas à tous les coups).
Prenons au hasard :), l’exemple de Matt Cutts (l’homme antispam de Google) qui utilise un capcha très simple à contourner sur son blog Wordpress : http://www.mattcutts.com/blog/.
Son script de captcha est basé sur des opérations de calcul arithmétique, euh pardon, des additions uniquement.
Edition du 14 janvier : En fait, Matt Cutts utilise le plugin pour wordpress : “math comment spam protection”, ce plugin est donc vulnérable.

L’exemple de script ci-dessous est basé sur ce plugin qui est utilisé sur le site de Matt Cutts au pied de chaque article.
Voici donc comment bypasser / passer les captchas basés sur des calculs arithmétiques :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php $useragent = 'Mozilla/5.0'; $url = 'http://www.mattcutts.com/blog/tons-of-pubcon-interviews-on-video-and-audio/'; $ch = curl_init(); // set user agent curl_setopt($ch, CURLOPT_USERAGENT, $useragent); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $result=curl_exec ($ch); curl_close ($ch); if (preg_match('/what is the sum of(.*?)<\/small>/si', $result, $matches)) { $code = $matches[1]; $code = str_replace(' ', '', $code); $code = str_replace('?', '', $code); echo $code,'<br>'; $code = explode('+', $code); $code2 = $code[0] + $code[1]; echo 'Résultat = ',$code2; } ?> |
Cliquez ici pour télécharger le code de l’exemple
Imaginons maintenant que Matt utilise les 4 opérateurs arithmétiques (additionner, soustraire, multiplier, diviser), le code ressemblerait à quelquechose comme :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?php $useragent = 'Mozilla/5.0'; $url='http://www.mattcutts.com/blog/tons-of-pubcon-interviews-on-video-and-audio/'; $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, $useragent); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $result=curl_exec ($ch); curl_close ($ch); if (preg_match('/what is the (.*?)<\/small>/si', $result, $matches)) { $code = str_replace(' ', '', $code); $code = str_replace('?', '', $code); $code2 = str_replace("multiplication of", "*", $code2); $code2 = str_replace("substraction of", "-", $code2); $code2 = str_replace("sum of", "+", $code2); $code2 = str_replace("division of", "/", $code2); echo $code2.'<br>'; // + if (strpos($code2, '+')) { $plus = explode('+', $code2); $code = $plus[0]+$plus[1]; } // - if (strpos($code2, '-')) { $moins = explode('-', $code2); $code = $moins[0]-$moins[1]; } // / if (strpos($code2, '/')) { $div = explode('/', $code2); $code = $div[0]/$div[1]; } // * if (strpos($code2, '*')) { $multi = explode('*', $code2); $code = $multi[0]*$multi[1]; } } else { $code = "RIEN"; } echo "<font color=red>".$code."</font>"; ?> |
Maintenant, attaquons nous aux captchas proposant des questions, du genre “quelle est la couleur du cheval blanc de Matt Cutts ?”
De nombreux blogs utilisent des plugins basés sur ce genre de captcha, les webmasters installent le script et ne modifient pas beaucoup les questions et réponses, il est donc possibles de lister toutes les questions et réponses mais c’est un travail fastidieux…
Il ya bien plus simple, plutôt que de lister toutes les questions et réponses possibles, il suffit d’en lister une ou deux et de boucler.
Prenons l’exemple de Dotclear (script php gratuit de blogs) et d’un plugin de captcha antispam basé sur des questions :
Je prend donc une question au hasard : Quelle est la capitale de la France ?
Je recharge ma page tant que je n’ai pas trouvé la question : “Quelle est la capitale de la France” dans la page. Dès que je trouve cette question dans la page, j’extrais les variables dont j’ai besoin et je soumet mon formulaire automatiquement à l’aide de Curl (je ne mets pas le code de soumission automatique de formulaire ici, cela fera l’objet d’un autre article).
Dans cet exemple, il y a un champs caché à extraire qui est lié à la session et donc à la question (voir code source du formulaire des commentaires :
<input name="dc_captcha_code" value="0ce535669244c18d3c158cc368eb1b9e" type="hidden" />
Le script maintenant pour comprendre l’astuce
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php $useragent = 'Mozilla/5.0'; $url = 'URL DUN BILLET DOTCLEAR UTILISANT CE SCRIPT CAPTCHA ANTISPAM BASé SUR DES QUESTIONS'; $ch = curl_init(); // set user agent curl_setopt($ch, CURLOPT_USERAGENT, $useragent); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $result=curl_exec ($ch); curl_close ($ch); if (preg_match('/capitale de la France/si', $result)) { $code = 'paris'; preg_match('/dc_captcha_code(.*?) type/si', $result, $matches); $code2 = str_replace('" value="', '', $matches[1]); $code2 = str_replace('"', '', $code2); echo $code; echo '<br />'.$code2; //on a trouvé, on arrête le script exit(); } else {//si question pas trouvée, on recommence header("Location: http://www.seoblackout.com/scripts/captcha-questions.php"); } ?> |
Avec ce script, je passe à chaque fois le captcha, ce script peut s’adapter à n’importe quel script de captcha basé sur des questions ou calculs, au placard donc les captchas basés sur les questions.
Voir aussi cet article :
Bypass Captcha : petit tour d’horizon des techniques pour contourner les captchas
Conclusion : Juste pour montrer encore une fois que certains types de captchas sont inefficaces, insuffisants pour lutter contre les spammeurs et sont donc à éviter.
Catégorie: Captchas, Outils de spam
- Ajouter cet article à :
- Del.icio.us -
- Digg
Commentaire par TOMHTML (3 commentaires)
Dimanche, 30 décembre , 2007 à 20:25
Recharger la page jusqu’à obtenir le captcha souhaité est une bonne idée
C’est bête mais il fallait y penser. En espérant que la base de questions ne soit pas trop importante.
Bonne continuation !
Commentaire par admin
Dimanche, 30 décembre , 2007 à 21:03
Merci TOMHTML pour ton commentaire
Oui l’idée est toute bète mais fallait y penser comme tu dis
C’est en me penchant sur ce type de captchas que m’est venu l’idée, je me voyais mal lister toutes les questions possibles…:lol:, alors qu’une simple ré-actualisation de la page jusqu’à trouver ma question était bien plus simple.
Même avec un nombre important de questions cela reste assez rapide à traiter.
Commentaire par Misix (2 commentaires)
Lundi, 31 décembre , 2007 à 1:33
Sinon il existe des décodeurs (souvent payant) qui permettent de décoder une bonne partie des captchas.
Commentaire par alex de Referencement Blog (13 commentaires)
Jeudi, 10 janvier , 2008 à 14:38
Bonjour admin (Pas très Sexy le pseudo ;D),
En fait, les captcha textes utilisant des questions, limite tout de même les spams de masses (s’il y a des questions originales).
Pour mon blog, pour limiter les spams de masse, j’ai même fait plus simple, en obligeant simplement d’ajouter en début de commentaire “bonjour” ou “salut”, mais evidemment si le blog est ciblé par un spammeur c’est mort.
Ainsi, les plugins anti-captcha peuvent paraitre décevant, mais pour la plupart des blogs c’est suffisant.
A noter, qu’il n’y a pas de difficultés à bloquer ce type de spam, il suffit de blacklister l’ip au bout de 10 erreurs par exemple. En laissant, tout de même la possibilité d’un bon captcha image pour le débloquer.
Commentaire par alex de Referencement Blog (13 commentaires)
Jeudi, 10 janvier , 2008 à 14:39
Quoi ? Ce n’est pas mon premier commentaire !
J’exige un recomptage ! ![]()
Commentaire par admin
Jeudi, 10 janvier , 2008 à 18:41
Salut Alex,
En fait je ne soumets pas le formulaire, je réactualise la page jusqu’à trouver la question qui m’intéresse, donc pas d’erreurs de saisie/soumission de captcha puisque je soumets uniquement quand j’ai la bonne question.
Commentaire par sandrine (1 commentaire)
Samedi, 2 février , 2008 à 11:01
Et si on supprime les opérations et qu’on réinvente toutes les questions, on “sécurise” un peu mieux son script ?
En attendant la prochaine fois … !
Commentaire par admin
Samedi, 2 février , 2008 à 14:16
Oui Sandrine, c’est une des solutions possible ![]()
Commentaire par zebulon
Vendredi, 14 mars , 2008 à 11:45
Et si … la question était générée en image ?!
Commentaire par nax (nouveau commentaire)
Samedi, 26 juillet , 2008 à 17:36
Les captchas images sont bien entendu les plus sur mais ils ont un gros point faible il ne sont pas accessible (mal voyant par exemple) oa alors cela nécessites des scripts assez lourd (génération fichier wav etc).
Les captcha textes si ils sont bien pensé conviennent dans la plupart des cas.















