Skip to main content

Fetch the Flag CTF 2022: Lösung zu File Explorer

Artikel von
feature ctf file explorer

9. November 2022

0 Min. Lesezeit

Danke, dass Sie mit uns Fetch gespielt haben! Glückwunsch an die Tausenden von Spielerinnen und Spielern, die bei Fetch the Flag CTF dabei waren. Und ein großes Dankeschön an die Snyker, die die Challenges entwickelt, getestet und dokumentiert haben!

Wenn Sie bei Snyks Fetch the Flag 2022 dabei waren und nach der Lösung der Challenge File Explorer suchen, sind Sie hier genau richtig. Gehen wir die Lösung gemeinsam durch!

Beginnen wir mit der Reconnaissance-Phase

In dieser Phase der Challenge identifiziert ein Angreifer ein verwundbares Ziel und untersucht, wie es sich ausnutzen lässt. In unserem Fall erhalten wir einen Link zu einer Website und einen Link zu einem öffentlichen GitHub-Repository. Für den Einstieg genügt uns ein einziger Angriffspunkt.

Bildschirm der Challenge „File Explorer 304“, beschriftet mit Node.js und Snyk Open Source, mit einer Beschreibung versteckter Dateien in einer Webanwendung

Was haben wir vor uns?

Zunächst prüfen wir den Link und rufen http://file-explorer.c.ctf-snyk.io/ auf. Dort sehen wir einige Zeilen Text und die Aufforderung, die Dateien über einen Link anzusehen.

Browserseite mit den Texten „Go ahead hack m3“, „find the flag“ und „Take a look at our files here.“

Wir klicken auf den Link und gelangen zum Ordner /public/, in dem wir auf einige Anwendungsdateien zugreifen können.

Browser mit einem Verzeichnisindex: Ordner für CSS, Bilder und JavaScript sowie Dateien wie about.html, favicon.ico und robots.txt.

Aufgrund des Namens und der Beschreibung der Challenge sowie des Links /public/ können wir vermuten, dass wir einen Directory-Traversal-Angriff durchführen müssen. 

Was ist ein Directory-Traversal-Angriff?

Ein Directory-Traversal-Angriff (auch Path-Traversal-Angriff genannt) zielt darauf ab, auf Dateien und Verzeichnisse außerhalb des vorgesehenen Ordners zuzugreifen. Durch die Manipulation von Dateipfaden mit Punkt-Punkt-Schrägstrich-Sequenzen (../) und deren Varianten oder durch die Verwendung absoluter Dateipfade kann es möglich sein, auf beliebige Dateien und Verzeichnisse im Dateisystem zuzugreifen. Dazu können der Quellcode der Anwendung, Konfigurationsdateien und andere wichtige Systemdateien gehören.

Schwachstellen durch Directory Traversal können zur Offenlegung von Informationen führen. Dadurch kann ein Angreifer Informationen über die Ordnerstruktur erhalten oder den Inhalt vertraulicher Dateien auf dem System lesen. 

Die Flagge mit Postman finden

