[Praktischer Leitfaden] Hacken mit RCE aus der SSTI-Sicherheitslücke auf HackTheBox! Erfahren Sie mehr über die Ursachen und Gegenmaßnahmen von Sicherheitslücken | Spookifier-Zusammenfassung

[Praktischer Leitfaden] Hacken mit RCE aus der SSTI-Sicherheitslücke auf HackTheBox! Erfahren Sie mehr über die Ursachen und Gegenmaßnahmen von Sicherheitslücken | Spookifier-Zusammenfassung

Template-Engines werden in Webanwendungen häufig verwendet, um HTML und Daten zu kombinieren und Anzeigen zu generieren. Beispielsweise werden Template-Engines im Backend verwendet, um Benutzernamen, Beitragsinhalte usw. in HTML einzubetten.

Benutzereingaben direkt in eine solche Vorlagenverarbeitung , kann die gesamte Vorlagensyntax ausgewertet werden. Diese Sicherheitslücke wird als „SSTI (Server-Side Template Injection)“ bezeichnet.

Tritt ein SSTI auf, besteht je nach Typ der Template-Engine das Risiko, dass es zu internen Variablenzugriffen oder im schlimmsten Fall zur Ausführung beliebiger Betriebssystembefehle (RCE) kommt. Insbesondere in Python-basierten Systemen Jinja2 und Mako mit ihrer anfälligen Implementierung ein bequemes Einfallstor für Angreifer darstellen.

Mako das Thema dieser Überprüfung , ist eine der in Python häufig verwendeten Template-Engines, aber besteht auch die Gefahr, dass Benutzereingaben versehentlich direkt eingebettet werden

Wir werden uns anhand eines konkreten Beispiels ansehen, wie diese Sicherheitslücke in einer realen Anwendung ausgenutzt werden kann.

📹: Wie es in der Praxis funktioniert, könnt ihr euch auch auf YouTube anschauen!

Inhaltsverzeichnis

Über HackTheBox

Dieses Mal verwenden wir tatsächlich HackTheBox (HTB), um Schwachstellen zu überprüfen.

HackTheBox ist eine praxisorientierte CTF-Plattform, auf der Teilnehmer in verschiedenen Sicherheitsbereichen wie Webanwendungen, Servern und Netzwerken üben können.
Das Besondere daran: Die Teilnehmer können lernen, indem sie tatsächlich auf die anzugreifenden Maschinen und Anwendungen zugreifen und selbst Hand anlegen.

ist eine der Challenge-Kategorien , die zuvor auf HackTheBox angeboten wurden und derzeit nur für Benutzer mit einem VIP-Plan oder höher

Es gibt auch Maschinen und Herausforderungen in verschiedenen Kategorien, darunter Web, Reversing, Pwn und Forensik, sodass Sie sie auf einem für Sie geeigneten Niveau angehen können.

Wenn Sie Ihre Fähigkeiten mit HackTheBox ernsthaft verbessern möchten, melden Sie sich unbedingt den VIP-Plan und nutzen Sie alle Vorteile der bisherigen Maschinen und Herausforderungen.

👉 Besuchen Sie hier die offizielle HackTheBox-Website

Sicherheit kann nur gemeistert werden, wenn man aus der Perspektive eines Angreifers übt

Das bloße Lesen der Referenz reicht nicht aus. den tatsächlichen Angriff können Sie wirklich verstehen, warum etwas anfällig ist und wie Sie es schützen können.

HackTheBox bietet eine Trainingsumgebung, in der Sie Schwachstellen auf einer virtuellen Maschine sicher ausprobieren können.
Selbst Anfänger können lernen, wie ein Angreifer zu denken und sich Schritt für Schritt weiterzuentwickeln.

  • Virtuelle Maschinenübungen basierend auf realistischen Angriffsszenarien
  • Behebt eine Vielzahl von Schwachstellen, darunter RCE, SQLi und XSS
  • Mit dem VIP-Plan haben Sie Zugriff auf ältere Maschinen

*HackTheBox Academy (Lehrmaterialien) und Labs (Übungsumgebung), die unterschiedliche Abrechnungsstrukturen haben.
Für alle, die sich auf die Praxis konzentrieren möchten, empfehlen wir den Labs VIP-Tarif oder höher.

👉 Für detaillierte Informationen zur Registrierung für HackTheBox und den Unterschieden zwischen den Plänen klicken Sie bitte hier.

Zusammenfassung der Herausforderung: Spookifier

Die Herausforderung, der wir uns dieses Mal gestellt haben, „ Spookifier ist in der Web-Kategorie von HackTheBox hat den SEHR EINFACH

