RickdiculouslyEasy – CTF Walkthrough

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

Da ich schon lange keine CTFs mehr gemacht habe, wollte ich mit etwas einfachem anfangen. Da sah mir RickdiculouslyEasy einfach genug und trotzdem vielversprechend aus.

Aufbau: Neben RickdiculouslyEasy benutze ich Kali, als Penetration Server. Beides läuft innerhalb Virtualbox unter Linux Mint. Die Kali VM und die RickdiculouslyEasy VM befinden sich im gleichen Netz. Sicherheitshalber kann nur die Kali VM mit dem Internet kommunizieren.

Anmerkung: Da ich festgestellt habe das ich mich ohne gute Dokumentation heillos verzettele, benutze ich Freeplane um den Überblick zu behalten. Das hilft mir ungemein Schritte nicht doppelt zu machen und Ideen nicht zu vergessen. Ich weiß natürlich, das Dokumentation vom Teufel ist 😉 und niemand es gerne tut, aber bei mir erhöht es deutlich den Spaßfaktor. Aber es ist natürlich kein muss um RickdiculouslyEasy zu knacken.

Mich würde interessieren, wie Ihr es mit Dokumentation handhabt und was Ihr dazu benutzt. Gerne in den Kommentaren!

So nun aber zum CTF hacken.

Schritt 1 – Ziel IP

Als erstes brauche ich die IP der RickdiculouslyEasy VM. Dazu benutze ich gerne netdiscover. nmap, ping o.ä. wären andere Möglichkeiten um die IP herauszufinden.

netdiscover

Die beiden ersten IPs sind Router und VM Host. Also bleibt nur noch 192.168.1.163 als RickdiculouslyEasy VM IP übrig.

Schritt 2 – Offene Ports

Als nächstes wüsste ich gerne, welche Services mir die VM anbietet. Dazu ist nmap natürlich das Tool der Wahl.

# nmap -T4 -A -p1-65535 192.168.1.163

 

nmap-services

Wau, direkt 2 Treffer und ein Bonus. Das geht richtig gut los. Der CTF Bauer weiß zu motivieren 😉

Aber der Reihe nach:

  • 21/tcp
    FTP Server der anonymes Login erlaubt und scheinbar ein Flag enthält.
  • 22/tcp
    SSH Server der etwas schräg aussieht. Den schaue ich mir später an.
  • 80/tcp
    Apache Web Server
  • 9090/tcp
    Noch ein Webserver. Cockpit! Noch nie davon gehört. Schaue ich mir auch später an.
  • 13337/tcp
    Keine Ahnung was das ist, aber ein Flag zu bekommen ohne wirklich was gemacht zu haben, da sagt man doch Danke. Die ersten 10 von 130 Punkten gefunden. Auch den Services werde ich mir später genauer anschauen.
FLAG:{TheyFoundMyBackDoorMorty}-10Points
  • 22222/tcp
    OpenSSH Server. Interessant! Auf dem SSH Port 22 läuft etwas komisches, aber auf 22222 läuft ein OpenSSH. Da hat man wohl Security by Obscurity betrieben und den SSH Port verbogen. Schaue ich mir auch später an.
  • 60000/tcp
    Auch hier läuft etwas interessantes, das mit „Welcome to Ricks half baked reverse shell…“ eine Reverse-Shell vorgaukelt. Das dürfte noch interessant werden.

Schritt 3 – Port 21

Wo fangen ich an? Am Besten wird der Reihe nach jedem Service einen Besuch abgestatten.

Als erstes ftp. Der Plan ist FLAG.txt runter zu laden und nachzusehen, was in pub steht.

ftp

Siehe da, das Flag lässt sich runter laden und voila es enthält auch, was der Name verspricht.

FLAG{Whoa this is unexpected} - 10 Points

Jetzt sind es schon 20 von 130 Punkten. Langsam wird’s was!

ftp-flag

