Wir starten mit der Identifizierung des Ziels im lokalen Netzwerk und einem grundlegenden Portscan.
192.168.2.114 08:00:27:31:cb:df PCS Systemtechnik GmbH
Analyse: Der Befehl `arp-scan -l` sendet ARP-Anfragen, um aktive Geräte im lokalen Netzwerk zu finden.
Bewertung: Erfolgreich. Ein Gerät mit der IP `192.168.2.114` wurde gefunden. Die MAC-Adresse (`08:00:27:31:cb:df`) und der Hersteller (`PCS Systemtechnik GmbH`) deuten auf eine Oracle VirtualBox VM hin.
Empfehlung (Pentester): Ziel-IP notieren. Optional einen Hostnamen in `/etc/hosts` eintragen.
Empfehlung (Admin): Netzwerksegmentierung und -überwachung können zur Erkennung beitragen.
Wir führen einen umfassenden Nmap-Scan durch, um offene Ports, Dienste und Betriebssysteminformationen zu sammeln.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-29 00:28 CEST Nmap scan report for ubuntu (192.168.2.114) Host is up (0.00047s latency). Not shown: 65532 closed tcp ports (reset) PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) |_http-title: Welcome to the land of pwnland |_http-server-header: Apache/2.4.41 (Ubuntu) 3306/tcp open mysql MySQL 8.0.25-0ubuntu0.20.04.1 | mysql-info: | Protocol: 10 | Version: 8.0.25-0ubuntu0.20.04.1 | Thread ID: 40 | Capabilities flags: 65535 | Some Capabilities: SupportsLoadDataLocal, SwitchToSSLAfterHandshake, Support41Auth, ODBCClient, IgnoreSpaceBeforeParenthesis, Speaks41ProtocolOld, IgnoreSigpipes, SupportsTransactions, FoundRows, ConnectWithDatabase, InteractiveClient, LongColumnFlag, DontAllowDatabaseTableColumn, Speaks41ProtocolNew, SupportsCompression, LongPassword, SupportsAuthPlugins, SupportsMultipleResults, SupportsMultipleStatments | Status: Autocommit | Salt: W8\x13'51UeK"v[-p3Vhl@c |_ Auth Plugin Name: caching_sha2_password | ssl-cert: Subject: commonName=MySQL_Server_8.0.25_Auto_Generated_Server_Certificate | Not valid before: 2021-07-03T00:33:15 |_Not valid after: 2031-07-01T00:33:15 |_ssl-date: TLS randomness does not represent time 33060/tcp open mysqlx? | fingerprint-strings: | DNSStatusRequestTCP, LDAPSearchReq, NotesRPC, SSLSessionReq, TLSSessionReq, X11Probe, afp: | Invalid message" | HY000 | LDAPBindReq: | *Parse error unserializing protobuf message" | HY000 | oracle-tns: | Invalid message-frame." |_ HY000 MAC Address: 08:00:27:31:CB:DF (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 TRACEROUTE HOP RTT ADDRESS 1 0.47 ms ubuntu (192.168.2.114)
Analyse: `nmap` mit Optionen für SYN-Scan (`-sS`), Standard-Skripte (`-sC`), schnelles Timing (`-T5`), OS-Erkennung (`-O`) und Aggressivität (`-A`) gegen alle TCP-Ports (`-p-`).
Bewertung: Der Scan identifiziert drei offene Ports:
Empfehlung (Pentester): Untersuchen Sie den Webserver (Port 80) auf Inhalte und Schwachstellen. Versuchen Sie, sich mit der MySQL-Datenbank (Port 3306) zu verbinden (Standard-Passwörter? Anonym? Gefundene Credentials?). Recherchieren Sie MySQL X Protocol (Port 33060), obwohl es weniger häufig ein direkter Vektor ist.
Empfehlung (Admin): Aktualisieren Sie Apache und MySQL. Beschränken Sie den Netzwerkzugriff auf die MySQL-Ports (3306, 33060) nur auf notwendige Hosts. Verwenden Sie starke Datenbank-Passwörter.
Wir filtern die offenen Ports zur Übersicht.
80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) 3306/tcp open mysql MySQL 8.0.25-0ubuntu0.20.04.1 33060/tcp open mysqlx?
Analyse: Filtert die Nmap-Ausgabe nach offenen Ports.
Bewertung: Bestätigt die drei offenen Ports 80, 3306 und 33060.
Empfehlung (Pentester): Klare Übersicht der zu untersuchenden Dienste.
Empfehlung (Admin): Notwendigkeit der offenen Ports prüfen.
Ein Nikto-Scan wird gegen den Webserver durchgeführt.
- Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 192.168.2.114 + Target Hostname: 192.168.2.114 + Target Port: 80 + Start Time: 2023-05-29 00:28:45 (GMT2) --------------------------------------------------------------------------- + Server: Apache/2.4.41 (Ubuntu) + /: 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) + /: Server may leak inodes via ETags, header found with file /, inode: 5cc0, size: 5c63607241df0, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 + Apache/2.4.41 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch. + OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD . + 8103 requests: 0 error(s) and 5 item(s) reported on remote host + End Time: 2023-05-29 00:29:09 (GMT2) (24 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
Analyse: `nikto` scannt den Webserver auf Port 80.
Bewertung: Bestätigt die veraltete Apache-Version (2.4.41), fehlende Security Header und das ETag-Leak. Keine spezifischen Verzeichnisse oder Dateien wurden gefunden, was darauf hindeutet, dass die Webseite möglicherweise sehr einfach ist oder Nikto keine bekannten Muster erkannt hat.
Empfehlung (Pentester): Konzentrieren Sie sich auf die manuelle Untersuchung der Webseite und verwenden Sie Tools wie Gobuster zur Verzeichnis-/Datei-Enumeration.
Empfehlung (Admin): Aktualisieren Sie Apache. Implementieren Sie Security Header.
Wir fügen einen Eintrag zur lokalen Hosts-Datei hinzu.
192.168.2.114 hackmeplease.hmv
Analyse: Ordnet `hackmeplease.hmv` der IP `192.168.2.114` lokal zu.
Bewertung: Erleichtert die Ansprache.
Empfehlung (Pentester): Hostnamen verwenden.
Empfehlung (Admin): Keine Aktion.
Wir untersuchen den Webserver auf Port 80 weiter.
Analyse des Quellcodes der Startseite:
Analyse: Der HTML-Quellcode der Startseite wird untersucht.
Bewertung: Der Kommentar enthüllt den Namen des verwendeten Templates ("Moonlight Template") und einen Link zur Quelle. Dies könnte nützlich sein, um Standardpfade oder bekannte Schwachstellen des Templates zu finden, ist aber meist von geringer Priorität.
Empfehlung (Pentester): Notieren Sie den Template-Namen für eventuelle spätere Recherchen. Konzentrieren Sie sich auf die Verzeichnis-Enumeration.
Empfehlung (Admin): Entfernen Sie unnötige Kommentare aus dem Produktionscode.
Wir führen einen Gobuster-Scan durch, um nach Verzeichnissen und Dateien zu suchen.
=============================================================== http://192.168.2.114/index.html (Status: 200) [Size: 23744] http://192.168.2.114/img (Status: 301) [Size: 312] [--> http://192.168.2.114/img/] http://192.168.2.114/css (Status: 301) [Size: 312] [--> http://192.168.2.114/css/] http://192.168.2.114/js (Status: 301) [Size: 311] [--> http://192.168.2.114/js/] http://192.168.2.114/fonts (Status: 301) [Size: 314] [--> http://192.168.2.114/fonts/] ===============================================================
Analyse: Gobuster sucht nach gängigen Verzeichnissen und Dateien basierend auf einer Wortliste und Erweiterungen.
Bewertung: Findet nur Standard-Asset-Verzeichnisse (`img`, `css`, `js`, `fonts`), die oft mit Webseiten-Templates einhergehen. Keine Anwendungsverzeichnisse oder verdächtigen Dateien auf dieser Ebene gefunden.
Empfehlung (Pentester): Untersuchen Sie die Inhalte der gefundenen Verzeichnisse, insbesondere der JS-Dateien, auf Hinweise.
Empfehlung (Admin): Keine spezifische Aktion.
Zugriffsversuch auf ein gefundenes Verzeichnis:
Forbidden You don't have permission to access this resource. Apache/2.4.41 (Ubuntu) Server at hackmeplease.hmv Port 80
Analyse: Versuch, das Verzeichnis `/css/fonts/` (oder ein ähnliches von Gobuster gefundenes) direkt aufzurufen.
Bewertung: Der Zugriff wird verweigert (Status 403 Forbidden). Directory Listing ist für dieses Verzeichnis deaktiviert.
Empfehlung (Pentester): Bestätigt, dass Directory Listing nicht überall aktiv ist. Fokus auf spezifische Dateien oder andere Verzeichnisse.
Empfehlung (Admin): Korrekte Konfiguration (Directory Listing sollte deaktiviert sein).
Analyse des Quellcodes einer JavaScript-Datei:
// give active class to first link //make sure this js file is same as installed app on our server endpoint: /seeddms51x/seeddms-5.1.22/ $($('nav a')[0]).addClass('active');
Analyse: Untersuchung des Inhalts der Datei `main.js`.
Bewertung: **Kritischer Fund!** Ein Kommentar im JavaScript-Code enthüllt explizit den Pfad zu einer Anwendung (`/seeddms51x/seeddms-5.1.22/`) und nennt die Anwendung (SeedDMS) sowie die Version (5.1.22). Dies ist ein wichtiges Informationsleck.
Empfehlung (Pentester): Navigieren Sie zu `http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/`. Recherchieren Sie nach bekannten Schwachstellen für SeedDMS 5.1.22. Führen Sie Gobuster gegen diesen neuen Pfad aus.
Empfehlung (Admin): Entfernen Sie sensible Informationen wie Pfade oder Anwendungsversionen aus Kommentaren in öffentlich zugänglichen Dateien (HTML, CSS, JS).
Wir führen Gobuster gegen den neu entdeckten SeedDMS-Pfad aus.
=============================================================== http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/index.php (Status: 302) [Size: 0] [--> /seeddms51x/seeddms-5.1.22/out/out.ViewFolder.php] http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/doc (Status: 301) [Size: 344] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/doc/] http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/out (Status: 301) [Size: 344] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/out/] http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/install (Status: 301) [Size: 348] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/install/] http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/languages (Status: 301) [Size: 350] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/languages/] http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/styles (Status: 301) [Size: 347] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/styles/] http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/inc (Status: 301) [Size: 344] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/inc/] http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/utils (Status: 301) [Size: 346] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/utils/] http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/views (Status: 301) [Size: 346] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/views/] http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/op (Status: 301) [Size: 343] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/op/] ===============================================================
Analyse: Gobuster scannt das spezifische Anwendungsverzeichnis `/seeddms51x/seeddms-5.1.22/`.
Bewertung: Findet die erwartete Verzeichnisstruktur einer SeedDMS-Installation. Die `index.php` leitet auf `out/out.ViewFolder.php` weiter, was wahrscheinlich die Hauptansicht nach dem Login ist. Das `/install/`-Verzeichnis ist vorhanden und könnte interessant sein.
Empfehlung (Pentester): Rufen Sie die Login-Seite auf (vermutlich unter `/out/out.Login.php`, wie im nächsten Schritt gezeigt). Überprüfen Sie das `/install/`-Verzeichnis auf Konfigurationsreste oder Hinweise.
Empfehlung (Admin): Entfernen Sie das `/install/`-Verzeichnis nach Abschluss der Installation.
Zugriff auf die SeedDMS-Loginseite:
URL: http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/out/out.Login.php?referuri=%2Fseeddms51x%2Fseeddms-5.1.22%2Fout%2Fout.ViewFolder.php This is a classified area. Access is permitted only to authorized personnel. Any violation will be prosecuted according to the national and international laws. SeedDMS free document management system - www.seeddms.org
Analyse: Die Login-Seite der SeedDMS-Anwendung wird aufgerufen.
Bewertung: Bestätigt den Zugang zur Anwendung. Standard-Login-Maske.
Empfehlung (Pentester): Suchen Sie nach Standard-Zugangsdaten für SeedDMS 5.1.22 (`admin/admin`? `seeddms/seeddms`?). Versuchen Sie Brute-Force, falls Benutzernamen bekannt sind. Suchen Sie nach Exploits für diese Version (RCE, LFI, SQLi?).
Empfehlung (Admin): Stellen Sie sicher, dass keine Standard-Zugangsdaten verwendet werden. Halten Sie SeedDMS aktuell.
Wir scannen das übergeordnete Verzeichnis `/seeddms51x/`.
=============================================================== http://hackmeplease.hmv/seeddms51x/data (Status: 301) [Size: 330] [--> http://hackmeplease.hmv/seeddms51x/data/] http://hackmeplease.hmv/seeddms51x/www (Status: 301) [Size: 329] [--> http://hackmeplease.hmv/seeddms51x/www/] http://hackmeplease.hmv/seeddms51x/conf (Status: 301) [Size: 330] [--> http://hackmeplease.hmv/seeddms51x/conf/] http://hackmeplease.hmv/seeddms51x/pear (Status: 301) [Size: 330] [--> http://hackmeplease.hmv/seeddms51x/pear/] ===============================================================
Analyse: Gobuster scannt das Verzeichnis `/seeddms51x/`, das die eigentliche Anwendung enthält.
Bewertung: Findet wichtige Verzeichnisse wie `data` (enthält wahrscheinlich hochgeladene Dokumente), `www` (Webroot?) und vor allem `conf` (Konfigurationsverzeichnis).
Empfehlung (Pentester): Untersuchen Sie das `conf`-Verzeichnis. Suchen Sie nach Konfigurationsdateien, insbesondere `settings.xml` oder ähnlichem.
Empfehlung (Admin): Beschränken Sie den Web-Zugriff auf Konfigurations- und Datenverzeichnisse (z.B. durch `.htaccess` oder Apache-Konfiguration).
Untersuchung der Konfigurationsdatei `settings.xml`:
seeddms" dbPass="seeddms" doNotCheckVersion="false">
Analyse: Der Inhalt der öffentlich zugänglichen `settings.xml`-Datei wird untersucht.
Bewertung: **Kritischer Fund!** Die Datei enthält die Zugangsdaten für die MySQL-Datenbank im Klartext: Benutzer `seeddms`, Passwort `seeddms`, Datenbank `seeddms` auf `localhost`.
Empfehlung (Pentester): Verwenden Sie diese Zugangsdaten, um sich mit dem MySQL-Dienst auf Port 3306 zu verbinden.
Empfehlung (Admin): Speichern Sie niemals Zugangsdaten im Klartext in Konfigurationsdateien, die über das Web zugänglich sind. Beschränken Sie den Zugriff auf Konfigurationsdateien.
Wir nutzen die gefundenen Datenbank-Zugangsdaten, um uns mit MySQL zu verbinden und nach weiteren Informationen zu suchen.
Enter password: seeddms
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 104
Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
Analyse: Verbindung zum MySQL-Server auf `hackmeplease.hmv` (Port 3306) als Benutzer `seeddms` mit dem Passwort `seeddms`.
Bewertung: Erfolgreicher Login zur Datenbank.
Empfehlung (Pentester): Enumerieren Sie Datenbanken, Tabellen und Benutzerdaten.
Empfehlung (Admin): Verwenden Sie starke, einzigartige Datenbank-Passwörter.
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | seeddms | | sys | +--------------------+ 5 rows in set (0.003 sec)
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
+------------------------------+ | Tables_in_seeddms | +------------------------------+ | tblACLs | | tblAttributeDefinitions | // ... (viele SeedDMS Tabellen) ... | tblUsers | | tblVersion | // ... (weitere SeedDMS Tabellen) ... | users | // <-- Interessant! +------------------------------+ 43 rows in set (0.001 sec)
+-------------+---------------------+--------------------+-----------------+
| Employee_id | Employee_first_name | Employee_last_name | Employee_passwd |
+-------------+---------------------+--------------------+-----------------+
| 1 | saket | saurav | Saket@#$1337 |
+-------------+---------------------+--------------------+-----------------+
1 row in set (0.001 sec)
Analyse: Wir listen die Datenbanken auf, wählen die `seeddms`-Datenbank aus und listen deren Tabellen auf. Neben den Standard-SeedDMS-Tabellen (`tblUsers` etc.) fällt eine zusätzliche Tabelle namens `users` auf. Wir fragen den Inhalt dieser `users`-Tabelle ab.
Bewertung: **Kritischer Fund!** Die Tabelle `users` scheint benutzerdefiniert zu sein und enthält Klartext-Zugangsdaten für einen Benutzer namens `saket` mit dem Passwort `Saket@#$1337`. Dies sind wahrscheinlich keine SeedDMS-Benutzer, sondern könnten Systembenutzer sein.
Empfehlung (Pentester): Versuchen Sie, sich mit `saket` / `Saket@#$1337` per SSH (Port 22) anzumelden. Überprüfen Sie auch die Tabelle `tblUsers` auf SeedDMS-spezifische Benutzer (z.B. `admin`).
Empfehlung (Admin): Speichern Sie niemals Klartext-Passwörter in Datenbanken. Verwenden Sie stattdessen sichere Hash-Verfahren (z.B. bcrypt, Argon2). Entfernen Sie unnötige oder Test-Tabellen wie `users`.
Versuch, das gefundene Passwort für `saket` mit Hydra gegen SSH zu testen (scheitert):
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway). Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-05-29 01:18:27 [WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4 [DATA] max 64 tasks per 1 server, overall 64 tasks, 14344399 login tries (l:1/p:14344399), ~224132 tries per task [DATA] attacking ssh://hackmeplease.hmv:22/ [ERROR] could not connect to ssh://192.168.2.114:22 - Connection refused
Analyse: Hydra versucht, das Passwort für `saket` via SSH zu bruteforcen, verwendet aber fälschlicherweise `rockyou.txt` statt des gefundenen Passworts. Der Versuch scheitert zudem mit "Connection refused".
Bewertung: Der Hydra-Aufruf ist fehlerhaft (falsche Passwortliste) und das Ergebnis "Connection refused" deutet auf ein Netzwerkproblem oder eine Firewall hin, die SSH blockiert (obwohl Nmap Port 22 als offen gemeldet hat - möglicherweise ein temporäres Problem oder eine Firewall-Regel, die speziell den Angreifer blockiert).
Empfehlung (Pentester): Überprüfen Sie die Erreichbarkeit von Port 22 erneut. Versuchen Sie eine direkte SSH-Verbindung mit `ssh saket@hackmeplease.hmv` und dem Passwort `Saket@#$1337`. Konzentrieren Sie sich alternativ auf den SeedDMS-Zugang.
Empfehlung (Admin): Überprüfen Sie Firewall-Regeln und die SSH-Server-Konfiguration.
Wir ändern das Passwort des `admin`-Benutzers in der SeedDMS-Datenbank.
Query OK, ...
+-------+----------------------------------+ | login | pwd | +-------+----------------------------------+ | admin | 21232f297a57a5a743894a0e4a801fc3 | | guest | NULL | +-------+----------------------------------+
Analyse: Innerhalb der MySQL-Shell wird das Passwort für den Benutzer `admin` in der Tabelle `tblUsers` (die SeedDMS-Benutzertabelle) auf den MD5-Hash von "admin" gesetzt (`21232f297a57a5a743894a0e4a801fc3`). Eine anschließende Abfrage bestätigt die Änderung.
Bewertung: Erfolgreiche Manipulation der SeedDMS-Benutzerdatenbank. Wir haben das Passwort für den SeedDMS-Admin auf "admin" zurückgesetzt.
Empfehlung (Pentester): Loggen Sie sich nun in die SeedDMS-Webanwendung (`http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/`) mit den Zugangsdaten `admin` / `admin` ein.
Empfehlung (Admin): Datenbankzugriffe sollten streng überwacht und protokolliert werden. Verwenden Sie dedizierte, nicht leicht zu erratende Datenbank-Passwörter und beschränken Sie die Rechte des Datenbankbenutzers (hier `seeddms`) auf das absolut Notwendige.
Nachdem wir das Admin-Passwort für SeedDMS zurückgesetzt haben, loggen wir uns in die Webanwendung ein und versuchen, über eine Dateiupload-Funktion eine Reverse Shell zu erlangen.
Login in SeedDMS als admin/admin (erfolgreich, im Browser durchgeführt).
Analyse: Erfolgreicher Login in die SeedDMS-Weboberfläche.
Bewertung: Wir haben nun administrativen Zugriff auf das Dokumentenmanagementsystem.
Empfehlung (Pentester): Suchen Sie nach einer Funktion zum Hochladen von Dateien. Bereiten Sie eine PHP-Reverse-Shell vor.
Empfehlung (Admin): Keine Aktion.
Wir bereiten eine PHP-Reverse-Shell vor und laden sie über die Funktion "Add Document" in SeedDMS hoch.
/usr/share/laudanum/php/php-reverse-shell.php /usr/share/laudanum/wordpress/templates/php-reverse-shell.php /usr/share/seclists/Web-Shells/laudanum-0.8/php/php-reverse-shell.php /usr/share/webshells/php/php-reverse-shell.php
File: revshell.php (configured with attacker IP/port) Status: Uploaded Document ID: 4 Path Hint: /seeddms51x/data/1048576/[DocID]/[Version].php => /seeddms51x/data/1048576/4/1.php
Analyse: Zuerst wird lokal nach einem PHP-Reverse-Shell-Skript gesucht. Anschließend wird dieses Skript (nach Konfiguration mit der IP und dem Port des Angreifers) über die Weboberfläche von SeedDMS hochgeladen. Die Analyse (oder das Ausprobieren) ergibt, dass SeedDMS hochgeladene Dateien unter einem Pfad ablegt, der die Dokumenten-ID enthält (hier ID 4).
Bewertung: Die Reverse Shell wurde erfolgreich auf den Server hochgeladen und der Pfad zur hochgeladenen Datei (`/seeddms51x/data/1048576/4/1.php`) ist bekannt.
Empfehlung (Pentester): Starten Sie einen Netcat-Listener auf dem konfigurierten Port (hier 9001). Rufen Sie dann die URL `http://hackmeplease.hmv/seeddms51x/data/1048576/4/1.php` im Browser auf, um die Reverse Shell auszulösen.
Empfehlung (Admin): SeedDMS (und ähnliche Anwendungen) sollten so konfiguriert werden, dass das Hochladen von ausführbaren Dateitypen (wie PHP) verhindert wird. Der Upload-Ordner sollte außerhalb des Webroots liegen oder zumindest keinen direkten Webzugriff mit Ausführungsrechten erlauben.
Wir starten den Netcat-Listener und rufen die URL der hochgeladenen Shell auf.
listening on [any] 9001 ...
connect to [192.168.2.113] from (UNKNOWN) [192.168.2.114] 34028 Linux ubuntu 5.8.0-59-generic #66~20.04.1-Ubuntu SMP Thu Jun 17 11:14:10 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux 16:54:04 up 1:27, 0 users, load average: 0.28, 0.32, 0.56 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh: 0: can't access tty; job control turned off $
Analyse: `nc -lvnp 9001` startet einen Listener auf Port 9001. Nach dem Aufruf der PHP-Shell-URL im Browser verbindet sich der Server zurück zum Listener.
Bewertung: Initial Access erfolgreich! Wir haben eine Reverse Shell als Benutzer `www-data` (der Benutzer, unter dem Apache/PHP läuft) erhalten.
Empfehlung (Pentester): Die Shell ist nicht interaktiv (`can't access tty`). Stabilisieren Sie die Shell (z.B. mit Python PTY) oder verwenden Sie sie direkt für weitere Enumeration und den Versuch der Privilegienerweiterung.
Empfehlung (Admin): Überwachung ausgehender Verbindungen. Einschränkung der Rechte des Webserver-Benutzers (`www-data`). Korrekte Konfiguration von Dateiuploads.
Dieser Abschnitt beschreibt, wie von der initialen Shell als `www-data` durch Ausnutzung wiederverwendeter Passwörter und `sudo`-Fehlkonfiguration Root-Rechte erlangt wurden.
Kurzbeschreibung: In der initialen `www-data`-Shell nutzen wir die zuvor in der Datenbank gefundenen Zugangsdaten für den Benutzer `saket`, um zu diesem Benutzer zu wechseln. Anschließend stellen wir fest, dass `saket` volle `sudo`-Rechte hat, was die Eskalation zu Root ermöglicht.
Voraussetzungen: Reverse Shell als `www-data`. Kenntnis der Zugangsdaten für `saket` (`Saket@#$1337`) aus der Datenbank-Enumeration.
Schritt 1: Suche nach SUID-Binaries (als www-data)
Wir suchen nach SUID-Dateien als ersten Schritt der lokalen Enumeration.
1049843 40 -rwsr-xr-x 1 root root 39144 Jul 21 2020 /usr/bin/umount 1049744 68 -rwsr-xr-x 1 root root 67816 Jul 21 2020 /usr/bin/su 1062480 16 -rwsr-xr-x 1 root root 14728 Mar 17 2021 /usr/bin/vmware-user-suid-wrapper 1049521 32 -rwsr-xr-x 1 root root 31032 Aug 16 2019 /usr/bin/pkexec 1048761 84 -rwsr-xr-x 1 root root 85064 May 27 2020 /usr/bin/chfn 1049745 164 -rwsr-xr-x 1 root root 166056 Jan 19 2021 /usr/bin/sudo 1049029 88 -rwsr-xr-x 1 root root 88464 May 27 2020 /usr/bin/gpasswd 1048767 52 -rwsr-xr-x 1 root root 53040 May 27 2020 /usr/bin/chsh 1049397 44 -rwsr-xr-x 1 root root 44784 May 27 2020 /usr/bin/newgrp 1049362 56 -rwsr-xr-x 1 root root 55528 Jul 21 2020 /usr/bin/mount 1048948 40 -rwsr-xr-x 1 root root 39144 Mar 7 2020 /usr/bin/fusermount 1049467 68 -rwsr-xr-x 1 root root 68208 May 27 2020 /usr/bin/passwd 1056601 128 -rwsr-xr-x 1 root root 130152 Nov 19 2020 /usr/lib/snapd/snap-confine 1056396 464 -rwsr-xr-x 1 root root 473576 May 29 2020 /usr/lib/openssh/ssh-keysign 1051079 16 -rwsr-xr-x 1 root root 14488 Jul 8 2019 /usr/lib/eject/dmcrypt-get-device 1056412 24 -rwsr-xr-x 1 root root 22840 Aug 16 2019 /usr/lib/policykit-1/polkit-agent-helper-1 1050761 52 -rwsr-xr-- 1 root messagebus 51344 Jun 11 2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper 1058382 16 -rwsr-sr-x 1 root root 14488 Jan 17 2021 /usr/lib/xorg/Xorg.wrap 1058831 388 -rwsr-xr-- 1 root dip 395144 Jul 23 2020 /usr/sbin/pppd 297 129 -rwsr-xr-x 1 root root 131832 Apr 18 12:26 /snap/snapd/19122/usr/lib/snapd/snap-confine 56 43 -rwsr-xr-x 1 root root 43088 Sep 16 2020 /snap/core18/2745/bin/mount 65 63 -rwsr-xr-x 1 root root 64424 Jun 28 2019 /snap/core18/2745/bin/ping 81 44 -rwsr-xr-x 1 root root 44664 Nov 29 2022 /snap/core18/2745/bin/su 99 27 -rwsr-xr-x 1 root root 26696 Sep 16 2020 /snap/core18/2745/bin/umount 1728 75 -rwsr-xr-x 1 root root 76496 Nov 29 2022 /snap/core18/2745/usr/bin/chfn 1730 44 -rwsr-xr-x 1 root root 44528 Nov 29 2022 /snap/core18/2745/usr/bin/chsh 1783 75 -rwsr-xr-x 1 root root 75824 Nov 29 2022 /snap/core18/2745/usr/bin/gpasswd 1847 40 -rwsr-xr-x 1 root root 40344 Nov 29 2022 /snap/core18/2745/usr/bin/newgrp 1860 59 -rwsr-xr-x 1 root root 59640 Nov 29 2022 /snap/core18/2745/usr/bin/passwd
Analyse: Der `find`-Befehl listet SUID-gesetzte Dateien auf.
Bewertung: Enthält Standard-SUID-Binaries wie `su`, `sudo`, `pkexec`. Keine offensichtlich ungewöhnlichen oder leicht ausnutzbaren Dateien auf den ersten Blick. Pwnkit (`pkexec`) bleibt eine Option, aber wir haben bereits Anmeldedaten für `saket`.
Empfehlung (Pentester): Versuchen Sie, mit `su saket` und dem bekannten Passwort den Benutzer zu wechseln. Dies ist der direkteste Weg, basierend auf den Datenbank-Funden.
Empfehlung (Admin): Regelmäßige Überprüfung von SUID-Dateien. Patching von `polkit`.
Schritt 2: Wechsel zum Benutzer `saket`
Wir verwenden den `su`-Befehl und das Passwort aus der Datenbank.
Password: Saket@#$1337 To run a command as administrator (user "root"), use "sudo". See "man sudo_root" for details. saket@ubuntu:/$
Analyse: `su saket` wird ausgeführt, um zum Benutzer `saket` zu wechseln. Das Passwort `Saket@#$1337` wird eingegeben.
Bewertung: Erfolgreich! Wir sind nun als Benutzer `saket` angemeldet. Die Passwort-Wiederverwendung zwischen der benutzerdefinierten Datenbanktabelle und dem Systemkonto ist bestätigt.
Empfehlung (Pentester): Überprüfen Sie die `sudo`-Rechte für `saket` mit `sudo -l`.
Empfehlung (Admin): Setzen Sie unterschiedliche, starke Passwörter für alle Konten (System, Datenbank, Anwendung). Entfernen Sie Klartext-Passwörter aus Datenbanken.
Schritt 3: Überprüfung der `sudo`-Rechte
Wir prüfen, welche Befehle `saket` mit `sudo` ausführen darf.
[sudo] password for saket: Saket@#$1337
Matching Defaults entries for saket on ubuntu:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User saket may run the following commands on ubuntu:
(ALL : ALL) ALL
Analyse: `sudo -l` listet die `sudo`-Berechtigungen für den aktuellen Benutzer (`saket`) auf.
Bewertung: **Kritischer Fund!** Der Benutzer `saket` hat volle `sudo`-Rechte (`(ALL : ALL) ALL`). Er kann jeden Befehl als jeder Benutzer (einschließlich Root) ausführen.
Empfehlung (Pentester): Werden Sie Root mit `sudo su` oder `sudo /bin/bash`.
Empfehlung (Admin): Weisen Sie `sudo`-Rechte nach dem Prinzip der geringsten Rechte zu. `(ALL : ALL) ALL` sollte nur absolut notwendigen Administratorkonten vorbehalten sein und nicht einem normalen Benutzer wie `saket`.
Schritt 4: Erlangung von Root-Rechten
Wir nutzen die `sudo`-Rechte, um eine Root-Shell zu erhalten.
root@ubuntu:/#
Analyse: `sudo su` führt den `su`-Befehl mit Root-Rechten aus, was uns direkt zu einer Root-Shell wechselt, ohne das Root-Passwort zu benötigen.
Bewertung: Erfolg! Wir haben Root-Rechte erlangt.
Empfehlung (Pentester): Bestätigen Sie mit `id`. Sammeln Sie die Flags.
Empfehlung (Admin): Korrigieren Sie die übermäßigen `sudo`-Rechte für `saket`.
uid=0(root) gid=0(root) groups=0(root)
Analyse: Bestätigt die Root-Identität.
Bewertung: Privilegienerweiterung abgeschlossen.
Empfehlung (Pentester): Flags sammeln.
Empfehlung (Admin): Keine Aktion.
Risikobewertung: Die Kombination aus einer unsicheren SeedDMS-Konfiguration (Zugriff auf `settings.xml`), der Speicherung von Klartext-Passwörtern in einer Datenbank und übermäßigen `sudo`-Rechten für einen normalen Benutzer stellt ein kritisches Risiko dar. Es ermöglichte einem Angreifer mit Netzwerkzugriff die schrittweise Kompromittierung bis hin zu vollen Root-Rechten.
Empfehlungen (Zusammenfassung):