Wir beginnen mit der Identifizierung des Zielsystems im lokalen Netzwerk und der Analyse offener Ports und Dienste.
192.168.2.103 08:00:27:35:6d:67 PCS Systemtechnik GmbH
Analyse: Der Befehl `arp-scan -l` wird verwendet, um aktive Geräte im lokalen Netzwerksegment mittels ARP-Anfragen zu identifizieren.
Bewertung: Ein aktiver Host wurde unter der IP-Adresse `192.168.2.103` erfolgreich gefunden. Die MAC-Adresse (`08:00:27:35:6d:67`) und der Hersteller (`PCS Systemtechnik GmbH`) deuten auf eine virtuelle Maschine von Oracle VirtualBox hin.
Empfehlung (Pentester): Ziel-IP `192.168.2.103` notieren. Optional einen Hostnamen in `/etc/hosts` definieren.
Empfehlung (Admin):** Netzwerksegmentierung und -überwachung können zur Erkennung von Scans beitragen.
Wir definieren einen Hostnamen in der lokalen `/etc/hosts`-Datei.
192.168.2.103 min2.vln
Analyse: Der Hostname `min2.vln` wird der IP `192.168.2.103` in der lokalen Hosts-Datei zugeordnet.
Bewertung: Erleichtert die Ansprache des Ziels in nachfolgenden Schritten.
Empfehlung (Pentester): Den definierten Hostnamen verwenden.
Empfehlung (Admin):** Keine Aktion erforderlich.
Ein Nmap-Scan wird durchgeführt, um offene Ports und Dienste zu identifizieren.
Starting Nmap 7.94 ( https://nmap.org ) at 2023-09-19 15:58 CEST Nmap scan report for min2.vln (192.168.2.103) Host is up (0.00012s latency). Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.0 (protocol 2.0) | ssh-hostkey: | 3072 82:33:25:61:27:97:ea:4a:49:f5:76:a3:33:1c:ae:2b (RSA) | 256 ed:ca:f6:b9:b5:39:32:89:d0:a3:36:94:82:04:4a:e8 (ECDSA) |_ 256 26:79:15:2e:be:93:02:41:04:c9:ea:e8:05:16:d1:83 (ED25519) 3306/tcp open mysql? MAC Address: 08:00:27:35:6D:67 (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 TRACEROUTE HOP RTT ADDRESS 1 0.12 ms min2.vln (192.168.2.103)
Analyse: Nmap scannt alle TCP-Ports (`-p-`) mit SYN-Scan (`-sS`), Skripten (`-sC`), Versionserkennung (`-sV`), schnellem Timing (`-T5`), aggressiven Optionen (`-A`) und ohne Ping (`-Pn`).
Bewertung: Der Scan findet zwei offene Ports:
Empfehlung (Pentester): Untersuchen Sie Port 3306 genauer. Versuchen Sie eine MySQL-Verbindung, aber auch HTTP-Anfragen (mit `curl`, `nikto`, `gobuster`), da Nmap unsicher war. Versuchen Sie einen SSH-Login mit Standard-Credentials oder bereiten Sie Bruteforce vor.
Empfehlung (Admin):** Stellen Sie sicher, dass nur notwendige Ports offen sind. Wenn Port 3306 MySQL ist, beschränken Sie den Zugriff darauf. Aktualisieren Sie OpenSSH.
Wir filtern die Nmap-Ausgabe nach offenen Ports.
22/tcp open ssh OpenSSH 8.0 (protocol 2.0) 3306/tcp open mysql?
Analyse: Filtert die vorherige Nmap-Ausgabe nach offenen Ports.
Bewertung: Bestätigt die beiden offenen Ports 22 und 3306.
Empfehlung (Pentester): Fokus auf diese beiden Ports.
Empfehlung (Admin):** Notwendigkeit prüfen.
Wir untersuchen den ungewöhnlichen Dienst auf Port 3306 genauer, da Nmap unsicher war, ob es sich um MySQL handelt.
Versuch einer SSH-Verbindung mit einem geratenen Benutzernamen:
The authenticity of host '192.168.2.103 (192.168.2.103)' can't be established. ED25519 key fingerprint is SHA256:PcukSWKP5zAi6vR63sVmkI9NqxLr2FgQn1DTILwTpww. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.2.103' (ED25519) to the list of known hosts. potato@192.168.2.103's password:
Analyse: Versuch, sich als Benutzer `potato` via SSH anzumelden.
Bewertung: Der Versuch scheitert wahrscheinlich, da kein erfolgreicher Login gezeigt wird. Der Benutzername `potato` ist vermutlich falsch.
Empfehlung (Pentester): Bruteforce für SSH erfordert gültige Benutzernamen. Konzentrieren Sie sich auf Port 3306.
Empfehlung (Admin):** Verwenden Sie Key-basierte Authentifizierung für SSH.
Versuch einer MySQL-Verbindung zu Port 3306:
Analyse: Versuch, sich als `root` ohne Passwort mit dem MySQL-Server zu verbinden.
Bewertung: Der Befehl liefert keine Antwort oder einen nicht geloggten Fehler. Es scheint keine Standard-MySQL-Instanz zu sein, die auf Port 3306 antwortet.
Empfehlung (Pentester): Behandeln Sie Port 3306 als potenziellen HTTP-Dienst und verwenden Sie entsprechende Tools.
Empfehlung (Admin):** Untersuchen Sie, welcher Dienst tatsächlich auf Port 3306 läuft. Verwenden Sie Standardports für Dienste, um Verwirrung zu vermeiden.
Nikto-Scan gegen Port 3306:
- Nikto v2.5.0 + Target IP: 192.168.2.103 + Target Hostname: 192.168.2.103 + Target Port: 3306 + Start Time: 2023-09-19 16:05:53 (GMT2) + Server: No banner retrieved + /: Retrieved x-powered-by header: Kemal. + /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + No CGI Directories found (use '-C all' to force check all possible dirs) + 8102 requests: 1 error(s) and 3 item(s) reported on remote host + End Time: 2023-09-19 16:09:51 (GMT2) (238 seconds) + 1 host(s) tested
Analyse: Nikto wird explizit gegen Port 3306 ausgeführt.
Bewertung: **Wichtiger Fund!** Nikto empfängt HTTP-Antworten von Port 3306. Der `X-Powered-By`-Header gibt `Kemal` an. Kemal ist ein Webframework für die Programmiersprache Crystal. Es läuft also definitiv kein Standard-MySQL auf diesem Port, sondern eine Webanwendung, die mit Kemal entwickelt wurde.
Empfehlung (Pentester): Behandeln Sie Port 3306 als HTTP-Ziel. Verwenden Sie Gobuster, um nach Dateien und Verzeichnissen zu suchen. Recherchieren Sie nach bekannten Schwachstellen im Kemal-Framework oder in häufig damit verwendeten Komponenten.
Empfehlung (Admin):** Verwenden Sie Standardports für Dienste oder dokumentieren Sie Abweichungen klar. Halten Sie Webframeworks und deren Abhängigkeiten aktuell.
Gobuster-Scan gegen Port 3306:
http://min2.vln:3306/upload.html (Status: 200) [Size: 908]
Analyse: Gobuster scannt Port 3306 nach Webinhalten.
Bewertung: Findet eine einzige interessante Datei: `/upload.html`.
Empfehlung (Pentester): Rufen Sie `http://min2.vln:3306/upload.html` im Browser auf und untersuchen Sie die Funktionalität.
Empfehlung (Admin):** Entfernen Sie nicht benötigte Webseiten.
Wir untersuchen die gefundene Upload-Funktion auf Port 3306 und entdecken eine XXE-Schwachstelle.
Analyse der Upload-Seite:
Upload Choose an image to preview [Browse...] [Submit]
Analyse: Die Seite `/upload.html` präsentiert ein Formular zum Hochladen von Bildern.
Bewertung: Eine Upload-Funktion ist immer ein potenzieller Angriffsvektor.
Empfehlung (Pentester): Testen Sie den Upload mit verschiedenen Dateitypen. Prüfen Sie, wie die hochgeladene Datei verarbeitet wird. Achten Sie auf Hinweise im Quellcode oder in den HTTP-Requests/Responses (z.B. mit Burp Suite).
Empfehlung (Admin):** Upload-Funktionen sicher implementieren (Validierung, Speicherort, Rechte).
Analyse der Antwort nach einem Upload-Versuch (implizit):
I'm a teapot. image.svg:2: parser error : Start tag expected, '<' not found ^ Upload OK
Analyse: Nach dem Absenden des Upload-Formulars (vermutlich an `/upload`) wird der Status "I'm a teapot." (HTTP-Statuscode 418, oft als Scherz oder für spezifische API-Antworten verwendet) zurückgegeben, gefolgt von einem Parser-Fehler, der sich auf `image.svg` bezieht.
Bewertung: **Kritischer Hinweis!** Die Fehlermeldung deutet darauf hin, dass der Server versucht, die hochgeladene Datei als SVG (Scalable Vector Graphics), ein XML-basiertes Format, zu parsen. XML-Parser sind anfällig für XXE (XML External Entity)-Injection, wenn sie nicht sicher konfiguriert sind.
Empfehlung (Pentester): Konstruieren Sie einen SVG-Payload mit einer XXE-Entität, um zu versuchen, lokale Dateien vom Server zu lesen (z.B. `/etc/passwd`, `/etc/shadow`). Laden Sie diese manipulierte SVG-Datei hoch.
Empfehlung (Admin):** Konfigurieren Sie den XML-Parser sicher, um externe Entitäten zu deaktivieren oder zu beschränken. Validieren Sie Uploads serverseitig.
Erfolgreicher XXE-Exploit zum Lesen von `/etc/passwd`:
POST /upload HTTP/1.1 Host: min2.vln:3306 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: multipart/form-data; boundary=---------------------------20980738152178041928385758558 Content-Length: 529 Origin: http://min2.vln:3306 Connection: close Referer: http://min2.vln:3306/upload.html Upgrade-Insecure-Requests: 1 -----------------------------20980738152178041928385758558 Content-Disposition: form-data; name="svg"; filename="revshell.php.svg" Content-Type: image/svg+xml ]> -----------------------------20980738152178041928385758558--
HTTP/1.1 200 OK X-Powered-By: Kemal Content-Type: text/html Content-Length: 1650 ]> Upload OK
Analyse: Ein präparierter POST-Request wird gesendet. Die hochgeladene Datei (fälschlicherweise `revshell.php.svg` genannt, aber der Inhalt ist entscheidend) ist eine SVG-Datei, die eine externe XML-Entität (`xxe`) definiert. Diese Entität versucht, den Inhalt von `file:///etc/passwd` zu laden. Im SVG-Body wird die Entität `&xxe;` referenziert.
Bewertung: **Erfolg!** Die XXE-Injection funktioniert. Der Server parst die SVG-Datei, löst die externe Entität auf, liest `/etc/passwd` und fügt dessen Inhalt in das `
Empfehlung (Pentester): Nutzen Sie die XXE, um weitere sensible Dateien zu lesen:
Lesen von `/home/employee/.ash_history` via XXE:
]>
useradd -D bossdonttrackme -p superultrapass3 Upload OK
Analyse: Der XXE-Payload wird angepasst, um `/home/employee/.ash_history` zu lesen.
Bewertung: **Kritischer Fund!** Die Bash-History (oder Ash-History) des Benutzers `employee` enthält den Befehl `useradd -D bossdonttrackme -p superultrapass3`. Dies enthüllt ein weiteres potenzielles Benutzerkonto (`bossdonttrackme`) und dessen Passwort im Klartext (`superultrapass3`).
Empfehlung (Pentester): Versuchen Sie einen SSH-Login mit `employee`/`superultrapass3` und `bossdonttrackme`/`superultrapass3`.
Empfehlung (Admin):** Speichern Sie keine Passwörter in Befehlshistorien. Schulen Sie Benutzer im sicheren Umgang mit Passwörtern. Verwenden Sie sichere Methoden zur Benutzererstellung.
Wir verwenden die durch XXE aufgedeckten Zugangsdaten, um uns per SSH anzumelden.
SSH-Login-Versuch als `bossdonttrackme`:
bossdonttrackme@192.168.2.103's password: superultrapass3 Permission denied, please try again. bossdonttrackme@192.168.2.103's password: superultrapass3
Analyse: Versuch, sich als `bossdonttrackme` mit dem gefundenen Passwort anzumelden.
Bewertung: Fehlschlag (`Permission denied`). Entweder existiert der Benutzer nicht, das Passwort wurde geändert oder der Login ist aus anderen Gründen nicht erlaubt.
Empfehlung (Pentester): Versuchen Sie den Login als `employee`.
Empfehlung (Admin):** Entfernen Sie ungenutzte oder Test-Benutzerkonten.
SSH-Login-Versuch als `employee`:
employee@192.168.2.103's password: superultrapass3
_ ____
/\/\ (_)_ __ /\ /\__ _|___ \
/ \| | '_ \/ / \ \ \ / / __) |
/ /\/\ \ | | | \ \_/ /\ V / / __/
\/ \/_|_| |_|\___/ \_/ |_____|
minuv2$
Analyse: Versuch, sich als `employee` mit dem Passwort `superultrapass3` anzumelden.
Bewertung: Erfolg! Initial Access wurde erreicht. Wir haben eine Shell als Benutzer `employee`. Die Shell scheint eine `ash`-Shell zu sein.
Empfehlung (Pentester): Beginnen Sie die lokale Enumeration als `employee`.
Empfehlung (Admin):** Verwenden Sie starke, einzigartige Passwörter.
Wir untersuchen das System aus der Sicht des Benutzers `employee`.
Prüfung der `sudo`-Rechte:
-ash: sudo: not found
Analyse: Versuch, `sudo -l` auszuführen.
Bewertung: `sudo` ist entweder nicht installiert oder nicht im PATH des Benutzers. Dieser Vektor ist nicht direkt nutzbar.
Empfehlung (Pentester): Suchen Sie nach SUID-Binaries und anderen Privesc-Möglichkeiten.
Empfehlung (Admin):** Keine Aktion erforderlich.
Analyse eines Perl-Skripts im Home-Verzeichnis:
#!/usr/bin/perl use 5.010; use strict; use warnings; use XML::LibXML; # Korrigiert: XMLLibXML my $filename = 'image.svg'; my $dom = XML::LibXML->load_xml(location => $filename); # Korrigiert: XMLLibXML print $dom
Analyse: Ein Perl-Skript `main.pl` wird angezeigt. Es verwendet die `XML::LibXML`-Bibliothek, um eine Datei namens `image.svg` zu laden und zu parsen.
Bewertung: Dies bestätigt, dass auf dem System Perl und LibXML installiert sind und dass SVG/XML-Verarbeitung stattfindet, was die vorherige XXE-Schwachstelle erklärt.
Empfehlung (Pentester): Dieses Skript selbst bietet wahrscheinlich keinen direkten Privesc-Vektor, bestätigt aber die Technologie-Grundlage.
Empfehlung (Admin):** Entfernen Sie unnötige Skripte.
Prüfung von Cronjobs:
employee root
Analyse: Versuch, Cronjobs aufzulisten (der Befehl ist fehlerhaft, aber die Ausgabe deutet darauf hin, dass Cronjobs für `root` und `employee` existieren könnten).
Bewertung: Das Vorhandensein von Cronjobs, insbesondere für `root`, ist ein potenzieller Privesc-Vektor, wenn wir einen Cronjob manipulieren können (z.B. durch beschreibbare Skripte, die vom Cronjob aufgerufen werden).
Empfehlung (Pentester): Untersuchen Sie die System-Crontab (`/etc/crontab`) und die Verzeichnisse `/etc/cron.*` sowie die Benutzer-Crontabs (falls lesbar) auf schwach konfigurierte Jobs.
Empfehlung (Admin):** Stellen Sie sicher, dass Cronjobs sicher konfiguriert sind und keine übermäßigen Berechtigungen haben oder beschreibbare Skripte ausführen.
Suche nach SUID-Binaries:
/usr/bin/micro /bin/bbsuid
Analyse: Verschiedene `find`-Befehle suchen nach SUID-gesetzten Dateien.
Bewertung: **Kritischer Fund!** Das Binary `/usr/bin/micro` hat das SUID-Bit gesetzt. `micro` ist ein Texteditor. SUID-Editoren sind oft ein einfacher Weg zur Privilegienerweiterung, da sie erlauben, Dateien als Root zu bearbeiten (z.B. `/etc/shadow`, `/etc/sudoers`) oder eine Shell als Root zu spawnen. `/bin/bbsuid` ist weniger bekannt und erfordert weitere Recherche.
Empfehlung (Pentester): Nutzen Sie `/usr/bin/micro` zur Privilegienerweiterung. Suchen Sie auf GTFOBins nach bekannten Methoden für `micro` (z.B. Öffnen einer Shell, Bearbeiten kritischer Dateien).
Empfehlung (Admin):** **Dringend:** Entfernen Sie das SUID-Bit von `/usr/bin/micro` (`chmod u-s /usr/bin/micro`). Editoren sollten niemals SUID-Root sein.
Versuch, `/etc/passwd` mit `micro` zu bearbeiten (oder anzuzeigen):
Analyse: Es wird versucht, den Inhalt von `/etc/passwd` an `micro` zu pipen. Das ist keine typische Methode, um eine Datei mit einem Editor zu *bearbeiten*, sondern eher, um sie anzuzeigen oder potenziell eine Schwachstelle im Editor selbst auszunutzen, wenn er Daten von stdin liest und SUID ist.
Bewertung: Der direkte Effekt dieses Befehls ist unklar. Er führt jedoch im Log zum nächsten Schritt, der auf eine erfolgreiche Kompromittierung hindeutet.
Empfehlung (Pentester): Die Standardmethode wäre, `micro /etc/passwd` (zum Bearbeiten) oder `micro` gefolgt von `:!/bin/bash` (zum Spawnen einer Shell) auszuführen. Dieser Pipe-Befehl könnte eine spezifische Schwachstelle in dieser `micro`-Version ausnutzen.
Empfehlung (Admin):** SUID-Bit entfernen.
Dieser Abschnitt beschreibt die Ausnutzung des SUID-gesetzten Texteditors `/usr/bin/micro`, um Root-Rechte zu erlangen.
Kurzbeschreibung: Die lokale Enumeration ergab, dass `/usr/bin/micro` SUID-Root ist. SUID-Editoren können trivial zur Privilegienerweiterung missbraucht werden. Im vorliegenden Fall scheint ein Exploit oder eine spezifische Interaktion mit `micro` (möglicherweise durch das Pipen von Daten) den Wechsel zum Benutzer `ben` ohne Passwort ermöglicht zu haben, welcher dann Root-Rechte besitzt.
Voraussetzungen: Shell-Zugriff als Benutzer `employee`. SUID-gesetztes `/usr/bin/micro`.
Schritt 1: Ausnutzung von `/usr/bin/micro`
ben:$6$EZdVo4XckcU2BJJi$IanX1gZA.t1nk2EgRy1SBDPGa69dLrCqv3eznvqru062GCQ6Eh7VQyXI3lKgsdItq3F/uMWs/VU/TR2E1tzF0:0:0:root:/root:/bin/ashhminuv2:/var/log$
Analyse: Der Befehl `cat /etc/passwd | /usr/bin/micro` wird ausgeführt. Die Ausgabe ist ungewöhnlich: Sie zeigt eine Zeile, die wie ein Eintrag aus `/etc/shadow` oder `/etc/passwd` für einen Benutzer `ben` aussieht, aber mit Root-UID/GID (0:0) und Root-Home (`/root`). Direkt danach erscheint wieder der normale Prompt.
Bewertung: Dies deutet stark darauf hin, dass die Interaktion mit `micro` einen Exploit ausgelöst hat. Entweder wurde der Benutzer `ben` erstellt/modifiziert mit Root-Rechten oder es wurde eine Möglichkeit geschaffen, sich als `ben` anzumelden, der Root ist. Der angezeigte Hash ist wahrscheinlich der (irrelevante) Hash von `ben`.
Empfehlung (Pentester): Versuchen Sie, mit `su ben` den Benutzer zu wechseln. Da kein Passwort bekannt ist, deutet der Erfolg im nächsten Schritt darauf hin, dass der Exploit den Login ohne Passwort ermöglicht oder ein Standardpasswort gesetzt hat.
Empfehlung (Admin):** **Dringend:** SUID-Bit von `micro` entfernen!
Schritt 2: Wechsel zum kompromittierten Benutzer `ben`
Password:
Analyse: Es wird versucht, mit `su ben` den Benutzer zu wechseln. Im Log wird kein Passwort eingegeben, und der Prompt wechselt sofort zu `#`.
Bewertung: **Fantastisch, der Root-Zugriff war erfolgreich!** Der Exploit über `micro` hat es ermöglicht, direkt zu einer Root-Shell zu wechseln, indem der Benutzer `ben` (der Root-Rechte hat) ohne Passwort übernommen wurde.
Empfehlung (Pentester): Bestätigen Sie mit `id`. Sammeln Sie die Root-Flagge.
Empfehlung (Admin):** SUID-Bit von `micro` entfernen. Untersuchen Sie den Benutzer `ben`.
Schritt 3: Bestätigung der Root-Rechte und Flagge
uid=0(root) gid=0(root) groups=0(root)
flag.txt
_ ____
/\/\ (_)_ __ /\ /\__ _|___ \
/ \| | '_ \/ / \ \ \ / / __) |
/ /\/\ \ | | | \ \_/ /\ V / / __/
\/ \/_|_| |_|\___/ \_/ |_____|
# You got r00t!
flag{6d696e75326973617765736f6d65}
# I hope you had fun hacking this box, I tried to design this VM to be (a bit) different
# by having newer or not-so-common technologies and a minumal linux install.
#
# Please don't post the content below on Social Networks to let others do the challenge.
#
# As you know by now, the entry point is an XXE vulnerability that can be exploited by
# modifying an image. After that you can enumerate a user and the linux version to know
# that it uses a different file in its home dir.
# To read this you used a suspicious file permission on certain text editor.
# At least that's how it was planned ;)
# Let me know if you got here using another method!
#
# contact@8bitsec.io
# @_8bitsec
Analyse: `id` bestätigt Root. Im `/root`-Verzeichnis wird `flag.txt` gefunden und ausgelesen.
Bewertung: Root-Rechte bestätigt. Die Root-Flagge `flag{6d696e75326973617765736f6d65}` wurde erfolgreich gefunden. Die Notiz bestätigt den beabsichtigten Weg über XXE und das SUID-Binary (`micro`).
Empfehlung (Pentester): Test abgeschlossen.
Empfehlung (Admin):** Keine Aktion bezüglich der Flagge.
Risikobewertung:** Die Kombination aus einer XXE-Schwachstelle im SVG-Upload (Port 3306), die das Auslesen von Passwörtern aus der Shell-History ermöglichte, und einem SUID-gesetzten Texteditor (`/usr/bin/micro`) stellt ein kritisches Risiko dar und führte zur vollständigen Kompromittierung des Systems.
Empfehlungen (Zusammenfassung):**