Zum Inhalt springen
Startseite » HackMyVM Venus Walkthrough 4/5

HackMyVM Venus Walkthrough 4/5

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/

HackMyVM Venus
HackMyVM.eu Venus Lab

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
QR Code ASCII
ASCII QR Code

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='')
QR-Code optimized
Optimierter QR Code

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.

Schlagwörter:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert