XSS und DOM-Sinks, Content Security Policy (CSP), Trusted Types, Cookie- und Storage-Grenzen, Subresource Integrity (SRI), Clickjacking. Die Aufgaben 1 bis 6 sind XSS, Aufgabe 7 ist Validierung nur im Client, Aufgabe 8 ist ein Bonus-Payload auf demselben DOM-XSS-Sink wie Aufgabe 2.
Oft gibt es mehr als einen Weg. Damit der Juice Shop die Aufgabe auf dem Score Board als gelöst erkennt, muss genau der erwartete Marker im Payload stecken.
Mögliche Marker, die der Shop auswertet:
<iframe src="javascript:alert(`xss`)">
<script>alert(`xss`)</script>
Bis auf die DOM-XSS-Aufgabe sind diese Lücken unter Docker nur simuliert. Mit --env NODE_ENV=unsafe beim Docker-Run werden sie tatsächlich ausnutzbar – wie bei M04 und M09.
Die Content Security Policy umgehen und XSS auf einer Legacy-Seite in der Anwendung ausführen:
<script>alert(`xss`)</script>
In der Architekturübersicht heißt es, der Juice Shop habe ein modernes Single-Page-Application-Frontend. Das ist nicht die ganze Wahrheit.
Hinweis 1+
Eine Seite finden, die im Vergleich zum Rest merkwürdig altmodisch wirkt.
Hinweis 2+
Bevor XSS versucht wird: schauen, wie die Seite ihre Content Security Policy setzt.
Hinweis 3+
Was ist noch besser als eine selbst gebaute Validierung per RegEx? Eine selbst gebaute Bereinigung per RegEx – auf derselben Seite, die schon CSP-Probleme hat.
Persistentes XSS mit diesem Payload ausführen und dabei einen clientseitigen Schutz umgehen:
<iframe src="javascript:alert(`xss`)">
Eine sehr häufige Lücke: Prüfung nur im Client. Jede Prüfung, die der Client macht, muss der Server ebenfalls machen.
Hinweis 1+
Nur wenige Formularfelder prüfen ihre Eingabe überhaupt.
Hinweis 2+
Noch weniger Felder werden so gespeichert, dass ihr Inhalt später auf einem anderen Bildschirm landet.
Hinweis 3+
Clientseitige Validierung so umgehen:
Validierung im Browser abschalten (DOM manipulieren)
oder das Backend direkt ansprechen und die Oberfläche ignorieren.
Persistentes XSS mit diesem Payload ausführen und dabei einen serverseitigen Schutz umgehen:
<iframe src="javascript:alert(`xss`)">
Hinweis 1+
Fokus auf dem Kommentarfeld unter Kontakt / Customer Feedback.
Hinweis 2+
Der Validator lehnt den Payload nicht ab – er wird vor dem Speichern aus dem Kommentar gestrippt.
Hinweis 3+
In package.json.bak nach Abhängigkeiten suchen, die mit der Eingabeverarbeitung zu tun haben.
Hinweis 4+
Erscheint ein XSS-Alert, die Aufgabe auf dem Score Board aber nicht als gelöst: dann steht vermutlich nicht exakt der erwartete Marker in der Datenbank.