Komputer Hacking

BlockRoom CTF Write-Up

Link zur CTF

Aufgabe 1

| What is the username of the first person who accessed our server?

In der entpackten Archivdatei sind 2 Dateien: lsass.DMP und traffic.pcapng

LSASS (Local Security Authority Subsystem Service) ist ein Windows-Prozess, der für die Verwaltung von Sicherheitsrichtlinien, die Authentifizierung von Benutzern und die Speicherung von Anmeldeinformationen im Arbeitsspeicher zuständig ist.

Eine .dmp-Datei (Dump-Datei) ist eine Speicherabbild-Datei, die den Inhalt des Arbeitsspeichers eines Prozesses oder des gesamten Systems zu einem bestimmten Zeitpunkt enthält, meist für Debugging oder Fehleranalysen.

Wir können daraus Nutzerdaten extrahieren.

Starte mit dem Öffnen der .pcapng-Datei in Wireshark.

Den Nutzer und damit die Lösung der ersten Frage, kannst du in der Zeile der NTLMSSP Authentifizierung sehen:

test image

Lösung anzeigen (ACHTUNG: SPOILER)

mrealman


Aufgabe 2

| What is the password of the user in question 1?

Für diese Aufgabe habe ich pypykatz verwendet.

Installiere pypykatz indem du eine venv mit Python erstellst (python3 -m venv .venv), diese aktivierst (source .venv/bin/activate) und danach mit pip install pypykatz das tool innerhalb der venv installierst.

Anschließend kannst du dir mit der Option -h die Hilfe anzeigen lassen:

pypykatz

Hier ist die Option lsa die Richtige für unser lsass.dmp file.

Mit dem Befehl: pypykatz lsa minidump lsass.DMP lassen sich nun wichtige Informationen aus der Datei extrahieren.

pypykatz

Dieser NT-Hash kann nun mit Crackstation oder einem Tool wie John-The-Ripper gecracked werden.

Ich werde in diesem Durchlauf mit John-The-Ripper versuchen diesen Hash zu knacken.

Das Format für John sieht so aus: Benutzername:NT-Hash
Zuerst erzeuge ich mir eine neue Text-Datei (nt-hash.txt) mit dem folgenden Inhalt: mrealman:$NT$1f9175a516211660c7a8143b0f36ab44

Diese Nutze ich nun für John mit folgendem Befehl: john --format=nt nt-hashes.txt

Wenn die Standard-Wordlist nicht funktioniert, bzw. das Passwort nicht beinhaltet, kann mit folgendem Befehl eine andere Wordlist verwendet werden:
john --format=nt --wordlist=/pfad/zu/deinem_wörterbuch.txt nt-hashes.txt

Hier der Befehl mit der Rockyou.txt Wordlist und dem erfolgreichen Crackdurchlauf:

pypykatz

Mit Crackstation funktioniert das Cracken des NT-Hashes ebenfalls:

pypykatz

Lösung anzeigen (ACHTUNG: SPOILER)

Blockbuster1


Aufgabe 3

| What is the flag that the first user got access to?

Was haben wir bisher?

Benutzername -> Gefunden in traffic.pcapng
Domäne -> Gefunden in traffic.pcapng
NT-Hash oder Passwort -> Gefunden in lsass.DMP
Mit diesen Informationen können wir in Wireshark entsprechende SMB Pakete entschlüsseln, indem wir das Passwort hinterlegen.

Dazu in Wireshark auf Edit -> Preferences -> Protocols und in der Liste NTLMSSP selektieren und das zuvor gefundene Passwort eingeben und unten bestätigen:

pypykatz

Durch die Entschlüsselung der Session, haben wir Zugriff auf die Inhalte der SMB Pakete des Nutzers.

Hier fällt eine .csv Datei auf, die öfter genutzt wurde

pypykatz

Ich nutze nun einen Filter, um evtl. weitere .csv Dateien zu finden. In diesem Beispiel, gibt es recht wenig Datenpakete. In der Realität haben Paket-Mitschnitte mit Wireshark mehrere Tausend Zeilen an Einträgen.

pypykatz

Die gefundene .csv Datei, kann über File -> Export Objects -> SMB exportiert werden.

pypykatz

Ich speichere diese als export.csv.

pypykatz

Diese exportierte Datei kann nun mit einem Texteditor geöffnet werden und der Inhalt eingesehen werden. Hier ist auch die Lösung der 3. Aufgabe zu sehen:

pypykatz

Lösung anzeigen (ACHTUNG: SPOILER)

THM{SmB_DeCrypTing_who_Could_Have_Th0ughT}


Aufgabe 4

| What is the username of the second person who accessed our server?

Die Lösung der Aufgabe ist in der zu Beginn geparsten lsass.dmp Datei weiter unten zu finden:

pypykatz

Lösung anzeigen (ACHTUNG: SPOILER)

eshellstrop


Aufgabe 5

| What is the hash of the user in question 4?

Diese Lösung ist ebenfalls in der gleichen Aufgabe unter NT:XXX zu finden:

pypykatz

Lösung anzeigen (ACHTUNG: SPOILER)

3f29138a04aadc19214e9c04028bf381


Aufgabe 6

| What is the flag that the second user got access to?

Da wir den Hash und den Nutzer haben, kann nun eine 2. Textdatei mit dem Hash zum Cracken mit John-The-Ripper angelegt werden.

Allerdings führt dieser Weg hier nicht zum Erfolg. Weder Crackstation, noch John-The-Ripper können den NT-Hash cracken:

pypykatz Crackstation

Folglich versuche ich einen anderen Ansatz. Über die .pcapng-Datei können wir, zusätzlich zum geparsten Hash, folgende Informationen zum Nutzer eshellstrop extrahieren:

  • Nutzer: eshellstrop (aus pcapng)
  • Domain: WORKGROUP (aus pcapng)
  • NTProofStr: 0ca6227a4f00b9654a48908c4801a0ac (aus pcapng)
  • EncryptedSessionKey: c24f5102a22d286336aac2dfa4dc2e04 (aus pcapng)
  • NT-Hash: 3f29138a04aadc19214e9c04028bf381 (geparsed aus dmp-Datei)

Mit diesen Informationen können wir ein Python Skript nuten, dass auf Github zur Verfügung steht: Python Skript

Diesen Inhalt der Datei über die Code Ansicht Github kopieren und auf der Kali Maschine eine neue Datei mit .py Endung erzeugen.

Der Befehl wird nun aus den oben stehenden Informationen aufgebaut und ausgeführt.
Folgendes ist die Ausgabe:

Wichtig ist hier der Random Session Key. Mit diesem und der Session ID können wir die notwendigen Pakete entschlüsseln. Im Folgenden zeige ich wie.

In Wireshark suchen wir uns die Session ID für den Nutzer eshellstrop

Diese ID bekommen wir aus dem gleichen Paket (Nr.82), aus dem wir die vorherigen Daten auch schon entnehmen konnnten. Auch wieder unter dem SMB2 Bereich:

Damit dieser Session Key verwendet werden kann müssen die Bytes "umgedreht" werden. Denn Wireshark zeigt die Informationen im little-endian Format (von klein nach groß)

Das heißt ein Byte = 1 HEX Wertepaar oder in dem Session Key ein Zahlenpaar, bestehend aus 2 Ziffern.

Aus 0x 00 00 10 00 00 00 00 45 wird 0x 45 00 00 00 00 10 00 00

Diesen Big-Endian Format Key können wir nun in Wireshark wie folgt nutzen, um die SMB Pakete zu entschlüsseln:

Dazu in Wireshark wieder auf Edit -> Preferences -> Protocols und in der Liste diesmalSMB2 selektieren und Edit... klicken

Danach die Session-ID im Big-Endian Format eigeben und den zuvor extrahierten RandomSK, anschließend unten bestätigen und Apply klicken:

Nun wieder über File -> Export Objects -> SMB die neue .csv exportieren.

Diese kann nun im Texteditor geöffnet werden und die letzte Flag entnommen werden:

Lösung anzeigen (ACHTUNG: SPOILER)

THM{No_PasSw0Rd?_No_Pr0bl3m}


Bei Fragen gerne Rückmeldung an mich.

k-kaufhold