Skip to main content
In de les werd alert(1) vaak gebruikt als PoC. Wanneer alert() geblokkeerd was, kwam print() als alternatief aan bod. Bij DOM-oefeningen ging het soms om het aanpassen van een zichtbaar element, bijvoorbeeld tekst in een result-div.

PortSwigger XSS cheat sheet

Payloadreferentie per tag, event en browser.

De 3 types

Reflected

Input komt direct terug in de response (URL-param, zoekveld).

Stored

Input wordt opgeslagen en later getoond (comment, profiel).

DOM-based

Client-side JS schrijft een source in een gevaarlijke sink.

Analyse van de context

1

Werkt HTML?

Typ <h1>zzz</h1>. Vet weergegeven = HTML wordt geinterpreteerd -> ga door.
2

PoC

<script>alert(1)</script> was de basis-PoC. Als die niet werkte, werd de source belangrijker.
3

Lees de context af

Hoe komt je input eruit? Tussen tags? In een attribuut? In JS?
4

Payloadkeuze

De payload hangt af van de context en van welke keywords gefilterd worden.

Context -> payload

Payload-toolkit

Event handlers om mee te varieren: onerror ; onload ; onclick ; onmouseover ; onmouseup ; onfocus ; onkeydown ; ontoggle

Handige testplekken

Goed om te weten

Vanaf Chrome 92 is alert() in een cross-origin iframe geblokkeerd. print() is dan een alternatief als PoC.
Sources (attacker-controlled): location, location.hash, location.search, document.cookie, document.referrer, window.name, localStorage.Sinks (gevaarlijk): innerHTML, document.write(), eval(), location.href, element.srcdoc.
Session hijacking (document.cookie zonder HttpOnly) ; credential harvesting ; CSRF-token stelen ; keylogging ; redirecten ; acties uitvoeren als het slachtoffer.

Tools

Browser DevTools

Referentie voor HTML-context, console errors, sources en DOM-sinks.

PortSwigger XSS cheat sheet

Zoek payloads per tag, event handler en browser.

Burp Suite

Handig voor Repeater, payloadvarianten en responsevergelijking.

mechanize

Pythonbibliotheek die in scripts meerdere payloadvarianten kan aflopen.