7 de julio de 2009

Spider 0.01

Lo bueno de estas fechas es que te puedes pirar 1 semana de vacaciones, volver, y comprobar que todo sigue más o menos donde lo dejaste aunque el centenar de correos almacenados de distintas listas de correo, buzones, amigos que comparten extrañezas y similares se empeñen en llevar la contraria.

Al fin y al cabo 1 semana no es mucho tiempo (de ahí que se pase rapidísima cuando uno tiene los pies en remojo en aguas levantinas), no obstante incluso en vacaciones surgen conversaciones de seguridad o al menos se te ocurren ideas para la vuelta. Así ocurrió cuando tras pasar por Terra Mitica decidimos comprar una de esas fotos que te tiran cuando llevas cara de "Speed". En este caso la compra se tradujo en un ticket con un código donde te metes en un sitio web y tras meterlo te puedes bajar la foto. La estructura del código era la siguiente:

Nombre del Parque: TM (Terra Mitica)

Atracción: Cataratas del Nilo (CN)

Mes: X

Dia: YY

Codigo de imagen: JZZZZ (ZZZZ à [0-9999]

Así por ejemplo TMCN707J1384 será la foto 1384 disparada el 7 de Julio en Cataratas del Nilo en Terra Mitica, ahora bien solo se suben las fotos que son adquiridas, el resto se eliminan (supongo). Al final este código se traduce en una URI que te adentra en un árbol de directorios hasta tu foto:

http://www.sitioweb_empresafotos.com/RIDES/TMCN/702/FullRes/codigofoto.jpg

Entonces me dije, estaría bien ver las fotos de toda la gente que pasó por allí ese día, ya sabes, solo por ver las caras, curiosidad felina, llámalo X. ¿Cómo hacerlo? Lo primera idea que me vino fue preguntarle al malvado Google, que tiene sus arañas por ahí explorando la red de redes, una búsqueda para el sitio con filetype:jpg no me proporcionó nada. Alternativa, listar el contenido de las carpetas: no tengo permisos. Alternativa, bajarme todos los ficheros con un pequeño Script. Problema: llevo sin programar 2 años, ¿me acordaré? Ahora que recuerdo estuve trasteando con el TargetSearch de pentester en PERL hace unas semanas, parece que PERL puede ser un buen lenguaje. Asi es como surgió este pequeño Spider:

#!/usr/bin/perl

#Spider by GigA#

use LWP::Simple;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->timeout(1);
$ua->env_proxy;
use ExtUtils::MakeMaker;

print "Spider 0.01 by GigA\n";
print "We start the download series, $i\n";
my $user = prompt "Proxy user:";
my $password = prompt "Proxy password:";
$ENV{HTTP_PROXY} = 'http://proxy.local:8080';
$i = $i -1;

for($i=1000;$i<2000;$i++){
   $string = '0' x ( 4 - length($i) ) . $i;

my $status = getstore("http://www.sitio_empresa.com/RIDES/TMCN/704/FullRes/J$string.jpg", "J$string.jpg");

if ( is_success($status) )
{
   print "File downloaded correctly\n";
}
else
{
   print "Error downloading file J$string.jpg: $status\n";
}
}

Y con esto nos podemos descargar todos los archivos que sepamos hay en una carpeta de un sitio Web (siempre que tengamos acceso claro):

Le he incluido autenticación por Proxy aunque te funcionará igualmente si no pones nada, viendo la potencia y sencillez de PERL pillarme un librito para aprender realmente será obligación este verano.

¿Cómo mejorar este pequeño script? Ocultando o cifrando los caracteres mostrados en pantalla, permitiendo que detecte y busque en subcarpetas, acelerando el tiempo de las busquedas, etc. Etc. Vamos, todo lo que puede hacer un programa para hacer “site download” pero sin realizar búsquedas en el código de la pagina Web.

¿Sugerencias?

Salu2!

3 comentarios:

Homo libris dijo...

¡Muy chulo! Así, así, sin dejar a la mente descansar :)

Para el próximo, tal vez te animes con el "Perl elegante", Python... yo también le tengo ganas a este lenguaje, y quería aprovechar el verano para mirar algunas cosillas en el mismo.

¡Saludos!

Homo libris dijo...

Ups, escribí con la cuenta de Google: soy Lobosoft :P

GigA ~~ dijo...

jeje, ya te conozco en tus multiples personalidades :)

Seguiremos alimentando a ella-laraña, por cierto me parece más comodo Perl que Python, aunque para gustos xD

Salu2!