Skip to main content

Fetch the Flag CTF 2022: Lösung zu Potty Training

feature ctf potty training

12. November 2022

0 Min. Lesezeit

Vielen Dank, dass Sie bei Fetch mitgespielt haben! Glückwunsch an die Tausenden Spielerinnen und Spieler, die bei Fetch the Flag CTF dabei waren. Ein großes Dankeschön auch an die Snyker, die die Challenges entwickelt, getestet und dokumentiert haben!

Dieser Beitrag wurde von Snyk Ambassador Mohammad-Ali A’râbi (@MohammadAliEN) verfasst. Melden Sie sich an, um Snyk Ambassador zu werden und erhalten Sie noch heute Einblicke in Snyk – einschließlich Zugang zu CTFs, bevor sie starten.

Die Challenge (mit etwas historischem Kontext)

Wenn Sie an Snyks Fetch the Flag CTF 2022 teilgenommen haben, kennen Sie die Challenge Potty Training. Sie war schnell und einfach, aber ich fand sie ziemlich interessant. Außerdem war es das erste Flag, das ich je bei einem Sicherheitswettbewerb erbeutet oder gefunden habe!

Die Challenge bestand also nur aus einer PNG-Datei namens potty.png. Wenn es sich um ein Bild handelt, ist wahrscheinlich etwas darin verborgen. Nachrichten in Bildern zu verstecken, ist so alt, dass es dafür einen griechischen Namen gibt: Steganografie. Das bedeutet „Nachrichten verbergen“. Wahrscheinlich ist dies die älteste Methode, geheime Nachrichten zu versenden – lange bevor die Kryptografie erfunden wurde.

Im Jahr 480 v. Chr. lebte Demaratos, ein Grieche, der aus seiner Heimat vertrieben worden war, in der persischen Stadt Susa (auch Shush genannt). Er beobachtete, wie der persische König Xerxes ein Heer zusammenstellte, um einen Überraschungsangriff auf Griechenland zu starten. Also schrieb er eine Nachricht, versteckte sie in einem Holzscheit und ließ sie von einem Boten nach Sparta bringen. Die Spartaner brauchten eine Weile, um die richtige Python-Bibliothek zum Extrahieren der verborgenen Nachricht zu finden, aber schließlich gelang es ihnen. Na gut, dieser Teil stimmt nicht. Die Spartaner nutzten kein Python. Sie deckten die Nachricht auf, indem sie Verschiedenes ausprobierten und Ideen von allen einbezogen.

Okay, genug Geschichte. Mein Punkt ist: „Steganografie“ ist das Wort des Tages.

Die Lösung

Als ich mit der Challenge anfing, dachte ich zunächst nicht an Steganografie und untersuchte die Datei mit Texteditoren wie Vim. Doch wie erwartet war alles Kauderwelsch. Die zweite Schwierigkeit bestand darin, die richtige Bibliothek zum Extrahieren der verborgenen Nachricht zu finden. Ich wollte ohnehin Python verwenden. Als ich also die Begriffe Steganografie und Python bei Google kombinierte, stieß ich auf dieses nette Python-Paket namens stegano.

In der Beschreibung steht, dass man das Paket nach der Installation auch über die CLI verwenden kann. Installieren wir es also zuerst:

pip3 install stegano

Und anschließend über die CLI:

stegano-lsb reveal -i potty.png

Die Ausgabe sieht so aus:

       import requests
        r = requests.get('https://potty-training.c.ctf-snyk.io/')
        print(r.text)

In der PNG-Datei versteckt sich also etwas heimtückischer (oder besser gesagt Snyky) Python-Code. Jetzt, da wir ihn extrahiert haben, speichern wir ihn in einer Python-Datei:

stegano-lsb reveal -i potty.png > potty.py

Korrigieren Sie die Einrückungen ein wenig und führen Sie den Code aus:

python3 potty.py

Das Snippet wird ausgeführt, wirft aber einen SSL-Zertifikatsfehler. Das bedeutet, dass das HTTPS-Protokoll nicht funktioniert. Vielleicht erinnern Sie sich nicht mehr an HTTP im Internet. Als jemand Anfang 30 erinnere ich mich aber noch an die Zeit, als es HTTP-Websites gab. Ändern wir also den Code und ersetzen die https-URL durch http – der guten alten Zeiten wegen:

import requests
r = requests.get('http://potty-training.c.ctf-snyk.io/')
print(r.text)

Bei der Ausführung wird diese tolle Nachricht angezeigt:

<html>
  <head>
    <title>Good puppy!</title>
  </head>
  <body>
    <h1>Good puppy! 🐕</h1>
    <p>Here's your flag 🦴</p>
    <p>SNYK{dd67edb70a28335068dd5ea9304007b69543357ff471b3144e3355bca34cb35d}</p>
    <a href="https://snyk.io/blog/snyk-international-dog-day-recap/">Snyk + Dogs = 💜</a>
  </body>
</html>

Tada! ? Wir bekommen einen niedlichen Welpen und ein tolles Flag zum Erbeuten.

Zum Schluss

Es hat mir wirklich Spaß gemacht, diese Challenge beim CTF-Event zu lösen. Bei meinem letzten Capture-the-Flag-Wettbewerb spielte ich Call of Duty 2 mit Freunden in einer lokalen Spielhalle. Ich würde sagen, Snyks Flag zu erbeuten hat mehr Spaß gemacht, als die Flags der WWII-Fraktionen zu erobern (die CTF-Karten in CoD 2 sind so unausgewogen!). Ich freue mich schon auf das CTF im nächsten Jahr!

Meine wichtigsten Erkenntnisse:

  • Es gibt ein Protokoll namens HTTP. Es ist alt, aber nicht veraltet.

  • Steganografie ist sehr alt, aber nicht veraltet.

  • Wenn Sie mehr über die Geschichte solcher Challenges erfahren möchten, lesen Sie The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography von Simon Singh.

  • Wenn Sie nicht weiterwissen, verwenden Sie Python.

Möchten Sie erfahren, wie wir alle anderen Flags gefunden haben? Auf unserer Seite mit den Fetch-the-Flag-Lösungen erfahren Sie, wie es geht.