domingo, 10 de diciembre de 2017

Hilos en Python - Brute force

El trabajo con threads se lleva a cabo en Python mediante el módulo thread. Este módulo es opcional y dependiente de la plataforma. 

Pero además de thread, también contamos con el módulo threading que se apoya en el primero para proporcionarnos una API de más alto nivel, más completa, y orientada a objetos y es el que utilizaré para el ejemplo de hoy, un programa que realizará fuerza bruta utilizando un diccionario para encontrar la clave de algunos usuarios utilizando hilos (para mas informacion de hilos en python click aqui). 


Para el ejemplo primero he montado un servidor utilizando el framework web Django, el cual contiene un formulario de login con el siguiente html:


En una publicación anterior ya explique como realizar un login con Python (
ver aqui) , así que ahora cree mi propio login, uno sencillo para poder hacer el ejemplo en donde solo requiere 3 datos por método POST (user, clave, ingresar).

Aplicando fuerza bruta


Bueno para realizar el ataque por fuerza bruta, he creado algunos usuarios:


Ademas de un diccionario con las posibles claves de estos usuarios, para el ejemplo solo he creado 11 claves como prueba de las cuales entre ella están la de los usuarios que probare:



El código lo pueden ver desde el repositorio ver aqui. Podemos ver que se utilizan los 3 parámetros mencionados que son enviados por método POST:

payload = {
"user":user,
"clave":clave,
"ingresar":"Ingresar"
}
response = requests.post(url, data=payload)

Nuestro formulario se vería así:



Donde una vez que accedimos, nos mostrara un mensaje en un etiqueta <p> con id="info":


A lo cual debemos evaluar en nuestro programa para saber si los datos ingresados han sido correctos o no. Eso lo evaluaremos usando BeautifulSoup, en donde obtendremos el código en la etiqueta <p id="info"> de no existir significa que no logramos acceder y por lo tanto nuestra clave es incorrecta:




Utilizando hilos para validar múltiples cuentas:


Como ultimo paso, he utilizado 2 hilos para a la vez ir buscando las claves de 2 de los usuarios creados, esto se puede hacer para muchos mas usuarios o dividir en hilos las posibles claves de un usuario:



Para empezar a ejecutar un hilo, se utiliza su metodo hilo.start() y una vez realizado todo, probamos el programa:



Bueno, el programa te muestra tanto las claves incorrectas como la clave correcta. Los usuarios a probar son "prueba" -> "micontra123" y "unusuario" -> "clave123". 




Enlaces:











No hay comentarios.:

Publicar un comentario