Hoy vamos a ver una forma de resolver dos de los retos de hackme sin usar macros y de forma desatendida. Todo gracias a 9 lineas de Python 2.7
1. import urllib2 2. import time 3. import random 4. while True: 5. page = urllib2.urlopen("http://hackme.amonesta.me/about.php").read() 6. if "KEY" in page: 7. print page 8. break 9. time.sleep(random.random()/2)
Python 2.7 está llegando al final de su ciclo de vida y pronto tendremos que usar la versión 3.0 para todo. Hasta entonces, Python 2.7 es mi elección para scripts legibles de menos de 10 lineas.
La primera linea hace que podamos usar funciones de url de la libreria urllib2.
Las lineas, 2 y 3 ponen a nuestra disposicion funciones de tiempo y aleatoriedad respectivamente.
En la línea 4 empezamos un bucle infinito. Esto va contra todas las reglas de buen programador, pero a veces simplemente tenemos prisa y no nos apetece definir variables y condiciones para todo. Para evitar el bucle infinito tenemos el break de la línea 8 cuando se encuentre el texto KEY.
En la línea 5 hacemos que urllib descargue la página web y guarde el texto de la misma en la variable page
En la linea 6, Python hace todo el trabajo. Busca el texto KEY dentro del texto de la página web que acabamos de descargar. Si la encuentra, muestra esa página en pantalla y sale del bucle para acabar. Si no la encuentra lo vuelve a intentar bajando otra página más.
El reto es ser el visitante 1000 de la web. Así que en el peor de los casos va a hacer 999 intentos.
El problema de esto es que si dejamos que el bucle se haga sin interrupciones o me van a tumbar el servidor o mi proveedor va a bloquear la IP por exceso de conexiones y posible ataque de DDoS.
Para que las descargas se hagan de una forma que parezca «humana», hay que esperar un tiempo aleatorio prudencial.
time.sleep() espera los segundos especificados para continuar.
random.random() genera un numero decimal aleatorio entre 0 y 1.
De media entre consulta y consulta vamos a esperar medio segundo como máximo. Sigue siendo rápido en términos humanos, pero no será problema para el servidor. En un par de minutos y sin hacer nada más que esperar tendremos esta salida en la que aparecerá la palabra clave KEY junto a la clave de este reto.
De nuevo, vuelvo a dejarlo todo bastante explicado, pero sin llegar a dar la solución. Instalar el Python 2.7, copiar esas líneas de código y ejecutar el programa debería de estar a tu alcance.
De hecho, hasta deberías poder superar el reto de los captchas con poco más de lo que hemos visto en este artículo. Si te animas perfecto, y si no, no te preocupes. El próximo día te explico como resolvemos el reto de los captchas.