Aus Linux-Magazin 06/2025

Praktisches Einbrechen am Beispiel OWASP Juice Shop

© Andrew Poplavsky / 123RF.com

Der OWASP Juice Shop hält über 100 Aufgaben bereit, mit denen Sie sich im Handumdrehen topfit für das Pentesting eines Webservers machen. Dieser Artikel nimmt Sie dabei an die Hand und demonstriert die ersten Schritte.

Ob der eigene Webserver für Angreifer die Türen weit geöffnet hält, testet man kurzerhand mit einem Einbruch in sein eigenes System. Dazu braucht man nur … tja, was eigentlich? Da gibt es doch dieses Metasploit, das man lediglich auf den Server ansetzt? Bevor Sie solch große unbekannte Geschütze auf Ihren eigenen Server richten, sollten Sie sich mit den verfügbaren Werkzeugen und deren Einsatzzweck vertraut machen. Am besten gelingt das mit einem Einbruch in ein Testsystem.

Das Open Worldwide Application Security Project (OWASP) stellt seinen Juice Shop [1] für solche Zwecke zur Verfügung. Er offeriert nicht nur schmackhafte Fruchtsäfte, sondern enthält absichtlich auch zahlreiche Sicherheitslücken. Die Schwachstellen eignen sich hervorragend dazu, sich durch praktisches Training topfit für das Pentesting zu machen. Über einen Docker-Container setzen Sie den Shop schnell auf.

Geschäftseröffnung

Da der Juice Shop Sicherheitslücken aufweist, sollten Sie ihn nicht auf Ihrem eigenen System hochfahren. Installieren Sie stattdessen Ihre Lieblingsdistribution in einer virtuellen Maschine (VM) oder auf einem alten Laptop. Dort können Sie dann den Juice Shop gefahrlos starten und angreifen. Ganz nebenbei stören keine anderen noch im Hintergrund auf Ihrem System mitlaufenden Dienste die Analysen. Als Basis eignet sich prinzipiell jede beliebige Distribution. Sie sollte grundsätzlich die im Folgenden zum Einsatz kommenden Werkzeuge Docker, Nmap, Dirb und Base64 in ihren Repositories vorhalten. Auf Nummer sicher gehen Sie mit Debian oder der Pentesting-Distribution Kali Linux [2].

Sobald Ihre Distribution in der VM oder auf einem alten Rechner läuft, integrieren Sie über die Paketverwaltung die genannten Werkzeuge. Unter Kali Linux genügt dazu ein »sudo apt install docker.io«. Sämtliche anderen Tools liegen bereits vor. In jedem Fall laden die beiden Befehle aus Listing 1 den Container mit dem Juice Shop herunter und fahren ihn hoch.

Listing 1

Herunterladen und Hochfahren

$ sudo docker pull bkimminich/juice-shop
$ sudo docker run --rm -p 3000:3000 bkimminich/juice-shop

Um die Statusmeldungen des Containers im Blick zu behalten, lassen Sie das Terminal-Fenster geöffnet. Die Sicherheitswerkzeuge setzen Sie gleich in einem zweiten Terminal auf den Juice Shop an. Abschließend können Sie jetzt die Internetverbindung vorübergehend kappen und damit eine vollständig abgeschottete Testumgebung schaffen.

Wo ist der Eingang?

Bei einem Angriff auf ein Computersystem versucht man zunächst ans eigentliche Ziel zu gelangen und danach möglichst viele Informationen über das Opfer einzuholen (Scanning und Enumeration). Der Juice Shop läuft bereits auf Ihrem System, viel näher kommen Sie ihm vorerst nicht. Bei einem Online-Shop stellt sich vor allem die Frage, wie und auf welchen Wegen Sie mit ihm kommunizieren können. Einen Hinweis darauf haben Sie entweder im Docker-Kommando oder in den Ausgaben des Containers gesehen: Der darin laufende Webserver lauscht an Port 3000. Doch vielleicht findet sich im Online-Shop noch eine Hintertür? Das klärt der Befehl »nmap 127.0.0.1«.