Oberflächlich betrachtet ist die Anwendung sehr simpel: ein Webdienst, der Text bei der Eingabe einfach konvertiert und in verschiedenen Schriftarten anzeigt. Auf den ersten Blick scheint sie keine Sicherheitslücken zu haben.

Allerdings verwendete die Anwendung die Python-Template-Engine „Mako“ und die vom Benutzer eingegebene Zeichenfolge wurde direkt innerhalb des Templates ausgewertet.

Dieser Konstruktionsfehler kann zu Server-Side Template Injection (SSTI) und letztendlich zur willkürlichen Befehlsausführung (RCE) führen

👉 https://app.hackthebox.com/challenges/Spookifier

Herausforderungspunkte

  • Verwendete Technologien: Python, Flask, Mako
  • Bemerkenswertes Verhalten: Eingaben werden in mehreren Schriftarten angezeigt
  • Angriffsvektor: Nicht bereinigte Eingabe in Vorlage → SSTI
  • Ziel: Flags aus /flag.txt

Auf diese Weise verbirgt sich hinter der Funktionalität, die an der Oberfläche sicher erscheint, eine Schwäche im Prozess der Vorlagenbewertung , und die Struktur ermöglicht es Ihnen, ein typisches „Muster von SSTI zu RCE“ zu erleben.

Hacking in der Praxis: Von SSTI bis RCE

Von hier aus werden wir mit der App herumspielen und nach Schlupflöchern suchen.
Bei unsachgemäßem Umgang mit der Vorlage könnte sie zum Angriffspunkt werden.
Wir werden prüfen, ob SSTI gültig ist und letztendlich RCE anstreben.

Scouting 1: Erstmal die App ausprobieren

Greifen Sie zunächst auf die Zielanwendung zu und prüfen Sie, welche Funktionen sie hat und welche Eingaben sie akzeptiert

Der Bildschirm verfügt über ein einfaches Eingabeformular und scheint nur die Funktion „Text eingeben, in einen dekorierten Schriftstil konvertieren und ausgeben“ zu haben.
Das Erscheinungsbild und die Struktur sind sehr einfach, ohne Authentifizierungsfunktionen oder komplexes Routing.

Wichtig hierbei ist die vom Benutzer eingegebene Zeichenfolge auf irgendeine Weise verarbeitet und dann als Vorlage angezeigt wird .
Es scheint, dass die Zeichenfolge irgendwo im Prozess der „Anzeige in mehreren Schriftarten“ von einer Vorlagen-Engine manipuliert wird.

Ich habe die Anforderungsinformationen mit Devtools überprüft, aber es scheinen dort keine aussagekräftigen Informationen zu sein.

Aufklärung 2: Identifizierung der Template-Engine aus dem Quellcode

Bei der Untersuchung von Schwachstellen in tatsächlichen Webanwendungen ist der Zugriff auf den Quellcode selten möglich.
Penetrationstests und Bug-Bounty-Tests basieren auf Black-Box-Tests (Beobachtung des Verhaltens von außen).

Daher prüfen wir in der Regel mit dem folgenden Prozess, ob eine Template-Engine vorhanden ist und ob Schwachstellen vorliegen.

  • Probieren Sie im Textfeld gängige Vorlagensyntax , z. B. ${7*7} , {{7*7}} , <%= 7*7 %>
  • das Ergebnis 49 oder 7*7 anzeigt
  • Etwaige ungewöhnliche Vorlagenfehler oder Auswertungsergebnisse können Hinweise auf die Vorlagen-Engine geben.
  • anhand der Ausgabe und des Verhaltens auf die verwendete Vorlagen-Engine (Mako, Jinja2, Twig usw.).

Diesmal wurde der Quellcode als besondere Herausforderung bereitgestellt, um etwas über Schwachstellen zu erfahren.
So konnte ich die interne Struktur direkt untersuchen und schnell verstehen, wie die Vorlagenverarbeitung funktioniert.

Im bereitgestellten Quellcode finden Sie die folgende Beschreibung zur Vorlagendarstellung:

von mako.template importiere Template ... returniere Template(Ergebnis).render()

Dieser Satz zeigt deutlich, dass
Mako als Template-Engine verwendet wird Mako ist eine Python-Template-Engine und die ${...}- Syntax direkt als Python-Ausdruck ausgewertet wird, was ein Risiko von SSTI (Server-Side Template Injection)

versucht, ${} in der Benutzereingabe

Nachdem wir nun wissen, dass Mako als Vorlagen-Engine verwendet wird, müssen wir als Nächstes prüfen , ob
das ${} in der vom Benutzer eingegebenen Zeichenfolge tatsächlich als Vorlagenausdruck ausgewertet wird . Dies ist der erste Schritt zur Feststellung, ob SSTI (Server-Side Template Injection) vorhanden ist.

, die grundlegende Vorlagensyntax von Mako, ${7*7}, einzugeben

${7*7}

Wenn die Vorlagen-Engine diese Eingabe als Ausdruck auswertet, sollte sie die Zahl
49 Wenn sie hingegen nicht ausgewertet und als Zeichenfolge behandelt wird, wird sie ${7*7} angezeigt

Als ich es abschickte, wurde die folgende Meldung auf dem Bildschirm angezeigt:

Das Ergebnis 49 vom Benutzer eingegebenen ${7*7} von der Template-Engine (Mako) ausgewertet wurden.

Mit anderen Worten: Mako verarbeitet Benutzereingaben als Vorlage und es wurde bestätigt, dass SSTI wirksam war.

Intrusion: Auf RCE prüfen ⇒ Versuchen Sie zu sehen, wie weit Sie es von der Vorlagenformel aus ausführen können

Nachdem SSTI bestätigt war, war unser nächstes Ziel klar:
Wir wollten herausfinden, ob wir Vorlagenausdrücke nutzen können, um beliebigen Code auf der Serverseite auszuführen (RCE)

Bestätigung der Befehlsausführung

Testen wir zunächst, ob wir tatsächlich einen Betriebssystembefehl aus einem Vorlagenausdruck ausführen können.
Zur Überprüfung verwenden wir den einfachen Befehl whoami

${__import__('os').popen('whoami').read()}

Als ich diese Formel übermittelte, erhielt ich folgendes Ergebnis:

Das Ausführungsergebnis von whoami zeigt root was bestätigt , dass jeder Betriebssystembefehl über einen Vorlagenausdruck ausgeführt werden kann und dass der Befehl mit Root-Berechtigungen ausgeführt wird

An diesem Punkt ist klar, dass eine Remote Code Execution-Schwachstelle (RCE) besteht, die es einem Angreifer ermöglicht, Befehle mit erhöhten Berechtigungen auszuführen

Überprüfen der gelesenen Datei

Nachdem wir nun wissen, dass wir Befehle ausführen können, können wir prüfen,
ob wir eine beliebige Datei lesen können Ein typisches Beispiel /etc/passwd , die aus Linux-Umgebungen bekannt ist.

${open('/etc/passwd').read()}

Die Ausgabe enthielt die Benutzerinformationen, beispielsweise:

Dieses Ergebnis zeigt, dass
open() von Python aufzurufen , wodurch Sie die volle Kontrolle über Lesevorgänge auf dem Server haben.

Ausführung: Flags suchen und abrufen

Bisher durch Template-Injektion

  • Ausführen von Python-Code
  • Führen Sie Betriebssystembefehle aus
  • Beliebiges Lesen von Dateien


Dies bedeutet, dass eine vollständige Remote Code Execution (RCE) erreicht wurde .

Der nächste Schritt die Zielflaggendatei zu finden und ihren Inhalt abzurufen .

Suchen Sie den Speicherort der Flag-Datei

Schauen wir uns zunächst den Inhalt des Stammverzeichnisses / an und sehen wir, welche Verzeichnisse und Dateien dort vorhanden sind.

${__import__('os').listdir('/')}

Wie Sie sehen, ist es in Ordnung, wenn Sie die gewünschte Datei ( flag.txt ) finden können. Wenn Sie sie jedoch nicht finden können, Home oder Root graben

Die Flagge lesen

Wenn die Suche eine Datei wie /flag.txt open(), um ihren Inhalt abzurufen:

${open('/flag.txt').read()}

Als ich diesen Ausdruck ausführte, erhielt ich die folgende Ausgabe:

Wir haben die Flagge erfolgreich erhalten
, was das Endziel der HackTheBox-Challenge Durch diesen Prozess konnten wir durch tatsächliche Tests ein tieferes Verständnis dafür gewinnen, inwieweit die SSTI-Sicherheitslücke ausgenutzt werden kann.

Warum ist diese Sicherheitslücke aufgetreten? So verwenden Sie Vorlagen sicher

Die Hauptursache für diese Sicherheitslücke (SSTI → RCE) die unsachgemäße Verwendung der Template-Engine

Insbesondere wurden auf der Python-Seite dynamisch Vorlagenzeichenfolgen erstellt, die Benutzereingaben enthalten , was zu Vorlageninjektion (SSTI) und schließlich Remotecodeausführung (RCE) führt.

Lösung – Übergeben Sie keine dynamischen Zeichenfolgen an Vorlagen

Eines der typischen Muster, bei denen SSTI (Server-Side Template Injection) auftritt,
, dass eine Zeichenfolge in Python erstellt und dann als Vorlage ausgewertet wird .

Das Erstellen von Vorlagenstrings mit str.format() , wie im folgenden Code,

