Intentar un ataque en un servicio ficticio
En este paso, simularemos un ataque en un servicio ficticio utilizando Hydra. Esto le ayudará a entender cómo funciona Hydra y cómo usarlo para descifrar contraseñas. Comenzaremos con un escenario simple para familiarizarlo con la herramienta.
Primero, creemos un "servicio" simple que requiera un nombre de usuario y una contraseña. Utilizaremos un simple script de Python para este propósito.
Navegue hasta el directorio de su proyecto:
cd ~/project
Cree un archivo llamado fake_service.py
:
nano fake_service.py
Pegue el siguiente código de Python en el archivo fake_service.py
:
#!/usr/bin/env python3
import socket
import sys
HOST = '127.0.0.1' ## Standard loopback interface address (localhost)
PORT = 65432 ## Port to listen on (non-privileged ports are > 1023)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
username = conn.recv(1024).decode().strip()
password = conn.recv(1024).decode().strip()
if username == 'testuser' and password == 'password123':
conn.sendall(b"Login successful!")
else:
conn.sendall(b"Login failed.")
Guarde el archivo y salga del editor. Haga el script ejecutable:
chmod +x fake_service.py
Ahora, ejecute el servicio ficticio en segundo plano:
./fake_service.py &
Esto inicia el script de Python, que escucha conexiones en el puerto 65432. El &
coloca el proceso en segundo plano.
A continuación, creemos una lista de nombres de usuario y contraseñas para que las utilice Hydra. Cree un archivo llamado users.txt
:
nano users.txt
Agregue el siguiente nombre de usuario al archivo:
testuser
Guarde el archivo y salga del editor.
Cree un archivo llamado passwords.txt
:
nano passwords.txt
Agregue las siguientes contraseñas al archivo:
password
password123
wrongpassword
Guarde el archivo y salga del editor.
Ahora, usemos Hydra para atacar nuestro servicio ficticio. Utilizaremos el módulo generic
ya que hemos creado un servicio personalizado.
hydra -l testuser -P passwords.txt 127.0.0.1 generic "USER <USER> PASS <PASS> RET Login successful!" -s 65432 -vV
Desglosemos este comando:
hydra
: El comando de Hydra.
-l testuser
: Especifica el nombre de usuario a utilizar. En este ejemplo, estamos utilizando un solo nombre de usuario.
-P passwords.txt
: Especifica el archivo de lista de contraseñas.
127.0.0.1
: La dirección IP de destino (en este caso, localhost).
generic
: Especifica el módulo genérico, que nos permite definir el protocolo.
"USER <USER> PASS <PASS> RET Login successful!"
: Esta es la definición del protocolo. <USER>
y <PASS>
son marcadores de posición que Hydra reemplaza con el nombre de usuario y la contraseña de las listas. RET Login successful!
le dice a Hydra que busque "Login successful!" en la respuesta para determinar un inicio de sesión exitoso.
-s 65432
: Especifica el número de puerto.
-vV
: Modo detallado, que muestra los intentos en tiempo real.
Debería ver a Hydra intentando diferentes contraseñas. Después de unos segundos, debería encontrar la contraseña correcta:
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra starting at 2024-10-27 14:30:00
[DATA] 1 task/1 service (1 connection per task, 1 thread per task)
[DATA] attacking service 127.0.0.1 on port 65432
[DATA] testing user: 'testuser' password: 'password'
[DATA] testing user: 'testuser' password: 'password123'
[65432] [generic] host: 127.0.0.1 login: testuser password: password123
Hydra is finishing at 2024-10-27 14:30:02 after 00:00:02
1 task completed, 1 valid password found
Esta salida muestra que Hydra encontró con éxito la contraseña password123
para el usuario testuser
.
Finalmente, detengamos el servicio ficticio. Primero, encuentre su ID de proceso:
ps aux | grep fake_service.py
Verá una línea similar a esta:
labex 1234 0.1 0.2 12345 6789 pts/0 Sl 14:29 0:00 ./fake_service.py
El segundo número (1234 en este ejemplo) es el ID de proceso (PID). Reemplace 1234
con el PID real de su salida.
Ahora, mate el proceso:
kill 1234
Esto detiene el servicio ficticio.