Nmap spürt alle offenen Ports unter der angegebenen IP-Adresse auf – in diesem Fall Ihrem lokalen System, das immer die 127.0.0.1 besitzt. Beim Juice Shop entdeckt das Tool nur einen einzigen offenen Port 3000 (Abbildung 1) – also keine Hintertür. Betreten Sie deswegen den Shop mit Ihrem Browser über die URL http://localhost:3000.

Abbildung 1: Nmap klopft an allen möglichen Ports an, wobei in diesem Beispiel nur an Port 3000 jemand per TCP geantwortet hat.

Abbildung 1: Nmap klopft an allen möglichen Ports an, wobei in diesem Beispiel nur an Port 3000 jemand per TCP geantwortet hat.

Der Saftladen begrüßt Sie mit der Meldung aus Abbildung 2 und bietet Ihnen direkt seine Hilfe an. Wenn Sie zum ersten Mal mit dem Juice Shop arbeiten, sollten Sie die Offerte unbedingt per Help getting started annehmen. Der Online-Shop verrät Ihnen dann Ihre erste zu lösende Aufgabe, auf die Sie ohne Vorwissen nicht ohne Weiteres kommen: Finden Sie das versteckte Score Board – was auch immer das sein mag.

Bevor wir uns auf die Suche machen, kurz eine kleine Warnung: Die folgenden Anleitungen sollen die ersten Schritte mit dem Juice Shop erleichtern und nehmen daher gezwungenermaßen einige Lösungen vorweg. Wenn Sie selbst knobeln und den Juice Shop erst einmal auf eigene Faust infiltrieren wollen, hören Sie jetzt auf zu lesen und kommen später hierher zurück.

Abbildung 2: Beim ersten Aufruf weist Sie der Juice Shop auf seine Sicherheitslücken hin und gibt Ihnen einen ersten Tipp.

Abbildung 2: Beim ersten Aufruf weist Sie der Juice Shop auf seine Sicherheitslücken hin und gibt Ihnen einen ersten Tipp.

Unter die Haube geschaut

Schauen Sie sich zunächst im Shop um. Dabei stellen Sie fest, dass sich die Produkte erst nach einer Registrierung bestellen lassen. Aber nirgendwo taucht auch nur der kleinste Hinweis auf das Score Board auf. Wenn man an der Oberfläche nicht weiterkommt, hilft vielleicht ein Blick hinter die Kulissen in den HTML-Code. Das gelingt mit der Seitenquelltextansicht Ihres Browsers, in Firefox aktivieren Sie sie mit [Strg]+[U].

Die Startseite besteht aus erstaunlich wenig Code. Erneut findet sich keine Spur von einem Score Board. Allerdings bindet die Seite mehrere JavaScript-Skripte ein. Die im oberen Teil von Cloudflare hinzugeholten Skripte scheinen Standardkomponenten zu sein, zum Beispiel die beliebte Bibliothek jQuery. Ob das wirklich zutrifft, müsste man prüfen. Deutlich interessanter wirken jedoch im Moment die Skripte im unteren Teil. Sie wirken wie explizit für den Juice Shop geklöppelt. Der Name »main.js« weist auf das zentrale Skript hin. Dementsprechend könnte es sich lohnen, dort zuerst einen Blick hineinzuwerfen.

Aufgehübscht

Wenn Sie »main.js« anklicken oder im Browser aufrufen, sehen Sie sich einer ziemlich langen und unübersichtlichen Zeichenkette gegenüber. Die Datei wurde ganz offensichtlich einiger Leerzeichen und Zeilenumbrüche beraubt (“minifized”). Netterweise können Firefox, Chrome und viele weitere Browser die Darstellung menschenlesbar aufbereiten. Unter Firefox schließen Sie die Quelltextansicht und holen auf der Startseite des Juice Shops per [F12] die Entwicklerkonsole auf den Schirm. Wechseln Sie danach auf den Reiter Debugger. Dort versammeln sich auf der linken Seite alle eingebundenen Skripte. Klicken Sie auf main.js und am unteren Rand des mittleren Feldes auf die geschweiften Klammmern ({}).

