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
Handige testplekken
Goed om te weten
Chrome blokkeert alert()
Chrome blokkeert alert()
Vanaf Chrome 92 is
alert() in een cross-origin iframe geblokkeerd. print() is dan een alternatief als PoC.DOM sources & sinks
DOM sources & sinks
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.Wat kan je met XSS?
Wat kan je met XSS?
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.