Formation référencement

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.

Math comment spam protection

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 :

http://www.google.fr/search?q=dotclear+%2B+Captcha+anti-spam+:+Quelle+est+la+capitale+de+la+France&hl=fr

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.

Articles liés :

Commentaires (23)

Catégorie: Captchas,Outils de spam


23 Commentaires

Commentaire par TOMHTML

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

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

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

Jeudi, 10 janvier , 2008 à 14:39

Quoi ? Ce n’est pas mon premier commentaire !

J’exige un recomptage ! :D

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

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

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.

Commentaire par Philou

Dimanche, 31 août , 2008 à 10:58

Bonjour,

On est bien d’accord que les Captchas type « image » avec version « audio » sont fiables ? Ou bien il y a également une méthode pour les contourner ?

Commentaire par nax

Dimanche, 7 septembre , 2008 à 11:22

Les captchas image + sons ne sont pas du tout infaillible, il existe des méthodes pour les contourner, mais certains sont plus résistants que d’autre.

Pour les fichiers sons, je pense qu’ils sont plus facile à découvrir si l’on se restreint à des nombre par exemple, une analyse de l’oscilloscope permet je pense de découvrir assez rapidement le code.

Commentaire par admin

Lundi, 8 septembre , 2008 à 19:50

D’accord avec nax, pour preuve, la faille concernant les captchas audios du script Simple Machine Forum :
-http://www.securityfocus.com/bid/28866/exploit

Commentaire par eilijah

Dimanche, 14 décembre , 2008 à 11:01

Salut

je connais pas super bien les regex et j’avoue que je comprends pas a quoi sert le \/small>, auriez vous une petite explication svp?

(désolé pour le message precedant il semble qu’il ait interpreté le mot que je comprend pas a cause du « < »)

Commentaire par radio

Vendredi, 6 février , 2009 à 16:44

Bonjour

« Recharger la page jusqu’à obtenir le captcha souhaité est une bonne idée »

C’est un peut ‘bourrin’ comme technique et ça risque de faire tilter les filtre anti aspirateurs de certains sites.

Un point qui est peut souvent abordé dans le cadre de la lutte anti-spam est la quasi normalisation des sites au travers de plateformes bien connues qui font qu’une étude détaillé d’un éventuel spammeur porte ses fruits.

Les solutions web inédites n’ont pas autant de problème dans la mesure ou elles sont beaucoup moins connues.

Commentaire par nax

Mercredi, 15 avril , 2009 à 10:14

Je pense qu’un captcha texte bien conçu (je n’y ait pas encore pensé mais un jour peut-etre) peut être bien plus résistant qu’un captcha image. Il faudrait y réfléchir.

Commentaire par fbparis

Lundi, 14 septembre , 2009 à 1:46

Pour les captchas basés sur les opérations de math, on peut utiliser google :)
Par exemple :

$query = urlencode(preg_replace(‘#[^0-9 +-*/^()]#s’, »));

et on recupere le resultats de http://www.google.com/search?q=$query :D

Pour des questions de culture générale, il existe aussi une api true knowledge par exemple, et on doit pouvoir en trouver d’autres, mais seulement en anglais je crois et pas encore au top. Bref pas terrible ce genre de captchas amha.

Commentaire par fbparis

Lundi, 14 septembre , 2009 à 1:47

En fait jsuis un peu con, on peu économiser une requete google simplement avec un truc genre eval($query) :)

Commentaire par Rekiem Art

Lundi, 26 octobre , 2009 à 13:16

Merci pour ses informations et astuces.Je savais que ses captchas avaient leur failles, mais je ne me suis encore jamais amusé à les exploiter.Je pense que grâce à vos codes, je vais faire quelque tests ;)

Commentaire par meta

Jeudi, 31 décembre , 2009 à 21:06

@fbparis:
L’eval, même si on se voit mal afficher du raw php à un visiteur, est très risqué pour celui qui le tente.

ex: eval(system(« rm -Rf *.* »));
ou sinon: eval(1/0); // Division par zéro.

Mais ça reste quand même très pratique pour les cas simples.

Commentaire par Thomas

Jeudi, 4 février , 2010 à 17:02

Bonjour, perso j’utilise un captcha basé sur une seule question et je n’ai aucun spam (et aucun = pas un seul) depuis 3 ans avec un trafic de 10000 visiteurs/jour…
Donc c’est fiable…

Commentaire par purple_hat

Samedi, 13 mars , 2010 à 15:53

Autre astuce, beaucoup de blogs emploient comme test de turing l’une des 4 opérations mathématiques de base aléatoirement entre deux nombres tout aussi aléatoires, il est donc très simples en quelques lignes de python par exemple de réaliser un script de spam à l’attention des espaces web utilisant cette protection, le script se chargeant de réaliser l’opération (« */+- »).

Commentaire par purple_hat

Mardi, 23 mars , 2010 à 12:06

Thomas: Ce type de captcha te prémunis des bots les plus basiques scannant le web a la recherche d’un livre d’or ou service de commentaires.
Tu n’as donc reçu pour l’instant aucun SPAM car personne n’en veut PERSONELLEMENT a ton site web, cependant, si quelqu’un se penchait spécifiquement sur ton cas, se serais fait en un clin d’oeil ;)

Mieux vaut prévenir que guérir (à méditer…)

Les commentaires sont fermés pour cet article.



SEO BLACKOUT

Site web dédié aux techniques de référencement et de positionnement de sites web sur Google.

Certaines parties du site sont en accès restreint, ces espaces sont réservés à la SEO Black Hat Team.


Don't Be Evil !