Schlagwort-Archive: bruteforce

Metasploitable 2 Kennwörter brechen

Im gestrigen Artikel wurde beschrieben, wie durch eine Hintertür in vsftpd 2.3.4, Rootrechte auf der virtuellen Maschine Metasploitable 2 erlangt werden können. Diese Rootrechte sollen verwendet werden, um die Kennwörter der virtuellen Maschine zu entnehmen und folgend zu brechen.

Mit den Befehlen cat /etc/passwd und cat /etc/shadow werden die Inhalte der entsprechenden Dateien ausgegeben. Warum gerade diese? Sie enthalten die Benutzerdaten der lokalen Systembenutzer; zumindest solange keine esoterischen Verfahren wie OpenLDAP zur Authentifikation eingesetzt werden. Der Hash des Kennworts und die Benutzerdaten werden seit Ende der 1980er Jahre in getrennten Dateien gesichert, damit normale Benutzer die Benutzerdaten lesen dürfen, nicht aber damit auch die Hashes der Kennwörter zu Gesicht bekommen.

Die aus der virtuellen Maschine entnommenen Dateien als passwd und shadow speichern. Dann werden sie mittels unshadow wie folgt zusammenfügen.

root@kalilinux:~/10.13.37.24# unshadow 
Usage: unshadow PASSWORD-FILE SHADOW-FILE
root@kalilinux:~/10.13.37.24# unshadow passwd shadow > metasploitable2_credentials.txt 

Das Ergebnis des Programms unshadow kann mit John the Ripper bearbeitet werden. Für Metasploitable sind weder Wörterbücher noch Parallelisierung notwendig, darum kann die von Kali Linux mitgelieferte Version verwendet werden. Die ersten sieben von acht Kennwörtern werden innerhalb von Sekunden gebrochen.

john metasploitable2_credentials.txt
Loaded 7 password hashes with 7 different salts (FreeBSD MD5 [128/128 SSE2 intrinsics 12x])
user             (user)
postgres         (postgres)
msfadmin         (msfadmin)
service          (service)
batman           (sys)
123456789        (klog)

Der Wert in Klammern entspricht dem Benutzernamen, der vorgestellte Wert dem Kennwort.

BenutzernameKennwort
useruser
postgrespostgres
msfadminmsfadmin
serviceservice
sysbatman
klog123456789

Da john ohne Wörterbuch einen Bruteforce-Angriff gegen die Hashes durchführt (sogenannter Incremental Mode), kann es überraschen, dass bereits ein neunstelliges Kennwort gebrochen wurde.

Aufgrund der Reife der Software, arbeitet john die möglichen Kennwörter in sinnvollen Phasen ab. Begonnen wird mit dem Single Mode, dem der Benutzername und Informationen aus den weiteren Feldern der passwd zugrunde liegt. Dadurch werden bereits vier der Kennwörter gebrochen. Die weiteren beiden Kennwörter der Benutzer sys und klog werden mit Hilfe des mitgelieferten Wörterbuchs password.lst gefunden. Erst nach diesen beiden Phasen wird zu einem Bruteforce-Angriff übergegangen.

John the Ripper Multicore unter Ubuntu/Debian

Passwörter knacken für deren zugrundeliegenden Hash-Algorithmus es noch keinen GPU-Cracker gibt, ein kurzweiliger Spaß bei dem man eine Menge Zeit und eine Menge Strom verbrauchen kann. In unserem Labor steht ein kleines 16 Kern Monster, dass nicht nur virtuelle Server befeuern soll, sondern auch Passwörter knacken. Das geht mit Debian und Ubuntu ganz einfach.

1. Notwendige Pakete installieren

apt-get install libmpich2-dev mpich2

Die verfügbaren (öffentlichen) Patches für John the Ripper verwenden das Message Passing Interface um untereinander zu kommunizieren. Mit MPICH2 das als Paket vorhanden ist, ist man gut ausgerüstet, um auch später weitere Hosts hinzu zu fügen.

2. MPICH2 mit Minimal-Konfiguration einrichten

touch ~/.mpd.conf && echo "MPD_SECRETWORD=secret" > ~/.mpd.conf && chmod 600 ~/.mpd.conf

3. MPICH2 Cluster starten

mpdboot

4. John the Ripper mit MPI-Unterstützung herunterladen und kompilieren

wget http://www.bindshell.net/tools/johntheripper/john-1.7.2-bp17-mpi8.tar.gz
tar xzf john-1.7.2-bp17-mpi8.tar.gz && cd john-1.7.2-bp17-mpi8/ && make linux-x86-64
cd ../run/

Jetzt kann eine vorbereitete Benutzerliste in das run Verzeichnis kopiert werden. Zum Beispiel eine MD5-Liste ohne Salt im Format Username:Passwort.

5. Bruteforce Spaß!

mpiexec -np 16 ./john  --format=raw-MD5 benutzerliste_md5.txt | tee benutzerliste_md5_john-log.txt

Hier muss allerdings die Anzahl 16 durch die Anzahl der verfügbaren Kerne aus /proc/cpuinfo (+1 da dort von 0 an gezählt wird) ersetzt werden.