Angriff auf einen gefälschten Dienst versuchen
In diesem Schritt werden wir einen Angriff auf einen gefälschten Dienst mit Hydra simulieren. Dies hilft Ihnen zu verstehen, wie Hydra funktioniert und wie Sie es verwenden können, um Passwörter zu knacken. Wir beginnen mit einem einfachen Szenario, um Sie mit dem Tool vertraut zu machen.
Zunächst erstellen wir einen einfachen "Dienst", der einen Benutzernamen und ein Passwort erfordert. Dazu verwenden wir ein einfaches Python-Skript.
Navigieren Sie in Ihr Projektverzeichnis:
cd ~/project
Erstellen Sie eine Datei namens fake_service.py
:
nano fake_service.py
Fügen Sie den folgenden Python-Code in die Datei fake_service.py
ein:
#!/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.")
Speichern Sie die Datei und verlassen Sie den Editor. Machen Sie das Skript ausführbar:
chmod +x fake_service.py
Jetzt starten Sie den gefälschten Dienst im Hintergrund:
./fake_service.py &
Dadurch wird das Python-Skript gestartet, das auf Verbindungen auf Port 65432 wartet. Das &
setzt den Prozess in den Hintergrund.
Als nächstes erstellen wir Listen mit Benutzernamen und Passwörtern, die Hydra verwenden kann. Erstellen Sie eine Datei namens users.txt
:
nano users.txt
Fügen Sie den folgenden Benutzernamen in die Datei ein:
testuser
Speichern Sie die Datei und verlassen Sie den Editor.
Erstellen Sie eine Datei namens passwords.txt
:
nano passwords.txt
Fügen Sie die folgenden Passwörter in die Datei ein:
password
password123
wrongpassword
Speichern Sie die Datei und verlassen Sie den Editor.
Jetzt verwenden wir Hydra, um unseren gefälschten Dienst anzugreifen. Wir verwenden das generic
-Modul, da wir einen benutzerdefinierten Dienst erstellt haben.
hydra -l testuser -P passwords.txt 127.0.0.1 generic "USER <USER> PASS <PASS> RET Login successful!" -s 65432 -vV
Lassen Sie uns diesen Befehl analysieren:
hydra
: Der Hydra-Befehl.
-l testuser
: Gibt den zu verwendenden Benutzernamen an. In diesem Beispiel verwenden wir einen einzelnen Benutzernamen.
-P passwords.txt
: Gibt die Datei mit der Passwortliste an.
127.0.0.1
: Die Ziel-IP-Adresse (in diesem Fall der lokale Rechner).
generic
: Gibt das generische Modul an, das es uns ermöglicht, das Protokoll zu definieren.
"USER <USER> PASS <PASS> RET Login successful!"
: Dies ist die Protokolldefinition. <USER>
und <PASS>
sind Platzhalter, die Hydra durch den Benutzernamen und das Passwort aus den Listen ersetzt. RET Login successful!
teilt Hydra mit, nach "Login successful!" in der Antwort zu suchen, um einen erfolgreichen Login festzustellen.
-s 65432
: Gibt die Portnummer an.
-vV
: Ausführlicher Modus, der die Versuche in Echtzeit anzeigt.
Sie sollten sehen, dass Hydra verschiedene Passwörter versucht. Nach ein paar Sekunden sollte es das richtige Passwort finden:
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
Diese Ausgabe zeigt, dass Hydra erfolgreich das Passwort password123
für den Benutzer testuser
gefunden hat.
Schließlich stoppen wir den gefälschten Dienst. Zunächst finden wir seine Prozess-ID:
ps aux | grep fake_service.py
Sie sollten eine Zeile ähnlich der folgenden sehen:
labex 1234 0.1 0.2 12345 6789 pts/0 Sl 14:29 0:00 ./fake_service.py
Die zweite Zahl (in diesem Beispiel 1234) ist die Prozess-ID (PID). Ersetzen Sie 1234
durch die tatsächliche PID aus Ihrer Ausgabe.
Jetzt beenden wir den Prozess:
kill 1234
Dadurch wird der gefälschte Dienst gestoppt.