Im vierten Blog-Post zur Plattform HackMyVM.eu geht es um die Level 31 – 40 des Venus-Labs.
Falls Ihr euch jetzt fragt, was HackMyVM und das Venus-Lab sind, empfehle ich euch, mit dem ersten Post der Reihe zu starten:
HackMyVM Venus Walkthroug 1/5.
Damit Ihr euch mit dem Lab verbinden könnt, müsst Ihr euch auf HackMyVM.eu registrieren. Nach der kostenlosen Registrierung öffnet einfache ein Terminal und verbindet euch mit ssh zum Lab. Die Zugangsdaten findet Ihr unter https://hackmyvm.eu/venus/
Level 31
Mission: The user veronica visits a lot http://localhost/waiting.php
Laut Missions-Text besucht Veronica oft die Seite http://localhost/waiting.php
Schauen wir doch mal mit dem Kommandozeilentool „curl“ nach, was sich dahinter verbirgt:
curl http://localhost/waiting.php
Im waiting for the user-agent PARADISE.
Der Server teilt uns mit, dass er auf einen Benutzer mit dem User-Agent-String „PARADISE“ wartet. Dann wollen wir ihm diesen doch geben. Mit dem Argument -A können wir curl anweisen, bei der Anfrage den entsprechenden User-Agent zu übermitteln:
curl -A PARADISE http://localhost/waiting.php
Als Antwort liefert der Server nun das Passwort für das nächste Level.
Level 32
Mission: The user veronica uses a lot the password from lana, so she created an alias.
Veronica nutzt das Passwort von Lana so oft, dass sie sich dafür ein Alias angelegt hat. Da ein Alias in der versteckten Datei ‚.bashrc‘ angelegt wird, schauen wir mal nach, ob diese Datei existiert:
ls -la
drwxr-x--- 2 root veronica 4096 Apr 7 05:55 .
drwxr-xr-x 1 root root 4096 Apr 7 05:55 ..
-rw-r--r-- 1 veronica veronica 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 veronica veronica 3559 Apr 7 06:00 .bashrc
-rw-r--r-- 1 veronica veronica 807 Aug 4 2021 .profile
-rw-r----- 1 root veronica 31 Apr 7 05:55 flagz.txt
-rw-r----- 1 root veronica 228 Apr 7 05:55 mission.txt
Super, die Datei ‚.bashrc‘ existiert. Nun suchen wir mittels ‚grep‘ in dieser Datei nach Vorkommen des Strings ‚lana‘:
cat .bashrc | grep lana
Und schon haben wir das Passwort für Level 33.
Level 33
Mission: The user noa loves to compress her things.
Da Noa gerne ihre Sachen komprimiert, schauen wir uns erstmal an, was für Dateien wir finden:
la -la
drwxr-x--- 2 root lana 4096 Apr 7 06:00 .
drwxr-xr-x 1 root root 4096 Apr 7 05:55 ..
-rw-r--r-- 1 lana lana 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 lana lana 3526 Aug 4 2021 .bashrc
-rw-r--r-- 1 lana lana 807 Aug 4 2021 .profile
-rw-r----- 1 root lana 31 Apr 7 05:55 flagz.txt
-rw-r----- 1 root lana 161 Apr 7 05:55 mission.txt
-rw-r----- 1 root lana 10240 Apr 7 06:00 zip.gz
Hier fällt die Datei ‚zip.gz‘ besonders ins Auge. Mit dem File-Befehl können wir heraus finden, um was für eine Datei es sich handelt:
file zip.gz
zip.gz: POSIX tar archive (GNU)
Wie zu erwarten handelt es sich um ein Tar-Archiv. Da wir im aktuellen Verzeichnis nur Lese-Rechte haben, legen wir im ‚/tmp‘ Ordner ein neues Verzeichnis an und entpacken das Archiv direkt dorthin:
mkdir /tmp/zip
tar -xf zip.gz -C /tmp/zip
Schauen wir uns mal an, was sich nun in dem neu angelegten Verzeichnis befindet:
ls -la /tmp/zip
drwxr-xr-x 3 lana lana 60 Apr 27 06:36 .
drwxr-x-wx 12 root root 380 Apr 27 06:33 ..
drwxr-xr-x 3 lana lana 60 Apr 27 06:36 pwned
Aha, es wurde ein neues Verzeichnis ‚pwned‘ angelegt. Und was befindet sich dort?
ls -la /tmp/zip/pwned
drwxr-xr-x 3 lana lana 60 Apr 27 06:36 .
drwxr-xr-x 3 lana lana 60 Apr 27 06:36 ..
drwxr-xr-x 2 lana lana 60 Apr 27 06:36 lana
Noch ein Verzeichnis. Diesmal mit dem Namen ‚lana‘. Dann schauen wir auch dort hinein:
ls -la /tmp/zip/pwned/lana
drwxr-xr-x 2 lana lana 60 Apr 27 06:36 .
drwxr-xr-x 3 lana lana 60 Apr 27 06:36 ..
-rw-r--r-- 1 lana lana 16 Apr 7 06:00 zip
Und hier finden wir eine Datei mit dem Namen ‚zip‘. Mittels ‚cat‘ geben wir den Inhalt der Datei aus:
cat /tmp/zip/pwned/lana/zip
Somit haben wir das Passwort für das nächste Level.
Level 34
Mission: The password of maia is surrounded by trash
Laut Missionstext ist das Passwort von Maia umgeben von Müll (trash). Schauen wir mal nach, was für Dateien wir finden:
la -la
-rw-r--r-- 1 noa noa 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 noa noa 3526 Aug 4 2021 .bashrc
-rw-r--r-- 1 noa noa 807 Aug 4 2021 .profile
-rw-r----- 1 root noa 31 Apr 7 05:55 flagz.txt
-rw-r----- 1 root noa 159 Apr 7 05:55 mission.txt
-rw-r----- 1 root noa 3818 Apr 7 06:00 trash
Es gibt eine verdächtige Datei mit dem Namen ‚trash‘. Mit dem ‚file‘ Befehl finden wir heraus, um was für eine Art Datei es sich habdelt:
file trash
trash: PGP Secret Key -
Es handelt sich also um einen PGP Secret Key. Dort erwartet man nicht, Strings zu finden. Also probieren wir genau das:
strings trash
Als Belohnung für diesen kühnen Versuch erhalten wir das Passwort für das nächste Level.
Level 35
Mission: The user gloria has forgotten the last 2 characters of her password … They only remember that they were 2 lowercase letters.
In diesem Level geht es also darum, die letzten beiden Stellen des Passworts für das nächste Level per Bruteforce heraus zu bekommen. Dabei bekommen wir noch den nützlichen Hinweis, dass es sich um zwei Kleinbuchstaben handelt. Somit haben wir 26×26 mögliche Kombinationen.
Als erstes lassen wir uns den bekannten Teil des Passwortes ausgeben:
ls -la
drwxr-x--- 2 root maia 4096 Apr 7 06:00 .
drwxr-xr-x 1 root root 4096 Apr 7 05:55 ..
-rw-r--r-- 1 maia maia 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 maia maia 3526 Aug 4 2021 .bashrc
-rw-r--r-- 1 maia maia 807 Aug 4 2021 .profile
-rw-r----- 1 root maia 31 Apr 7 05:55 flagz.txt
-rw-r----- 1 root maia 16 Apr 7 06:00 forget
-rw-r----- 1 root maia 317 Apr 7 05:55 mission.txt
cat forget
v7xUVE2e5bjUc??
Im zweiten Schritt schreiben wir uns ein kleines Python-Script welches uns alle möglichen Kombinationen in die Datei ‚pass.txt‘ schreibt:
import string
prefix = "v7xUVE2e5bjUc"
lower = string.ascii_lowercase
with open('pass.txt', 'w') as password:
for i in lower:
for j in lower:
password.write(prefix+i+j+"\n")
Mit dieser Datei und dem Kommandozeilen-Tool ‚hydra‘ starten wir nun den Bruteforce-Angriff:
hydra -l gloria -P pass.txt ssh://venus.hackmyvm.eu:5000
Durch die relativ kleine Anzahl an möglichen Kombinationen (maximal 676 Versuche), liefert uns ‚hydra‘ ziemlich schnell das Passwort für das nächste Level.
Level 36
Mission: User alora likes drawings, that’s why she saved her password as …
Alora mag also Zeichnungen und hat ihr passwort anscheinend als solche gespeichert. Mal sehen, was wir für Dateien finden:
ls -la
drwxr-x--- 2 root gloria 4096 Apr 7 06:00 .
drwxr-xr-x 1 root root 4096 Apr 7 05:55 ..
-rw-r--r-- 1 gloria gloria 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 gloria gloria 3526 Aug 4 2021 .bashrc
-rw-r--r-- 1 gloria gloria 807 Aug 4 2021 .profile
-rw-r----- 1 root gloria 31 Apr 7 05:55 flagz.txt
-rw-r----- 1 root gloria 1713 Apr 7 06:00 image
-rw-r----- 1 root gloria 222 Apr 7 05:55 mission.txt
file image
image: ASCII text
Es gibt eine Datei mit dem Namen ‚image‘, wenn wir uns jedoch anschauen, um was für eine Datei es sich dabei handelt, stellen wir fest, dass es sich um eine Textdatei handelt. Dann schauen wir uns mal den Inhalt an:
cat image
Offensichtlich handelt es sich um einen QR-Code. Ich habe versucht, diesen mit meinem Smartphone zu lesen, was aber nicht geklappt hat. Also habe ich mich dazu entschlossen, ein kleines Python-Script zu erstellen, um den QR Code „lesbarer“ zu machen:
with open('image', 'r') as img:
lines = img.readlines()
for l in lines:
print(l.replace('#', chr(0x2588)), end='')
Diesen QR Code hat mein Smartphone auch direkt als solchen erkannt und meine Mühe mit dem Passwort für das nächste Level belohnt.
Level 37
Mission: User Julie has created an iso with her password.
Das Passwort für das nächste Level befindet sich in einem ISO Image
ls -la
drwxr-x--- 2 root alora 4096 Apr 7 06:00 .
drwxr-xr-x 1 root root 4096 Apr 7 05:55 ..
-rw-r--r-- 1 alora alora 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 alora alora 3526 Aug 4 2021 .bashrc
-rw-r--r-- 1 alora alora 807 Aug 4 2021 .profile
-rw-r----- 1 root alora 31 Apr 7 05:55 flagz.txt
-rw-r----- 1 root alora 172 Apr 7 05:55 mission.txt
-rw-r----- 1 root alora 360448 Apr 7 06:00 music.iso
file music.iso
music.iso: ISO 9660 CD-ROM filesystem data 'CDROM'
Als erstes laden wir uns die Datei ‚music.iso‘ per ’scp‘ in das aktuelle Verzeichnis herunter:
scp -P 5000 alora@venus.hackmyvm.eu:/pwned/alora/music.iso ./
Nun legen wir im Ordner ‚/media‘ ein neues Verzeichnis mit dem Namen ‚iso‘ an, in das wir die ISO-Datei mounten:
sudo mkdir /media/iso
sudo mount -o loop ./music.iso /media/iso
Nun lassen wir uns den Inhalt dieses Verzeichnisses anzeigen:
ls -la /media/iso
-r--r--r-- 1 root root 208 Apr 7 07:00 music.zip
Wenn alles geklappt hat, bekommen wir die Datei ‚music.zip‘ angezeigt. Diese müssen wir nun entpacken. Da wir in dem Verzeichnis jedoch nur lese-Rechte haben, entpacken wir die Datei in unser aktuelles Verzeichnis:
unzip music.zip -d ./
Archive: music.zip
extracting: pwned/alora/music.txt
Jetzt können wir uns den Inhalt von ‚pwned/alora/music.txt‘ anzeigen lassen und bekommen das Passwort für das nächste Level. Aber wir müssen noch das gemountete Image auswerfen und das dafür angelegte Verzeichnis löschen:
cat pwned/alora/music.txt
sudo umount /media/iso
sudo rm -r /mdeia/iso
Level 38
Mission: The user irene believes that the beauty is in the difference.
In diesem Level geht es darum, zwei Dateien zu vergleichen und den Unterschied der beiden Dateien heraus zu finden. Also schauen wir uns erstmal an, welche Dateien wir haben:
ls -la
drwxr-x--- 2 root julie 4096 Apr 7 06:00 .
drwxr-xr-x 1 root root 4096 Apr 7 05:55 ..
-rw-r--r-- 1 julie julie 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 julie julie 3526 Aug 4 2021 .bashrc
-rw-r--r-- 1 julie julie 807 Aug 4 2021 .profile
-rw-r----- 1 root julie 4802 Apr 7 06:00 1.txt
-rw-r----- 1 root julie 4802 Apr 7 06:00 2.txt
-rw-r----- 1 root julie 31 Apr 7 05:55 flagz.txt
-rw-r----- 1 root julie 192 Apr 7 05:55 mission.txt
Es ist ziemlich offensichtlich, dass wir die Dateien ‚1.txt‘ und ‚2.txt‘ miteinander Vergleichen sollen. Zum glück bringt Linux ein Kommandozeilen-Tool für genau diesen Zweck mit:
diff 1.txt 2.txt
Der Befehl liefert uns zwei Strings, die sich in unterscheiden. Einer davon ist das Passwort für das nächste Level.
Level 39
Mission: The user adela has lent her password to irene.
Dieser etwas kryptisch anmutende Missionstext gibt uns wenig Hinweise darauf, worin die Aufgabe in diesem Level besteht. Also schauen wir erstmal, was wir für Dateien haben:
ls -la
drwxr-x--- 2 root irene 4096 Apr 7 06:00 .
drwxr-xr-x 1 root root 4096 Apr 7 05:55 ..
-rw-r--r-- 1 irene irene 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 irene irene 3526 Aug 4 2021 .bashrc
-rw-r--r-- 1 irene irene 807 Aug 4 2021 .profile
-rw-r----- 1 root irene 31 Apr 7 05:55 flagz.txt
-rw-r----- 1 root irene 1679 Apr 7 06:00 id_rsa.pem
-rw-r----- 1 root irene 451 Apr 7 06:00 id_rsa.pub
-rw-r----- 1 root irene 178 Apr 7 05:55 mission.txt
-rw-r----- 1 root irene 256 Apr 7 06:00 pass.enc
Wir haben einen Public- und einen Private RSA Key sowie eine Datei ‚pass.enc‘. Somit liegt nahe, dass sich das Passwort für das nächste Level in RSA verschlüsselter Form in der Datei ‚pass.enc‘ befindet. Also benutzen wir das Tool ‚openssl‘ um diese Datei mit dem Private Key zu entschlüsseln:
openssl rsautl -decrypt -inkey id_rsa.pem -in pass.enc
Schon haben wir das Passwort für das nächste Level.
Level 40
MIssion: User sky has saved her password to something that can be listened to.
Der Missionstext zu diesem Level auch sehr kryptisch gehalten. Also schauen wir erstmal nach, was wir für Dateien haben:
la -la
drwxr-x--- 2 root adela 4096 Apr 7 06:00 .
drwxr-xr-x 1 root root 4096 Apr 7 05:55 ..
-rw-r--r-- 1 adela adela 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 adela adela 3526 Aug 4 2021 .bashrc
-rw-r--r-- 1 adela adela 807 Aug 4 2021 .profile
-rw-r----- 1 root adela 31 Apr 7 05:55 flagz.txt
-rw-r----- 1 root adela 213 Apr 7 05:55 mission.txt
-rw-r----- 1 root adela 44 Apr 7 06:00 wtf
Hier fällt die Datei ‚wtf‘ ins Auge. Um was für einen Dateityp handelt es sich?
file wtf
wtf: ASCII text
Also eine Textdatei. Wenn wir uns den Inhalt anzeigen lassen, sollten wir ein bestimmtes Muster erkennen:
cat wtf
.--. .- .--. .- .--. .- .-. .- -.. .. ... .
Das geschulte Auge erkennt sofort, dass es sich um Morse Code handelt.
Wem es zu aufwändig ist, diesen Code per Stift und Papier zu entschlüsseln, kann das bequem Online unter https://morsecode.world/international/translator.html erledigen und hat somit das Passwort für das nächste Level.
Das waren die Level 31 – 40 des Venus-Labs auf HackMyVM.eu
Ich hoffe, ich konnte euch mit dem einen oder anderen Level weiter helfen.