Während Sie langsam durch den Code blättern, entdecken Sie zahlreiche URLs. Das gilt vor allem ab ungefähr Zeile 3750. Dort warten einige interessant klingende Pfade, wie http:///about oder http:///login. Hängen Sie sie an die Webadresse zum Shop an, landen Sie auf den entsprechenden Unterseiten. Beispielsweise führt http://localhost:3000/#/login zur Anmeldeseite des Shops.

Früher oder später stolpern Sie über einen Pfad mit der Bezeichnung http:///score-board (wie in Abbildung 3). Das klingt doch sehr nach einem Treffer! Anstatt sich durch das lange Skript vorwärts zu hangeln, können Sie übrigens auch mit der Suchfunktion Ihres Browsers nach score fahnden und die Fundstellen durchgehen.

Abbildung 3: Im Quellcode des Skripts »main.js« versteckt sich ein Hinweis auf die URL für das gesuchte Score Board.

Abbildung 3: Im Quellcode des Skripts »main.js« versteckt sich ein Hinweis auf die URL für das gesuchte Score Board.

Steuern Sie die zugehörige URL http://localhost:3000/#/score-board an und Sie gelangen auf die versteckte Unterseite, die in Abbildung 4 zu sehen ist. Sie fasst sämtliche im Shop enthaltenen Lücken zusammen und stellt Ihnen direkt passende Aufgaben. Die Anzahl der Sternchen gibt an, wie schwierig eine Lösung zu finden ist. In welcher Reihenfolge Sie die Aufgaben abarbeiten, bleibt Ihnen überlassen. Doch sinnvollerweise sollten Sie sich für den Anfang die leichten Probleme mit nur einem Sternchen vornehmen.

Sollten Sie bei einer Aufgabe nicht mehr weiter wissen, wechseln Sie vorübergehend zu einer anderen oder lassen Sie die Arbeit am Juice Shop ein paar Tage ruhen. Häufig fallen einem über Nacht andere Dinge ein, die man ausprobieren könnte. Fühlen Sie sich weiterhin wie in einer Sackgasse ohne Wendemöglichkeit, klicken Sie im Kästchen der Aufgabe auf Hint, um einen oder mehrere Tipps zu bekommen.

Abbildung 4: Das Score Board führt über Ihren Erfolg Buch. Einige Aufgaben lassen sich nur dann erledigen, wenn sie zuvor andere gelöst haben.

Abbildung 4: Das Score Board führt über Ihren Erfolg Buch. Einige Aufgaben lassen sich nur dann erledigen, wenn sie zuvor andere gelöst haben.

Hintereingänge

Wenn das Score Board über eine versteckte URL zu erreichen ist, vielleicht gibt es dann ja noch mehr davon? Bevor Sie dazu wieder in den Quellcode der Seite abtauchen, sollten Sie Dirb konsultieren. Das Tool probiert bekannte Pfade durch, etwa http:///admin oder http:///login. Lassen Sie im Hintergrund das Score Board geöffnet und setzen Sie Dirb mit dem Befehl aus Listing 2 auf den Shop an.

Listing 2

Dirb-Attacke

$ dirb http://localhost:3000/ /usr/share/dirb/wordlists/big.txt -z 10

Die Pfade, die Dirb durchprobieren soll, gibt die Textdatei »big.txt« vor. Sie gehört zum Lieferumfang des Werkzeugs und liegt bei Debian und Kali Linux im Verzeichnis »/usr/share/dirb/wordlists/«. Dort lagern außerdem zusätzliche Wortlisten. Alternativ ergänzen Sie die »big.txt« um weitere Pfade oder erstellen eine eigene Fassung.

Dirb protokolliert jede tatsächlich existierende URL wie in Abbildung 5 auf der Kommandozeile. Da es die URLs in schwindelerregender Geschwindigkeit durchprobiert, stürzt der Juice Shop irgendwann überlastet ab. Um das zu verhindern, erzwingt der Parameter »-z 10« nach jedem Test eine kleine Pause von 10 Millisekunden.

Zwei Fliegen

Beim Juice Shop präsentiert Dirb gleich mehrere Fundstücke. So verbirgt sich etwa hinter http://localhost:3000/Video ein kleines Filmchen. Zu den entdeckten URLs gehört auch http://localhost:3000/metrics. Unter der Adresse finden Sie zahlreiche Messwerte der Software Prometheus, die im Hintergrund die Leistung des Onlineshops (Abbildung 6) im Auge behält. Solche wichtigen internen Daten sollten nicht an die Öffentlichkeit gelangen. In der Praxis posaunen nicht wenige Webserver solche Metriken hinaus.