Bei CTFs geht es darum, alle verfügbaren Tools einzusetzen. Verwenden wir also Postman, um den Path-Traversal-Angriff auszuführen. Wir beginnen mit einer einfachen GET-Anfrage (http://file-explorer.c.ctf-snyk.io), um auf die Website zuzugreifen. Das Ergebnis ist dasselbe wie im Browser:

Postman zeigt eine erfolgreiche GET-Anfrage an eine File-Explorer-Website. Die Antwort lautet: „Go ahead hack m3“, „find the flag“ und enthält Links zu Dateien.

Dasselbe Ergebnis erhalten wir, wenn wir mit dieser GET-Anfrage /public ans Ende der URL anhängen (http://file-explorer.c.ctf-snyk.io/public/):

Postman zeigt eine erfolgreiche GET-Anfrage an einen öffentlichen Datei-Explorer mit CSS-, Bild-, JavaScript- und HTML-Dateien sowie Favicon- und robots.txt-Dateien.

Der Punkt-Punkt-Schrägstrich (../) leitet zur Startseite der Website weiter. Versuchen wir es mit einer Variante der Sequenz, bei der wir URL-Encoding verwenden.

Postman zeigt eine GET-Anfrage an einen öffentlichen Datei-Explorer mit einer Verzeichnisliste von CSS-, Bild-, JavaScript- und HTML-Dateien sowie Favicon und robots.txt

Was ist URL-Encoding?

Beim URL-Encoding werden unsichere ASCII-Zeichen durch ein "%" gefolgt von zwei hexadezimalen Ziffern ersetzt. In unserem Fall verwenden wir %2e für . und %2f für /.

Sehen wir uns an, was diese GET-Anfrage ergibt (http://file-explorer.c.ctf-snyk.io/public/%2e

Eine Postman-GET-Anfrage mit einer codierten URL zeigt eine erfolgreiche 200-OK-Antwort mit einer Dateiverzeichnisauflistung.

Wir sehen eine Flag-Datei. Rufen wir sie mit dieser GET-Anfrage auf (http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/flag):

Postman zeigt eine erfolgreiche GET-Anfrage an eine File-Explorer-URL, die eine SNYK-Flag-Zeichenfolge zurückgibt.

Wir haben die Flagge gefunden!

Die Flagge mit Curl finden

Terminal mit curl-Verzeichnisauflistungen für eine File-Explorer-Challenge, gefolgt von einem Befehl, der ein Snyk-CTF-Flag enthüllt.

Versuchen wir es noch einmal, diesmal nur mit curl. Wir gehen genauso vor und rufen zunächst mit diesem Befehl die Ordner der Website ab:

curl http://file-explorer.c.ctf-snyk.io/public/

Anschließend nutzen wir die Path-Traversal-Schwachstelle und rufen mit diesem Befehl den Ordner oberhalb des Ordners public ab:

curl http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/

Zum Schluss rufen wir die Flagge mit dem folgenden Befehl ab:

curl http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/flag

Die Flagge im Browser finden

Dasselbe können wir direkt im Browser tun. Geben Sie die folgende URL in einen Browser ein, um die Seite aufzurufen, über die Sie auf die Flagge zugreifen können:

http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/

Adressleiste des Browsers mit einer File-Explorer-URL und der angezeigten SNYK-Flag-Zeichenfolge.

Die Flagge mit der Snyk IDE-Erweiterung finden

Dazu klonen Sie das öffentliche Repository und öffnen es in Visual Studio Code. Installieren Sie über den Marketplace die Snyk Security IDE extension, indem Sie nach „Snyk“ suchen. Starten Sie nach der Installation Ihre IDE neu und führen Sie npm install aus.

Marketplace für Visual Studio Code-Erweiterungen mit der Seite der Snyk Security-Erweiterung, Installationsoptionen und Details zum Schwachstellen-Scanning.

Wenn Sie zum ersten Mal auf das kleine Patch-Symbol (unser Maskottchen) in der linken Seitenleiste klicken, sehen Sie die Open-Source-Schwachstellen in einem Projekt erst nach der Authentifizierung. Dafür können Sie ein kostenloses Snyk-Konto verwenden. Nach der Authentifizierung können Sie Ihren ersten Scan starten!

Sie können sich auch die Datei package.json ansehen. Dort entdecken Sie einige Schwachstellen im Paket st.

Visual Studio Code zeigt package.json mit einer Warnung vor einer Sicherheitslücke in der Abhängigkeit st@0.2.4 und zwei mittelschweren Sicherheitslücken.

st ist ein Modul zum Bereitstellen statischer Dateien auf Webseiten und enthält eine Schwachstelle dieser Art. In unserem Beispiel sehen wir in der Datei app.js, dass Dateien über die Route public bereitgestellt werden.

Visual Studio Code zeigt eine JavaScript-Datei für einen Express-Server mit einer Abhängigkeitswarnung zu zwei Schwachstellen.

Kehren wir zur Datei package.json zurück. Bewegen Sie den Mauszeiger über das Paket st und klicken Sie auf die gelbe Glühbirne, um die schwerwiegendste Schwachstelle anzuzeigen.

Code-Editor mit einer npm-Abhängigkeit, die zwei Schwachstellen aufweist, und einer Snyk-Aktion zum Anzeigen der schwerwiegendsten Schwachstelle

Sie werden zur Directory-Traversal-Schwachstelle weitergeleitet. Auf dieser Seite erfahren Sie mehr über die Schwachstelle, welche Version sie eingeführt hat, wie Sie sie beheben können und finden einen Proof of Concept.

Dunkles VS-Code-Fenster mit einem Snyk-OSS-Sicherheitsbericht zu einer Directory-Traversal-Schwachstelle im npm-Paket st.

Weitere Informationen zu dieser Schwachstelle erhalten Sie, wenn Sie auf Mehr über diese Schwachstelle erfahren klicken. 

Snyk Learn-Lektionsseite mit dem Titel „Directory Traversal“. Sie erklärt die unbeabsichtigte Offenlegung vertraulicher Dateien und zeigt eine Seitenleiste mit dem Lernfortschritt.

File Explorer: Zusammenfassung

Überlegen wir einmal, wie viele Codezeilen wir selbst schreiben und wie viele Komponenten oder Pakete wir in unsere Codebasis importieren. Wir wollen das Rad nicht neu erfinden und Zeit damit verschwenden, etwas neu zu schreiben, das wahrscheinlich bereits als Paket in unserem Ökosystem verfügbar ist. 

Genau das war bei dieser Challenge der Fall. Wir haben eine einfache Website, auf der wir das Paket st zum Bereitstellen statischer Dateien verwenden. Da wir jedoch eine veraltete Paketversion eingesetzt haben, ist eine Schwachstelle in unser Projekt gelangt. Dadurch kann ein potenzieller Angreifer vertrauliche Dateien, Zugangsdaten oder Passwörter aufspüren. Halten Sie die Komponenten Ihrer Projekte auf dem neuesten Stand, um Ihre Angriffsfläche zu verringern!

Ich hoffe, Ihnen haben File Explorer und die anderen Challenges im CTF gefallen :)

Möchten Sie erfahren, wie wir alle anderen Flaggen gefunden haben? Auf unserer Seite Fetch the Flag-Lösungen erfahren Sie, wie wir dabei vorgegangen sind.

Weiterlesen

Blog

Frontier-Modelle fanden die Schwachstellen. Nur der Angreifer fand die Angriffsketten.

Die statische Analyse fand die Schwachstellen, doch erst Live-Angriffstests bewiesen, wie sie sich zu Angriffen verketten lassen. Ein Vergleich von Evo COS, Claude Security und Claude Code Security.

feature insights context
Blog

Autonome Angriffe sind bereits Realität. Die Verteidigung muss Schritt halten.

Autonome Angreifer verkürzen das Zeitfenster für die Verteidigung. Erfahren Sie, wie kontinuierliches Erkennen, Beheben, Validieren und Verhindern Sicherheitsteams helfen kann, Schritt zu halten.

Blog

Warum KI-Coding-Agenten immer wieder fehlerhafte Zugriffskontrollen schreiben

KI-Coding-Agenten können Autorisierungslogik erzeugen, die kompiliert und die Prüfung besteht, dabei aber die Daten eines Mandanten für einen anderen offenlegt. Erfahren Sie, warum fehlerhafte Zugriffskontrollen schwer zu erkennen sind und wie Sie sie verhindern.