diff --git a/src/pentesting-web/xss-cross-site-scripting/README.md b/src/pentesting-web/xss-cross-site-scripting/README.md
index f14c8f5f7..cecdd7dc0 100644
--- a/src/pentesting-web/xss-cross-site-scripting/README.md
+++ b/src/pentesting-web/xss-cross-site-scripting/README.md
@@ -4,64 +4,65 @@
## Metodologija
-1. Proverite da li se **bilo koja vrednost koju kontrolišete** (_parametri_, _putanja_, _zaglavlja_?, _kolačići_?) **odražava** u HTML-u ili se **koristi** od strane **JS** koda.
-2. **Pronađite kontekst** gde se odražava/koristi.
-3. Ako je **odraženo**
-1. Proverite **koje simbole možete koristiti** i u zavisnosti od toga, pripremite payload:
-1. U **sirovom HTML-u**:
-1. Možete li kreirati nove HTML tagove?
-2. Možete li koristiti događaje ili atribute koji podržavaju `javascript:` protokol?
-3. Možete li zaobići zaštite?
-4. Da li se HTML sadržaj interpretira od strane bilo kog klijentskog JS engine-a (_AngularJS_, _VueJS_, _Mavo_...), mogli biste zloupotrebiti [**Client Side Template Injection**](../client-side-template-injection-csti.md).
-5. Ako ne možete kreirati HTML tagove koji izvršavaju JS kod, možete li zloupotrebiti [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html)?
+1. Proveri da li je **bilo koja vrednost kojom upravljaš** (_parameters_, _path_, _headers_?, _cookies_?) **reflektovana** u HTML-u ili **korišćena** u **JS** kodu.
+2. Utvrdi **kontekst** u kome se reflektuje/korišćen je tvoj input.
+3. Ako je **reflektovano**
+1. Proveri **koje simbole možeš da koristiš** i u zavisnosti od toga, pripremi payload:
+1. U **raw HTML**:
+1. Možeš li da kreiraš nove HTML tagove?
+2. Možeš li da koristiš event-e ili atribute koji podržavaju `javascript:` protokol?
+3. Možeš li da zaobiđeš zaštite?
+4. Da li HTML sadržaj interpretira neki client side JS engine (_AngularJS_, _VueJS_, _Mavo_...), u tom slučaju možeš zloupotrebiti [**Client Side Template Injection**](../client-side-template-injection-csti.md).
+5. Ako ne možeš da kreiraš HTML tagove koji izvršavaju JS kod, možeš li zloupotrebiti [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html)?
2. Unutar **HTML taga**:
-1. Možete li izaći u kontekst sirovog HTML-a?
-2. Možete li kreirati nove događaje/atribute za izvršavanje JS koda?
-3. Da li atribut u kojem ste zarobljeni podržava izvršavanje JS-a?
-4. Možete li zaobići zaštite?
+1. Možeš li da izađeš u raw HTML kontekst?
+2. Možeš li da kreiraš nove event-e/atribute za izvršavanje JS koda?
+3. Da li atribut u kome si "zarobljen" podržava izvršavanje JS-a?
+4. Možeš li da zaobiđeš zaštite?
3. Unutar **JavaScript koda**:
-1. Možete li pobjeći iz ``** oznaka HTML stranice, unutar `.js` datoteke ili unutar atributa koristeći **`javascript:`** protokol:
+U ovom slučaju vaš unos se reflektuje između **``** tagova HTML stranice, unutar `.js` fajla ili unutar atributa koji koristi **`javascript:`** protokol:
-- Ako se odražava između **``** oznaka, čak i ako je vaš unos unutar bilo kakvih navodnika, možete pokušati da injektujete `` i pobegnete iz ovog konteksta. Ovo funkcioniše jer **pregledač prvo analizira HTML oznake** a zatim sadržaj, stoga neće primetiti da je vaša injektovana `` oznaka unutar HTML koda.
-- Ako se odražava **unutar JS stringa** i poslednji trik ne funkcioniše, potrebno je da **izađete** iz stringa, **izvršite** svoj kod i **rekonstruišete** JS kod (ako dođe do greške, neće biti izvršen):
+- Ako se reflektuje između **``** tagova, čak i ako je vaš unos unutar bilo koje vrste navodnika, možete pokušati da ubacite `` i izađete iz tog konteksta. Ovo funkcioniše jer **pregledač će prvo parsirati HTML tagove** pa zatim sadržaj, dakle, neće primetiti da je vaš ubačeni `` tag unutar HTML koda.
+- Ako se reflektuje **unutar JS stringa** i poslednji trik ne radi, moraćete da **izađete** iz stringa, **izvršite** svoj kod i **rekonstruišete** JS kod (ako postoji neka greška, on neće biti izvršen:
- `'-alert(1)-'`
- `';-alert(1)//`
- `\';alert(1)//`
-- Ako se odražava unutar template literals, možete **ugraditi JS izraze** koristeći `${ ... }` sintaksu: `` var greetings = `Hello, ${alert(1)}` ``
-- **Unicode kodiranje** funkcioniše za pisanje **validnog javascript koda**:
+- Ako se reflektuje unutar template literals možete **ugraditi JS izraze** koristeći `${ ... }` sintaksu: `` var greetings = `Hello, ${alert(1)}` ``
+- **Unicode encode** radi za pisanje **valid javascript code**:
```javascript
alert(1)
alert(1)
@@ -85,8 +86,8 @@ alert(1)
```
#### Javascript Hoisting
-Javascript Hoisting se odnosi na mogućnost da **deklarirate funkcije, promenljive ili klase nakon što su korišćene, tako da možete iskoristiti scenarije gde XSS koristi nedeklarisane promenljive ili funkcije.**\
-**Pogledajte sledeću stranicu za više informacija:**
+Javascript Hoisting references the opportunity to **declare functions, variables or classes after they are used so you can abuse scenarios where a XSS is using undeclared variables or functions.**\
+**Check the following page for more info:**
{{#ref}}
@@ -95,19 +96,19 @@ js-hoisting.md
### Javascript Function
-Nekoliko web stranica ima krajnje tačke koje **prihvataju kao parametar ime funkcije koja treba da se izvrši**. Uobičajen primer koji se može videti u praksi je nešto poput: `?callback=callbackFunc`.
+Several web pages have endpoints that **accept as parameter the name of the function to execute**. A common example to see in the wild is something like: `?callback=callbackFunc`.
-Dobar način da saznate da li nešto što je direktno dato od korisnika pokušava da se izvrši je **modifikovanje vrednosti parametra** (na primer na 'Vulnerable') i gledanje u konzoli za greške poput:
+A good way to find out if something given directly by the user is trying to be executed is **modifying the param value** (for example to 'Vulnerable') and looking in the console for errors like:
.png>)
-U slučaju da je ranjivo, mogli biste da **pokrenete alert** jednostavno slanjem vrednosti: **`?callback=alert(1)`**. Međutim, veoma je uobičajeno da će ove krajnje tačke **validirati sadržaj** kako bi dozvolile samo slova, brojeve, tačke i donje crte (**`[\w\._]`**).
+In case it's vulnerable, you could be able to **trigger an alert** just doing sending the value: **`?callback=alert(1)`**. However, it' very common that this endpoints will **validate the content** to only allow letters, numbers, dots and underscores (**`[\w\._]`**).
-Međutim, čak i sa tom ograničenjem, još uvek je moguće izvršiti neke radnje. To je zato što možete koristiti te validne karaktere da **pristupite bilo kojem elementu u DOM-u**:
+However, even with that limitation it's still possible to perform some actions. This is because you can use that valid chars to **access any element in the DOM**:
.png>)
-Neke korisne funkcije za ovo:
+Some useful functions for this:
```
firstElementChild
lastElementChild
@@ -115,11 +116,12 @@ nextElementSibiling
lastElementSibiling
parentElement
```
-Možete takođe pokušati da **pokrenete Javascript funkcije** direktno: `obj.sales.delOrders`.
+Možete takođe pokušati da direktno **pokrenete Javascript funkcije**: `obj.sales.delOrders`.
-Međutim, obično su krajnje tačke koje izvršavaju navedenu funkciju krajnje tačke bez mnogo zanimljivog DOM-a, **druge stranice u istom poreklu** će imati **zanimljiviji DOM** za izvođenje više akcija.
+Međutim, obično su endpointi koji izvršavaju naznačenu funkciju endpointi bez mnogo zanimljivog DOM-a; **other pages in the same origin** obično imaju **zanimljiviji DOM** za izvođenje dodatnih akcija.
+
+Zbog toga, kako bi se **iskoristila ova ranjivost u drugom DOM-u**, razvijena je eksploatacija **Same Origin Method Execution (SOME)**:
-Stoga, kako bi se **zloupotrebila ova ranjivost u različitom DOM-u**, razvijena je **Same Origin Method Execution (SOME)** eksploatacija:
{{#ref}}
some-same-origin-method-execution.md
@@ -127,36 +129,39 @@ some-same-origin-method-execution.md
### DOM
-Postoji **JS kod** koji **nebezbedno** koristi neke **podatke koje kontroliše napadač** kao što je `location.href`. Napadač bi mogao da zloupotrebi ovo da izvrši proizvoljan JS kod.
+Postoji **JS code** koji **nesigurno** koristi neke **podatke pod kontrolom napadača** kao što je `location.href`. Napadač to može zloupotrebiti da izvrši proizvoljan JS kod.
+
{{#ref}}
dom-xss.md
{{#endref}}
-### **Univerzalni XSS**
+### **Universal XSS**
-Ove vrste XSS mogu se naći **svuda**. Ne zavise samo od klijentske eksploatacije web aplikacije, već od **bilo kog** **konteksta**. Ove vrste **proizvoljnog izvršavanja JavaScript-a** mogu čak biti zloupotrebljene za dobijanje **RCE**, **čitanje** **proizvoljnih** **datoteka** na klijentima i serverima, i još mnogo toga.\
+Ovakve vrste XSS mogu se naći **bilo gde**. Ne zavise samo od iskorišćavanja klijenta web aplikacije već od **bilo kog** **konteksta**. Ovakva **arbitrary JavaScript execution** može čak biti zloupotrebljena za dobijanje **RCE**, **čitati** **proizvoljne** **fajlove** na klijentima i serverima, i još mnogo toga.\
Neki **primeri**:
+
{{#ref}}
server-side-xss-dynamic-pdf.md
{{#endref}}
+
{{#ref}}
../../network-services-pentesting/pentesting-web/electron-desktop-apps/
{{#endref}}
-## WAF zaobilaženje kodiranja slike
+## WAF bypass encoding image
.jpg>)
-## Umetanje unutar sirovog HTML-a
+## Injecting inside raw HTML
-Kada se vaš unos odražava **unutar HTML stranice** ili možete pobjeći i umetnuti HTML kod u ovom kontekstu, **prva** stvar koju treba da uradite je da proverite da li možete da zloupotrebite `<` da kreirate nove oznake: Samo pokušajte da **odrazite** taj **karakter** i proverite da li je **HTML kodiran** ili **izbrisan** ili ako je **odražen bez promena**. **Samo u poslednjem slučaju ćete moći da iskoristite ovaj slučaj**.\
+Kada je vaš unos reflektovan **inside the HTML page** ili možete izaći iz konteksta i ubaciti HTML kod u tom kontekstu, **prva** stvar koju treba da uradite je da proverite da li možete zloupotrebiti `<` za kreiranje novih tagova: jednostavno pokušajte da **reflektujete** taj **karakter** i proverite da li se **HTML enkoduje**, briše ili se **reflektuje bez izmena**. **Samo u poslednjem slučaju moći ćete da iskoristite ovu ranjivost**.\
Za ove slučajeve takođe **imajte na umu** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
-_**Napomena: HTML komentar se može zatvoriti koristeći\*\***\***\*`-->`\*\***\***\*ili \*\***`--!>`\*\*_
+_**Napomena: A HTML comment can be closed using\*\***\***\*`-->`\*\***\***\*or \*\***`--!>`\*\*_
-U ovom slučaju i ako se ne koristi crna/bela lista, mogli biste koristiti payload-e kao:
+U ovom slučaju i ako se ne koristi black/whitelisting, možete koristiti payloads like:
```html
` tagova ili između HTML događaja koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol.
+U tim slučajevima vaš **input** biće **reflektovan unutar JS koda** u `.js` fajlu ili između `` tagova ili između HTML events koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol.
-### Izbegavanje \` lako možete **izbeći zatvaranje `` možete lako **escape-ovati zatvaranje `
```
-Napomena da u ovom primeru **nismo čak ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije.
+Obratite pažnju da u ovom primeru mi **nismo čak ni zatvorili jednostruki navodnik**. To je zato što se **HTML parsiranje prvo vrši u pregledaču**, što podrazumeva identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a radi razumevanja i izvršavanja ugrađenih skripti obavlja se tek nakon toga.
### Unutar JS koda
-Ako se `<>` sanitizuju, još uvek možete **izbeći string** gde se vaš unos **nalazi** i **izvršiti proizvoljni JS**. Važno je **ispraviti JS sintaksu**, jer ako postoje bilo kakve greške, JS kod neće biti izvršen:
+Ako se `<>` sanitizuju, i dalje možete **escape the string** gde je vaš unos **located** i **execute arbitrary JS**. Važno je **fix JS syntax**, jer ako postoje bilo kakve greške, JS code se neće izvršiti:
```
'-alert(document.domain)-'
';alert(document.domain)//
\';alert(document.domain)//
```
-### Template literals \`\`
+#### JS-in-JS string break → inject → repair pattern
-Da biste konstruisali **nizove** osim jednostrukih i dvostrukih navodnika, JS takođe prihvata **backticks** **` `` `**. Ovo je poznato kao template literals jer omogućava **ugrađivanje JS izraza** koristeći `${ ... }` sintaksu.\
-Stoga, ako primetite da se vaš unos **reflektuje** unutar JS niza koji koristi backticks, možete zloupotrebiti sintaksu `${ ... }` da izvršite **arbitrarni JS kod**:
+Kada korisnički unos dospe unutar navedenog JavaScript string-a (npr. server-side echo u inline script), možete prekinuti string, inject kod i popraviti sintaksu kako bi parsiranje ostalo ispravno. Opšti kostur:
+```
+" // end original string
+; // safely terminate the statement
+ // attacker-controlled JS
+; a = " // repair and resume expected string/statement
+```
+Primer URL obrasca kada se ranjiv parametar reflektuje u JS stringu:
+```
+?param=test";;a="
+```
+Ovo izvršava napadačev JS bez potrebe da se dira HTML kontekst (pure JS-in-JS). Kombinujte sa blacklist bypasses ispod kada filters blokiraju keywords.
+
+### Template literals ``
+
+Da bi se konstruisali **strings**, pored single i double quotes, JS takođe prihvata **backticks** **` `` `**. Ovo je poznato kao template literals jer omogućavaju **embedded JS expressions** koristeći `${ ... }` sintaksu.\
+Dakle, ako otkrijete da je vaš input **reflected** unutar JS stringa koji koristi backticks, možete zloupotrebiti sintaksu `${ ... }` da izvršite **arbitrary JS code**:
Ovo se može **zloupotrebiti** koristeći:
```javascript
@@ -506,20 +526,35 @@ return loop
}
loop``
```
-### Izvršavanje kodova u kodiranom obliku
+### Izvršavanje enkodiranog koda
```html
This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
-**JavaScript novi redovi (iz** [**JavaScript novi red**](#javascript-new-lines) **trik)**
+**JavaScript new lines (iz** [**JavaScript new line**](#javascript-new-lines) **trika)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10)
@@ -594,7 +629,7 @@ console.log(log)
//Either the raw characters can be used or you can HTML encode them if they appear in SVG or HTML attributes:
```
-**Javascript unutar komentara**
+**Javascript u komentaru**
```javascript
//If you can only inject inside a JS comment, you can still leak something
//If the user opens DevTools request to the indicated sourceMappingURL will be send
@@ -740,47 +775,47 @@ top['al\x65rt'](1)
top[8680439..toString(30)](1)
```
-## **DOM ranjivosti**
+## **DOM vulnerabilities**
-Postoji **JS kod** koji koristi **nesigurne podatke koje kontroliše napadač** kao što je `location.href`. Napadač može iskoristiti ovo da izvrši proizvoljan JS kod.\
-**Zbog proširenja objašnjenja o** [**DOM ranjivostima, premešteno je na ovu stranicu**](dom-xss.md)**:**
+Postoji **JS code** koji koristi **nebezbedne podatke koje kontroliše napadač** kao što je `location.href`. Napadač može iskoristiti ovo za izvršavanje proizvoljnog JS koda.\
+**Zbog obimnosti objašnjenja** [**DOM vulnerabilities it was moved to this page**](dom-xss.md)**:**
{{#ref}}
dom-xss.md
{{#endref}}
-Tamo ćete pronaći detaljno **objašnjenje šta su DOM ranjivosti, kako se izazivaju i kako ih iskoristiti**.\
-Takođe, ne zaboravite da **na kraju pomenutog posta** možete pronaći objašnjenje o [**DOM Clobbering napadima**](dom-xss.md#dom-clobbering).
+Tamo ćete naći detaljno **objašnjenje šta su DOM vulnerabilities, kako nastaju, i kako ih eksploatisati**.\
+Takođe, ne zaboravite da **na kraju pomenutog posta** možete pronaći objašnjenje o [**DOM Clobbering attacks**](dom-xss.md#dom-clobbering).
-### Unapređenje Self-XSS
+### Upgrading Self-XSS
### Cookie XSS
-Ako možete izazvati XSS slanjem payload-a unutar kolačića, to je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste iskoristiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing:
+Ako možete pokrenuti XSS slanjem payload-a unutar cookie-ja, to je obično self-XSS. Međutim, ako pronađete **vulnerable subdomain to XSS**, možete zloupotrebiti ovaj XSS da ubacite cookie za ceo domen i time pokrenete cookie XSS u glavnom domenu ili drugim poddomenima (onima ranjivim na cookie XSS). Za ovo možete koristiti cookie tossing attack:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
{{#endref}}
-Možete pronaći sjajan primer zloupotrebe ove tehnike u [**ovom blog postu**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html).
+Možete pronaći odličan primer zloupotrebe ove tehnike u [**this blog post**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html).
-### Slanje vaše sesije administratoru
+### Sending your session to the admin
-Možda korisnik može podeliti svoj profil sa administratorom i ako je self XSS unutar profila korisnika, a administrator mu pristupi, on će aktivirati ranjivost.
+Moguće je da korisnik podeli svoj profil sa adminom i ako se self XSS nalazi u profilu korisnika i admin mu pristupi, admin će aktivirati ranjivost.
-### Odbijanje sesije
+### Session Mirroring
-Ako pronađete neki self XSS i web stranica ima **odbacivanje sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, a da bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije.
+Ako pronađete self XSS i web stranica ima **session mirroring for administrators**, na primer omogućavajući klijentima da traže pomoć, admin da bi vam pomogao videće ono što vi vidite u svojoj sesiji ali iz njegove sesije.
-Možete naterati **administratora da aktivira vaš self XSS** i ukrade njegove kolačiće/sesiju.
+Možete navesti **administrator trigger your self XSS** i ukrasti njegove cookies/session.
-## Ostali Bypasses
+## Other Bypasses
-### Normalizovani Unicode
+### Normalised Unicode
-Možete proveriti da li se **reflektovane vrednosti** normalizuju u **unicode** na serveru (ili na klijentskoj strani) i zloupotrebiti ovu funkcionalnost da zaobiđete zaštite. [**Pronađite primer ovde**](../unicode-injection/index.html#xss-cross-site-scripting).
+Možete proveriti da li su **reflected values** unicode normalized na serveru (ili na klijentskoj strani) i zloupotrebiti ovu funkcionalnost da zaobiđete zaštite. [**Find an example here**](../unicode-injection/index.html#xss-cross-site-scripting).
### PHP FILTER_VALIDATE_EMAIL flag Bypass
```javascript
@@ -788,18 +823,18 @@ Možete proveriti da li se **reflektovane vrednosti** normalizuju u **unicode**
```
### Ruby-On-Rails bypass
-Zbog **RoR masovne dodeljivanje** navodnici se ubacuju u HTML i tada se zaobilaže ograničenja navodnika, a dodatna polja (onfocus) mogu se dodati unutar taga.\
-Primer forme ([from this report](https://hackerone.com/reports/709336)), ako pošaljete payload:
+Zbog **RoR mass assignment** navodnici se ubacuju u HTML i onda je ograničenje navodnika zaobiđeno i dodatna polja (onfocus) mogu se dodati unutar taga.\
+Primer formulara ([from this report](https://hackerone.com/reports/709336)), ako pošaljete payload:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
-Par "Ključ","Vrednost" će biti vraćen ovako:
+Par "Key","Value" biće vraćen ovako:
```
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
```
-Zatim će biti umetnut onfocus atribut i XSS se dešava.
+Zatim će atribut onfocus biti umetnut i doći će do XSS.
-### Posebne kombinacije
+### Specijalne kombinacije
```html