Abbildung 5: Dirb sucht auf Webservern nach versteckten URLs. Im Juice Shop ist das Tool gleich mehrfach fündig geworden.

Abbildung 5: Dirb sucht auf Webservern nach versteckten URLs. Im Juice Shop ist das Tool gleich mehrfach fündig geworden.

Abbildung 6: Solche Metriken können für Angreifer und Pentester ein Informationsparadies sein.

Abbildung 6: Solche Metriken können für Angreifer und Pentester ein Informationsparadies sein.

Mit der Entdeckung der URL http://localhost:3000/metrics hat Dirb gleichzeitig die Aufgabe Exposed Metrics auf dem Score Board erledigt. Diesen Erfolg feierte das Score Board mit einem kleinen Konfettiregen. Den gab es sogar noch ein zweites Mal, denn die Software hat auch die URL http://localhost:3000/rest ausgegraben. Wenn Sie die aufrufen, liefert der Onlineshop die wilde und prinzipiell nicht für die Augen der Anwender bestimmte Meldung aus Abbildung 7. Mit dem Aufruf der URL hat Dirb den dazugehörenden Fehler in der Webanwendung provoziert und damit die Aufgabe Error Handling gelöst. Wie bereits die Metriken gewähren solche Stack Traces den Angreifern tiefe Einblicke in den Aufbau der Webanwendung.

Abbildung 7: Laut Stack Trace basiert der Juice Shop auf der veralteten Node.js Express-Version 4.21.0. Als Pentester könnte man jetzt dessen Sicherheitslücken ausnutzen.

Abbildung 7: Laut Stack Trace basiert der Juice Shop auf der veralteten Node.js Express-Version 4.21.0. Als Pentester könnte man jetzt dessen Sicherheitslücken ausnutzen.

Ostereier

Schließlich erweckt noch die URL http://localhost:3000/ftp Interesse. Auf sie weist auch die »robots.txt« hin. Die Textdatei untersagt Google und Co. den Zugriff auf einige Pfade beziehungsweise URLs. Solche verbotenen Seiten könnten jedoch für Angreifer lukrative Ziele darstellen. Beim Juice Shop bittet die »robots.txt« Suchmaschinen darum, http:///ftp zu ignorieren – dorthin sollten Sie als Pentester also umgehend Ihren Browser lenken.

Abbildung 8: Der falsch konfigurierte Webserver des Juice Shops erlaubt den Zugriff auf ein Verzeichnis, das einige brisante Dokumente enthält.

Abbildung 8: Der falsch konfigurierte Webserver des Juice Shops erlaubt den Zugriff auf ein Verzeichnis, das einige brisante Dokumente enthält.

Die URL http://localhost:3000/ftp gewährt Zugriff auf ein Verzeichnis auf dem Server (Abbildung 8). Dort befindet sich unter anderem die Markdown-Datei »aquisitions.md«, die brisante Informationen der Geschäftsführung über eine geplante Übernahme liefert. Ins Auge springt außerdem die Datei »eastere.gg«. Allerdings verweigert der Juice Shop das Herunterladen derselben mit dem Hinweis, dass nur ».md«- und ».pdf«-Dateien erlaubt seien. Bleibt die Frage, wie man dennoch an das Osterei kommt.

Versteckspiel

Man müsste den Dateinamen irgendwie zu »eastere.gg.md« ändern können. Wenn Sie die URL entsprechend anpassen, führt das jedoch lediglich zu einer Fehlermeldung. Netterweise gibt es das Nullzeichen, englisch Null Byte genannt. Das spezielle Zeichen interpretieren einige Programmiersprachen als Zeilenende. Schmuggeln Sie das Null Byte also gekonnt in eine Eingabe, schneidet das Programm den Rest der Zeile ab.