Leider ist das Verzeichnis pub leer.

Schritt 4 – Port 80

Da ich für ssh bestimmt länger brauche, nehme ich mir erst mal die „Low hanging fruits“ vor.

Weiter geht es mit dem Apache auf Port 80. Der einfachste Test, ist die Seite im Browser aufzurufen. Interessantes Bild aber nichts zu klicken. Auch der Seiten Source ist eher unspektakulär. Ich könnte jetzt versuchen mit einem Spider z.B. dirb und einer geeigneten Wortliste alle Seiten zu finden, die der Webserver bereitstellt. Aber ich versuche erst mal mein Glück mit der robots.txt Datei.

# wget http://192.168.1.163/robots.txt

Eventuell steht da was interessantes drin.

robots

Eine Rootshell!?! Das wäre zu schön um wahr zu sein. Ist es auch. Sie funktioniert nicht.

Aber auch das tracertool sieht interessant aus.

tracer

Und jetzt mal ausprobieren, wie pingelig die Eingabeüberprüfung ist, sprich ob Command Injection funktioniert. Dazu habe ich einfach Semikolon ls eingegeben. Und siehe da Command Injection funktioniert.

tracer-semikolon

An dieser Stelle ließe sich wunderbar eine Reverse-Shell aufbauen. Ich wollte aber erst mit simplen Mitteln schauen, was der Webserver sonst noch hergibt. Daher habe ich einfach das ls verändert und bin damit im Verzeichnisbaum hin und her gewandert, um  dabei ziemlich schnell folgendes zu entdecken.

tracer-password

