Captchas text non fiables ?!

Publié le par ^ihcoro$

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
 
$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,'

'
;
$code = explode('+', $code);
$code2 = $code[0] + $code[1];
echo 'Résultat = ',$code2;
}
?>


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
 
$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.'

'
;

// +
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 "".$code."";
?>

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 :
 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
 
$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 '

'
.$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. Conclusion : Juste pour montrer encore une fois que certains types de captchas sont inefficaces, insuffisants pour lutter contre les spammeurs et sont donc à éviter.

article d'origine sur: seoblackout

Publié dans Tutoriel

Pour être informé des derniers articles, inscrivez vous :

Commenter cet article

Tiger 24/01/2010 02:34


Ce serait sympa de citer la page de l'article original : http://www.seoblackout.com/2007/12/30/failles-captchas-questions-calculs/


nee 24/11/2009 17:11


aps mal ^^" mais que propose tu en contre parti ^^?

ps: aime bien le nouveau skin


^Ihcoro$ 24/11/2009 20:31


Au lieu d'utliser des captchas text, on peux toujours utiliser une en image. Avec GD c'est facile, vous générez un text pseudo-aléatoire et vous le rendez en image, même si ceci n'est pas fiable à
100% le contourné require une compétence technique plus élevé.