def generate_render(converted_fonts): Ergebnis = '''<tr><td> {0}</td></tr><tr><td> {1}</td></tr><tr><td> {2}</td></tr><tr><td> {3}</td></tr> '''.format(*konvertierte_Schriftarten) return Template(Ergebnis).render()

converted_fonts beispielsweise die folgende Benutzereingabe enthält:

${__import__('os').popen('id').read()}

Durch die Übergabe dieser Vorlage an Mako entsteht eine schwerwiegende Sicherheitslücke, Mako ${...} auswertet

Sichere Verwendung: Trennen der Vorlagenstruktur von den Daten

Um dieses Problem zu vermeiden, ist es wichtig
, die Vorlagenstruktur von der Benutzereingabe (Variablen) zu trennen Sie können dies sicher handhaben, indem Sie Variablen explizit an render() , wie folgt:

def generate_render(konvertierte_Schriftarten): Vorlage = '''<tr><td> ${font1}</td></tr><tr><td> ${font2}</td></tr><tr><td> ${font3}</td></tr><tr><td> ${font4}</td></tr> ''' returniere Template(template).render( font1=konvertierte_Schriftarten[0], font2=konvertierte_Schriftarten[1], font3=konvertierte_Schriftarten[2], font4=konvertierte_Schriftarten[3] )

font1 bis font4 mit dieser Methode ${} enthalten , behandelt Mako sie als normale Zeichenfolgen und wertet sie nicht als Vorlagenausdrücke aus.

Makos ${...} -Syntax wertet Ausdrücke innerhalb von Vorlagen aus,
und wenn Benutzereingaben wörtlich übergeben werden, besteht das Risiko der Codeausführung.

Übergeben Sie Variablen
hingegen Template(...).render(var=value) In diesem Fall var } bedenkenlos als Platzhalter im Template verwendet werden , wird aber nicht als Code ausgeführt.

Zusammenfassung: SSTIs sind Schwachstellen, die durch „Nutzungsgewohnheiten“ verursacht werden

Bei dieser „Spookifier“-Herausforderung
konnten wir durch unsachgemäße Handhabung von Mako-Vorlagen eine Sicherheitslücke ausnutzen, die zu Server-Side Template Injection (SSTI) und letztendlich zu Remote Code Execution (RCE) führte.

Diese Sicherheitslücken werden durch
Implementierungsfehler der Entwickler Sie sind besonders gefährlich, wenn Template-Strings dynamisch erstellt werden.

So verwenden Sie Template-Engines sicher:

  • Trennen Sie immer Vorlagen und Daten (Variablen)
  • Übergeben Sie Variablen als Platzhalter und werten Sie Ausdrücke nicht aus
  • Geben Sie nicht vertrauenswürdige Eingaben nicht direkt an Vorlagen weiter.

Durch die einfache Befolgung dieser Grundprinzipien können viele SSTIs verhindert werden.

Sicherheit kann nur gemeistert werden, wenn man aus der Perspektive eines Angreifers übt

Das bloße Lesen der Referenz reicht nicht aus. den tatsächlichen Angriff können Sie wirklich verstehen, warum etwas anfällig ist und wie Sie es schützen können.

HackTheBox bietet eine Trainingsumgebung, in der Sie Schwachstellen auf einer virtuellen Maschine sicher ausprobieren können.
Selbst Anfänger können lernen, wie ein Angreifer zu denken und sich Schritt für Schritt weiterzuentwickeln.

  • Virtuelle Maschinenübungen basierend auf realistischen Angriffsszenarien
  • Behebt eine Vielzahl von Schwachstellen, darunter RCE, SQLi und XSS
  • Mit dem VIP-Plan haben Sie Zugriff auf ältere Maschinen

*HackTheBox Academy (Lehrmaterialien) und Labs (Übungsumgebung), die unterschiedliche Abrechnungsstrukturen haben.
Für alle, die sich auf die Praxis konzentrieren möchten, empfehlen wir den Labs VIP-Tarif oder höher.

👉 Für detaillierte Informationen zur Registrierung für HackTheBox und den Unterschieden zwischen den Plänen klicken Sie bitte hier.

Teilen Sie, wenn Sie möchten!

Wer hat diesen Artikel geschrieben

Dies ist ein Blog, in dem ich angefangen habe, Informationssicherheit zu studieren. Als neuer Angestellter würde ich mich freuen, wenn Sie mit einem breiten Herzen schauen könnten.
Es gibt auch Teech Lab, das eine Gelegenheit ist, Programmierspaß zu studieren. Wenn Sie also an der Softwareentwicklung interessiert sind, sollten Sie sich unbedingt ansehen!

Inhaltsverzeichnis