Dann wollen wir doch noch mal den Browser an schmeißen und nachschauen, ob FLAG.txt (http://192.168.1.163/passwords/FLAG.txt) ein Flag enthält und passwords.html (http://192.168.1.163/passwords/passwords.html) Passworte.

browser-flagVoila, wieder eines gefunden. Und da waren es schon 30 von 130.

FLAG{Yeah d- just don't do it.} - 10 Points

Wie sieht’s aus mit dem Passwort File.

browser-passwordDas wäre auch zu schön gewesen um wahr zu sein.

Aus Routine schaue ich mir den Source der Datei an. Manchmal findet man dort interessante Kommentare o.ä.

browser-sourceDas ist ja mal ein Volltreffer. Da hat doch jemand ein Passwort für irgend einen Account hinterlassen. Aber für welchen? Eine Liste mit Accounts wäre jetzt super. Klassischerweise stehen die auf UNIX System in der Datei /etc/passwd. Aber wie komme ich da dran.

Vielleicht hilft auch hier das tracertool von vorher.

Erstmal testen, ob die Datei /etc/passwd für den Webserver Benutzer lesbar ist.

passwd-ls.png

Klappt! Jetzt noch versuchen den Inhalt anzuzeigen.

passwd-catcat zeigt eine Katze. Nicht was ich erwartet habe. Irgendwas stimmt nicht mit dem cat. Versuchen wir einen anderen Weg. Wie wäre es mit tail.

passwd-tailsDas klappt ja super! Und was fällt ins Auge? Richtig, die drei Benutzer Konten für RickSanchez, Morty und Summer.

Summer? Da muss man nicht Sherlock Holmes sein, um einen Zusammenhang mit dem vorher gefunden Passwort winter herzustellen. Das wird dokumentiert um später getestet zu werden.

Das war erst einmal alles was Port 80 hergibt.

Schritt 5 – Port 9090

Auf Port 9090 scheint der Webserver cockpit zu laufen. Auch hier ist der Zugriff via Browser die erste Wahl.

cockpit

Und da fällt mir eine Flag direkt vor die Füße. Das war schon etwas arg einfach. Aber ich will mich nicht beschweren. Es geht auch anders … 😉

FLAG {There is no Zeus, in your face!} - 10 Points

Viel mehr konnte ich aus der Seite nicht herauskitzeln. Auch der Source ist nicht ergiebig, also war es das für Port 9090.

Schritt 6 – Port 13337

Der Port 13337 hat schon ein Flag beim nmap Scan gezeigt. Weil ich keine Ahnung habe was auf dem Port läuft, versuche ich mit netcat/nc eine Verbindung hinzubekommen.

# nc 192.168.1.163 13337

Aber mehr als das Flag gibt der Port nicht her.

netcat

FLAG:{TheyFoundMyBackDoorMorty}-10Points

Schritt 7 – Port 22222

Wir haben 3 User, ein Passwort und einen SSH Port. Was liegt näher als zu versuchen sich mit den Usern einzuloggen.

# ssh -l Summer -p 22222 192.168.1.163

 

ssh

Und drin bin ich! Gleich mal mit ls schauen, ob es was Interessantes gibt.

ssh-ls

Das sieht ganz nach einem Flag aus. Allerdings scheint cat nicht zu funktionieren. Wie auch im Browser behelfe ich mir hier mit tail. Da ich jetzt einen ssh Zugang habe, könnte ich mir aber auch ein funktionierendes cat von einer anderen Maschine hier her kopieren.

FLAG{Get off the high road Summer!} - 10 Points

Wenn ich richtig mit gerechnet habe sind das nun 60 von 130 Punkten. Das Ziel kommt näher.

Den Zugang werde ich bestimmt später noch brauchen, aber vorerst kümmere ich mich um den letzten offenen Port.

Schritt 8 – Port 60000

Wieder etwas unbekanntes. Das Tool der Wahl ist wieder netcat.

# nc 192.168.1.163 60000

 

60000

In der Tat, das  könnte eine vergessene Reverse Shell sein.

Erst mal etwas umschauen.

60000-ls

Und schon wieder ein Flag gefunden. Aber interessant sind auch die anderen Informationen. Wenn die Shell eine echte Shell ist, könnte das Programm auf dem Port als root User laufen und ein Arbeitsverzeichnis unterhalb /root haben. Das schreit förmlich nach höheren Privilegien, sprich Privilege Escalation. Da werde ich wohl später noch mal ran müssen.

FLAG{Flip the pickle Morty!} - 10 Points

Damit habe ich alle Port geprüft und die erste Hälfte der Punkte sind gefunden.

Schritt 9 – Userverzeichnisse

Da durch SSH ein lokaler Zugang zur VM besteht, bietet es sich an das Filesystem etwas genauer unter die Lupe zu nehmen. Naheliegend sind die schon gefunden Benutzer und ihre Home Verzeichnisse zu durchsuchen.

Als erstes muss Morty dran glauben. In das Verzeichnis gewechselt und den Inhalt angezeigt. Ein Zip und ein Bild. Das Zip verlangt ein Passwort, das ich (noch) nicht kenne. Schade!

morty

Das Bild ziehe ich lokal auf meinen Rechner, um es mir anzuschauen. Doch da sehe ich nichts interessantes. Ebenso zeigt mir exiftool nichts spannendes an. Letzte Hoffnung ist strings. Und siehe da, ganz am Anfang von Strings steht noch etwas, das zwar ungewöhnlich für ein Bild ist aber gut für mich. Und das sogar mit dem Hinweis, wozu das Passwort gehört.

morty-strings

Zurück zum Zip und das neue Passwort ausprobiert. Und schon klappt es auch mit dem Öffnen der Datei. Und wieder ist ein Flag gefunden. Diesmal für 20 Punkte. Allerdings sieht das Flag etwas anderes aus, als die die vorher gefunden wurden. Eventuell sollte ich mir das noch mal extra merken 😉

morty-unzip

FLAG: {131333} - 20 Points

Als nächstes ist RickSanchez an der Reihe. Gleiche Vorgehensweise.

rickNatürlich habe ich erst einmal /home/RickSanchez/ThisDoesntContainAnyFlags untersucht, aber dort ist wirklich kein Flag und nichs interessantes.

Aber in RICKS_SAFE ist eine Datei safe, die ich zwar lesen aber nicht ausführen darf. Die ziehe ich erst mal auf meinen lokalen Rechner, um sie dort laufen zu lassen.

Anmerkung: Das ist natürlich potentiell gefährlich, weil ich nicht weiß was das Programm macht. Aber da meine lokale Maschine auch eine VM ist, bin ich da etwas relaxter, weil ich die einfach wegwerfen bzw. löschen kann.

Anmerkung 2: Damit safe lokal läuft muss zumindest unter Linux Mint libmcrypt4 installiert werden.

# apt install libmcrypt4

Und safe verrät auch gleich, dass es Kommandozeilen Argumente braucht. Scheinbar wird eine Art Key oder Passwort benötigt. Warum also nicht die komische Nummer aus dem letzten Flag verwenden.

rick-safe

Ein Flag und ein Hinweis auf das Passwort von RickSanchez. Somit dürften wir 100 von 130 Punkten gefunden haben.

FLAG{And Awwwaaaaayyyy we Go!} - 20 Points

Schritt 10.1 – Es werde root

Da ich nichts mit dem Hinweis im letzten Flag anfangen konnte, habe ich mir einen alternativen Weg gesucht. uname -a zeigt den Kernel an (4.11.8). Damit habe ich einige Exploit Datenbanken durchsucht und cve-2017-16995 gefunden. Den Source habe ich lokal auf meiner Kali VM compiliert und auf die Ziel VM kopiert.

cve

Anschließend das Programm gestartet und schon war ich root. Damit „gehörte“ die VM jetzt mir 😉

cve-run

Schritt 10.2 – Es werde root – Bonus

Ich denke, der CTF Ersteller hat sich den Schritt anders vorgestellt. Und sicherlich wäre es für US Amerikaner, die gelegentlich Zeichentrick Serien sehen, schnell ersichtlich. Leider trifft bei mir keins von beiden zu.

Rick Sanchez und Morty sind die Namen zweier amerikanischer Comic Figuren ihre Band heißt „The Flesh Curtains“.

Mit dem Hinweis von vorher, müssen alle möglichen Passworte durchprobiert werden. Einfach geht das mit einer Kombination von crunch um Passwortlisten zu erstellen und hydra um die Passworte durch zu probieren. Das , (Komma) wird hierbei durch einen Großbuchstaben und das % (Prozent) durch eine Ziffer ersetzt.

# crunch 10 10  -t ,%Curtains > passworte.txt
# crunch 10 10  -t ,%Flesh > passworte.txt
# hydra -l RickSanchez -P passworte.txt  ssh://192.168.1.163:22222

 

cruch

Damit ist auch das Passwort für RickSanchez bekannt und dem Einloggen steht nichts mehr im Wege. RickSanchez darf sudo ausführen und sudo -l zeigt, das er alle Kommandos auf der Maschine ausführen darf.

Jetzt nur noch ein sudo su und ich bin root.

# ssh -l RickSanchez -p 22222 192.168.1.163
# sudo -l
# sudo su

 

sudo

Schritt 11 – Finale

Als nächstes wurde das Home Verzeichnis des root Users besucht und siehe da, ein Flag. Und dieses mal sogar mit 30 Punkten. cve-root

FLAG: {Ionic Defibrillator} - 30 points

Somit sind 130 Punkte zusammen und RickdiculouslyEasy ist geknackt.

Schlussbemerkung

Ein schönes CTF zum warm werden und auch für Anfänger. Durch die vielen Flags am Weg bleibt die Motivation erhalten und die Ausdauer wird nicht zu sehr strapaziert.

Über Kommentare, Fragen und Anregungen würde ich mich freuen. Gerne würde ich auch über alternative Lösungsweg von Euch hören.

Vielen Dank für Euer Interesse.

 

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