Skip to main content

Fetch the Flag CTF 2022: Lösung zu git-refs

Artikel von

Iulia Manda

feature ctf git refs

9. November 2022

0 Min. Lesezeit

Vielen Dank, dass Sie bei Fetch mitgespielt haben! Glückwunsch an die Tausenden von Spielerinnen und Spielern, die beiFetch the Flag CTF dabei waren. Ein großes Dankeschön auch an das Snyk-Team, das die Challenges entwickelt, getestet und dokumentiert hat!

Wenn Sie bei der diesjährigen Veranstaltung Fetch the Flag CTF dabei waren, haben Sie vielleicht die Challenge git-refs in Angriff genommen. Falls Sie sie nicht abschließen konnten oder einfach mehr darüber erfahren möchten, gehen wir sie in diesem Blogbeitrag gemeinsam durch. Name und Beschreibung der Challenge deuten auf Git hin – das behalten wir bei unserer Untersuchung im Hinterkopf. Kann Git uns helfen, die Flag zu finden? Sehen wir uns mögliche Angriffsvektoren in der Anwendung git-refs an.

Challenge

Bei dieser Web-Challenge erhalten wir einen Link zu einer Website, auf der wir Informationen zu öffentlichen Git-Repositories sehen können. Über die Textsuche lassen sich Branches und Commit-Hashes eines bestimmten Repositories auflisten. Für erfolgreiche Anfragen ist keine Authentifizierung erforderlich – das macht die Challenge etwas einfacher.

Lösungsschritte

Sehen wir uns zuerst die gesendeten Anfragen an.

Das Git-Refs-Tool zeigt eine GitHub-Repository-URL, Namen entfernter Branches und Commit-Hashes sowie Details zu Netzwerkanfragen im Browser.
Git-Refs-Tool mit einer GitHub-Repository-URL, Namen von Remote-Branches und Commit-Hashes neben dem Request-Payload in den Chrome DevTools.

Wir stellen fest, dass eine POST-Anfrage an http://git-refs.c.ctf-snyk.io/git gesendet wird, mit einer Liste im Request-Body:

["ls-remote", "https://github.com/snyk/nuget-semver"]

Interessant! Wir vermuten, dass ls-remote ein Git-Befehl ist. Können wir wohl auch andere Git-Befehle im Request-Body übergeben …?

Postman-Fenster mit einer POST-Anfrage an einen Git-Endpunkt und einer Antwort, laut der sich das Repository auf dem Branch master befindet und noch keine Commits enthält

Es sieht so aus, als hätten wir jetzt über den Git-Befehl eine Remote-Shell. Finden wir heraus, ob wir Informationen zum Repository git-refs abrufen können.

Es scheint ein leeres Git-Repository zu sein. Ist es das wirklich? Vielleicht finden wir etwas, das in der Git-Historie rückgängig gemacht wurde?

API-Client mit einer POST-Anfrage für Git-Reflog-Daten und einem 500-Fehler, der besagt, dass der Master-Branch keine Commits enthält.

Auch das Reflog scheint nicht besonders hilfreich zu sein. Das sieht nach einem lokalen, gerade erst initialisierten Repository aus, in das noch nichts an ein Remote-Repository übertragen wurde.

Könnten wir diese Erkenntnisse vielleicht nutzen, um Informationen über Systemdateien abzurufen? Vielleicht können wir nach einer flag.txt oder etwas Ähnlichem suchen.

Postman-Fenster mit einer POST-Anfrage an eine Git-URL, einem JSON-Body und einer 200-OK-Antwort mit der Git-Statusausgabe.

Im Git-Handbuch finden wir heraus, dass sich der Befehl --work-tree möglicherweise eignet, um das Dateisystem zu durchsuchen.

Postman-Anfrage zum Abfragen von Git-Refs mit Work-Tree und Status, die eine Git-Statusliste mit nicht nachverfolgten Systemverzeichnissen zurückgibt.

Super! Mit Git konnten wir „/“ auf dem Remote-System auflisten.

Bei diesem Untersuchungsansatz hatten wir allerdings kein Glück. Vor allem schlugen alle Versuche fehl, Dateiinhalt auszulesen (also git add und anschließend git diff auszuführen). Vielleicht lässt sich wegen der .gitignore-Datei nichts hinzufügen oder committen? Ganz sicher sind wir nicht, da wir auch den Inhalt von .gitignore nicht sehen konnten.

Lesen wir weiter, was wir sonst noch mit git machen können.

Ein anderer Ansatz

Als Nächstes kam uns der Gedanke, die Repository-Konfiguration zu überprüfen. Bei der Durchsicht der Optionen von git config fanden wir eine, die interessant klang:

-e, --edit           Opens an editor to modify the specified config file; either --system, --global, or repository (default).

Hmm, interessant. Probieren wir es aus:

Postman-Fenster mit einer POST-Anfrage an einen git-refs-Endpunkt, einer JSON-Eingabe und einer Paketantwort mit einem Flag und einer Git-Konfiguration.

Und da ist die Flag. :)

Zusammenfassung

Fassen wir zusammen, was wir zur Lösung dieser Challenge verwendet haben:

  • Analyse der Netzwerkanfragen der Webanwendung: URL, Request-Body und Status prüfen

  • Einen möglichen Angriffsvektor identifizieren, indem wir anhand der vorliegenden Informationen herausfinden, wie wir Zugriff auf eine Remote-Shell erhalten

  • Das Git-Handbuch (oder das eigene Gedächtnis – je nachdem :) ) durchlesen, um herauszufinden, was uns der Flag näherbringen könnte

Command Injection kommt nach wie vor häufig vor. Deshalb ist die Bereinigung von Eingaben nach wie vor ein Muss in modernen Anwendungen. Wir hoffen, Ihnen hat diese Challenge Spaß gemacht und Sie konnten dabei etwas lernen.

Möchten Sie erfahren, wie wir alle anderen Flags gefunden haben? Auf unserer Seite Fetch the Flag solutions erfahren Sie, wie wir dabei vorgegangen sind.

Weiterlesen

illustration hero ai
Blog

PHP behebt zwei kritische unauthentifizierte RCE-Schwachstellen (CVE-2026-109618, CVE-2026-109619): Jetzt aktualisieren

Zwei kritische Sicherheitslücken im Request-Lebenszyklus von PHP können unauthentifizierte Remote Code Execution ermöglichen. Aktualisieren Sie auf eine korrigierte Version oder installieren Sie für ältere Versionen einen Backport des Anbieters.

blog feature ai lilac
Blog

Mit agentischer Behebung Ihren Schwachstellen-Backlog in Pull Requests verwandeln

Der Evo Remediation Agent ist jetzt in der öffentlichen Vorschau verfügbar und erweitert Evo Agentic AppSec um die automatisierte Auflösung von Abhängigkeiten. AppSec-Teams können jetzt kontinuierliche Behebungskampagnen durchführen

AI Background min crop
Blog

KI ruft alle Risiken auf den Plan, die Sie akzeptiert haben: Sieben Erkenntnisse aus dem AI Security Panel: Unfiltered

KI macht Angriffe günstiger und schneller und legt Risiken offen, die Unternehmen bereits tragen. Vier Sicherheitsverantwortliche erklären, warum Abwehr in Maschinengeschwindigkeit und schnellere Behebung jetzt unverzichtbar sind.