Module

M07: Cross-Site Scripting (XSS)

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 Angriffsvektor stecken.

Mögliche Marker, die der Shop auswertet:

<iframe src="javascript:alert(`xss`)">
<script>alert(`xss`)</script>
  1. Aufgabe 01

    Reflektierte XSS-Attacke

    Reflektiertes XSS entsteht, wenn der Angriffsvektor im Request gespiegelt und in der Antwort zurückgegeben wird – ohne Speicherung in der Anwendung. Der Angriff ist nicht persistent und trifft nur, wer einen präparierten Link oder eine Seite eines Dritten öffnet. Der String steckt in der URL oder in HTTP-Parametern.

    Hinweise
    • Suchen Sie ein Eingabefeld, dessen Inhalt in einer HTML-Response wieder auftaucht.
    • Testen Sie auf XSS, indem Sie Text mit einem HTML-Tag versehen.
  2. Aufgabe 02

    DOM-XSS-Attacke

    Eine DOM-basierte XSS-Lücke entsteht, wenn ein Angreifer ein DOM-Element steuern kann – typischerweise über JavaScript, ohne dass der Server den Payload spiegeln muss.

    Hinweise
    • Die Aufgabe ist kaum von reflektiertem XSS zu unterscheiden. Achten Sie darauf, ob die Ausgabe erst im Browser zusammengesetzt wird.
  3. Aufgabe 03

    XSS-Attacke auf Legacy-Seite

    In der Architekturübersicht heißt es, der Juice Shop habe ein modernes Single-Page-Application-Frontend. Das ist nicht die ganze Wahrheit.

    Hinweise
    • Finden Sie eine Seite, die im Vergleich zum Rest merkwürdig altmodisch wirkt.
    • Was ist noch besser als eine selbst gebaute Validierung per RegEx? Eine selbst gebaute Bereinigung per RegEx.
  4. Aufgabe 04

    Persistente XSS-Attacke: clientseitigen Schutz umgehen

    Eine sehr häufige Lücke: Die Entwicklung ignoriert die goldene Regel der Eingabeprüfung:

    „Jede Prüfung, die der Client macht, muss der Server ebenfalls machen.“

    Hinweise
    • Senden Sie einen POST-Request an /api/Users.
    • Nicht alle Eingabefelder werden geprüft.
    • Noch weniger Felder werden so gespeichert, dass ihr Inhalt später auf einem anderen Bildschirm landet.
    • Clientseitige Validierung umgehen Sie so: Validierung im Browser abschalten oder das Backend direkt ansprechen und die Oberfläche ignorieren.
  5. Aufgabe 05

    Persistente XSS-Attacke ohne das Frontend

    Arbeiten Sie direkt mit der serverseitigen API – die Oberfläche brauchen Sie nicht.

    Hinweise
    • HTTP-Methoden wie PUT und POST auf der API helfen weiter.
    • Unvorsichtige Entwicklung hat oft API-Methoden freigegeben, die der Client gar nicht braucht.
  6. Aufgabe 06

    Persistente XSS-Attacke: serverseitigen Schutz umgehen

    Eine der schwereren XSS-Aufgaben: Clientseitige Validierung zu umgehen reicht nicht. Gibt es serverseitige Prüfung, schauen Sie genau hin – oft deckt sie nicht alle Fälle ab.

    Hinweise
    • Ihr Fokus sollte auf dem Kontaktformular liegen.
    • Suchen Sie in package.json.bak nach Abhängigkeiten, die mit der Eingabeverarbeitung zu tun haben.