Genau dieser Effekt lässt sich auch im Shop ausnutzen: Dort setzen Sie ein Null Byte vor das ».md«. In einer URL notieren Sie das Null Byte als http://%00, womit sich »eastere.gg%00.md« ergibt. Der Juice Shop lässt die Anfrage daraufhin passieren, weil die Endung weiterhin ».md« lautet. Unter der Haube schneidet das System den hinteren Teil ab dem Null Byte ab, sodass die korrekte Datei »eastere.gg« zurückgeliefert wird.

Probieren Sie direkt aus, ob die Idee funktioniert. Das Ergebnis ist allerdings ernüchternd: Der Aufruf der URL http://localhost:3000/ftp/eastere.gg%00.md mündet wieder in einer Fehlermeldung. Das liegt an einer kleinen fiesen Stolperfalle: In der URL steckt ein Prozentzeichen, das Sie ebenfalls durch das passende Encoding ersetzen müssen: http://localhost:3000/ftp/eastere.gg%2500.md. Wenn Sie die angepasste Adresse im Browser ansteuern, erhalten Sie endlich das Easter Egg. Oder zumindest eine Hälfte. Denn in der Textdatei sehen Sie nur eine kryptische Zeichenkette.

Geköpftes Ei

Diese verschlüsselte Botschaft fällt dadurch auf, dass sie keine Umlaute und andere Sonderzeichen umfasst. Am Ende stehen zudem zwei Gleichheitszeichen. Das erinnert verdächtig an eine Base64-Codierung [3]. Ob sich der Verdacht bestätigt, findet ein Shell-Einzeiler heraus: Schieben Sie mit dem Kommando »echo “L2d1…” | base64 -d« die Zeichenkette in eine Pipe und von dort weiter in das Tool Base64.

Der Parameter »-d« sorgt dafür, dass Base64 die Zeichenkette dekodiert. Das Ergebnis wirkt zwar immer noch unleserlich, Schrägstriche unterteilen aber scheinbar einzelne Wörter. In denen gibt es ein Muster: Zunächst tauchen gur und einige andere “Silben” mehrfach auf. Des Weiteren sind die Buchstaben nicht gleich verteilt. Das r kommt zum Beispiel besonders häufig vor.

Die Anzeichen deuten auf eine Cäsar-Chiffrierung hin, bei der jeder Buchstabe durch einen anderen aus dem Alphabet ersetzt wurde. Entschlüsseln lassen sich so chiffrierte Texte mit dem ROT Converter [4] von Thomas Kühn. Im ganz oben eingetippten Text tauscht die zweite Zeile (Rot**1 verschlüsselt) jeden Buchstaben gegen den direkten Nachbarn im Alphabet. Die zweite Zeile tauscht jeden Buchstaben durch den jeweils übernächsten im Alphabet und so weiter.

Wenn Sie die Zeile aus dem Easter Egg in das oberste Feld kopieren, können Sie den entschlüsselten Text in der Zeile Rot**13 verschlüsselt ablesen. Die Entwickler des Juice Shop haben offensichtlich jeden Buchstaben durch den im Alphabet 13 Stellen danach liegenden Buchstaben ersetzt und somit die ROT13-Verschlüsselung [5] verwendet. Das Ergebnis enthält eine witzige Botschaft und sieht wegen der Schrägstriche ein bisschen wie eine URL aus. Sie ahnen vermutlich, was kommt: Hängen Sie den dechiffrierten Text an http://localhost:3000 und rufen Sie die so entstandene Adresse auf.

Fazit

Der Juice Shop hält über 100 Aufgaben bereit, deren detaillierte Beschreibung den Rahmen des Artikels sprengen würden. Wir müssen daher die Lösung der übrigen Aufgaben in Ihre Hände legen. Scheuen Sie sich nicht, die eingebauten Hilfen und Tipps in Anspruch zu nehmen.

Die Entwickler des Juice Shop orientieren sich an den zehn häufigsten Sicherheitsproblemen in Webanwendungen. Das OWASP fasst sie regelmäßig in den OWASP Top 10 [6] zusammen. Es bietet sich folglich an, sich in diese Klassiker einzulesen und anschließend im Juice Shop durchzugehen. Und sollten Sie sich gar nicht mehr zu helfen wissen, lohnt ein Blick in den Anhang des Buchs “Pwning OWASP Juice Shop” [7]. (csi)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben