Einführung

(dieser Artikel wurde zur Bewertung an Google gesendet und ist urheberrechtlich geschützt. Wenn Sie also Ihre eigene Lösung einsenden möchten, war das gestern. Sie müssen im Scoreboard registriert sein, damit Ihr Artikel berücksichtigt wird.)

MindReader war angeblich eine der einfachsten Herausforderungen bei GoogleCTF und es ist nach einigem Raten auch so. Also los gehts

Als erstes sehen wir auf der Challenge-Seite ein Feld mit einer Schaltfläche „Lesen“.

Als erstes kommt einem der Test auf „XSS“ in den Sinn. Daher wurden einige XSS-Versuche getestet, darunter die folgenden:

<script>alert(test)</script>

Leider war die Reaktion nicht wie erwartet

Es wurden auch Befehlsinjektionstechniken mit einigen „ls“ und „cmd“ ausprobiert, aber auch ohne Erfolg.

Der nächste Schritt war nun der Versuch einer Verzeichnisüberquerung. Dabei stellte sich heraus, dass der Host anfällig ist. Die folgenden Versuche wurden unternommen, aber auch ohne Erfolg.

../.././../etc/passwd

../../../../usw./Schatten

../../../../etc/resolv.conf

../../../usw./Hosts

Nach ein paar Fingerprintings stellte sich heraus, dass in der Umgebung ein Docker ausgeführt wird. Daher wurde die Hauptseite erneut geöffnet, „main.py“ eingegeben und das Hauptskript wurde angezeigt.

Das obige Skript verwendet das „Flask“-Framework und die Funktion „index()“, um die Aufgaben zum Lesen der im Challenge-Feld eingegebenen Werte auszuführen.

Zeile 6 sagt uns, dass es eine Umgebungsvariable gibt, die vor dem Ausführen der Funktion aktiviert wird, und Google hat uns einen Hinweis gegeben, dass diese Umgebungsvariable das eigentliche FLAG ist.

Und da die Angabe des Hosts anfällig für Verzeichnisdurchquerungen ist, muss auf die Umgebungsvariable auf diese Weise zugegriffen werden.

Ich habe jede Kombination mit /proc/self/environ ausprobiert, aber es scheint, dass wir keine Zugriffsberechtigungen haben

Gute Kenntnisse von Linux-Systemen sind dabei von Bedeutung. /proc/self/fd verfügt über symbolische Links zu /dev/fd. Dies bedeutet, dass in Linux Beziehungen zwischen Umgebungsvariablen und Dateideskriptoren bestehen, die es uns ermöglichen, von Dateideskriptoren oder von /dev/fd aus, das bei 0,1,2 usw. beginnt, auf die Umgebung zuzugreifen.

Wenn wir also /dev/fd/0 versuchen, aber /dev/fd/8 binden, erhalten wir

Gekoppelt mit Directory Traversal

/dev/fd/../Umgebung

Und die Flagge wurde erobert

Über den Autor

Ich erstelle Notizen zur Cybersicherheit, Notizen zum digitalen Marketing und Online-Kurse. Ich biete auch Beratung zum digitalen Marketing an, einschließlich, aber nicht beschränkt auf SEO, Google- und Meta-Anzeigen und CRM-Verwaltung.

Artikel anzeigen