diff --git a/src/pentesting-web/xss-cross-site-scripting/README.md b/src/pentesting-web/xss-cross-site-scripting/README.md
index e4a05951e..4c4b3fc63 100644
--- a/src/pentesting-web/xss-cross-site-scripting/README.md
+++ b/src/pentesting-web/xss-cross-site-scripting/README.md
@@ -4,32 +4,33 @@
## Metodologia
-1. Verifique se **qualquer valor que você controla** (_parâmetros_, _caminho_, _cabeçalhos_?, _cookies_?) está sendo **refletido** no HTML ou **usado** pelo código **JS**.
-2. **Encontre o contexto** onde está refletido/usado.
-3. Se **refletido**
-1. Verifique **quais símbolos você pode usar** e, dependendo disso, prepare o payload:
-1. Em **HTML bruto**:
-1. Você pode criar novas tags HTML?
-2. Você pode usar eventos ou atributos que suportam o protocolo `javascript:`?
-3. Você pode contornar proteções?
-4. O conteúdo HTML está sendo interpretado por algum mecanismo JS do lado do cliente (_AngularJS_, _VueJS_, _Mavo_...), você poderia abusar de uma [**Injeção de Template do Lado do Cliente**](../client-side-template-injection-csti.md).
-5. Se você não puder criar tags HTML que executem código JS, poderia abusar de uma [**Injeção de Marcação Pendente - HTML sem script**](../dangling-markup-html-scriptless-injection/index.html)?
+1. Verifique se **qualquer valor que você controla** (_parameters_, _path_, _headers_?, _cookies_?) está sendo **refletido** no HTML ou **usado** por código **JS**.
+2. **Encontre o contexto** onde ele é refletido/usado.
+3. Se for **refletido**
+1. Verifique **quais símbolos você pode usar** e dependendo disso, prepare o payload:
+1. Em **raw HTML**:
+1. Você consegue criar novas tags HTML?
+2. Você pode usar eventos ou atributos que suportem o protocolo `javascript:`?
+3. Você consegue contornar proteções?
+4. O conteúdo HTML está sendo interpretado por algum engine JS client side (_AngularJS_, _VueJS_, _Mavo_...), você poderia abusar de um [**Client Side Template Injection**](../client-side-template-injection-csti.md).
+5. Se você não consegue criar tags HTML que executem código JS, poderia abusar de um [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html)?
2. Dentro de uma **tag HTML**:
-1. Você pode sair para o contexto HTML bruto?
-2. Você pode criar novos eventos/atributos para executar código JS?
-3. O atributo onde você está preso suporta execução de JS?
-4. Você pode contornar proteções?
-3. Dentro do **código JavaScript**:
-1. Você pode escapar da tag ``** de uma página HTML, dentro de um arquivo `.js` ou dentro de um atributo usando o protocolo **`javascript:`**:
+Neste caso sua entrada é refletida entre **``** tags de uma página HTML, dentro de um arquivo `.js` ou dentro de um atributo usando o protocolo **`javascript:`**:
-- Se refletido entre as tags **``**, mesmo que sua entrada esteja dentro de qualquer tipo de aspas, você pode tentar injetar `` e escapar desse contexto. Isso funciona porque o **navegador primeiro analisará as tags HTML** e depois o conteúdo, portanto, não notará que sua tag injetada `` está dentro do código HTML.
-- Se refletido **dentro de uma string JS** e o último truque não estiver funcionando, você precisaria **sair** da string, **executar** seu código e **reconstruir** o código JS (se houver algum erro, ele não será executado):
+- Se for refletido entre **``** tags, mesmo que sua entrada esteja dentro de quaisquer aspas, você pode tentar injetar `` e escapar desse contexto. Isso funciona porque o **navegador primeiro irá parsear as tags HTML** e depois o conteúdo, portanto, ele não perceberá que sua tag injetada `` está dentro do código HTML.
+- Se for refletido **dentro de uma string JS** e o truque anterior não estiver funcionando, você precisará **sair** da string, **executar** seu código e **reconstruir** o código JS (se houver qualquer erro, ele não será executado:
- `'-alert(1)-'`
- `';-alert(1)//`
- `\';alert(1)//`
-- Se refletido dentro de literais de template, você pode **incorporar expressões JS** usando a sintaxe `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
-- **Codificação Unicode** funciona para escrever **código javascript válido**:
+- Se for refletido dentro de template literals você pode **embed JS expressions** usando a sintaxe `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
+- **Unicode encode** works to write **valid javascript code**:
```javascript
alert(1)
alert(1)
@@ -85,8 +86,8 @@ alert(1)
```
#### Javascript Hoisting
-Javascript Hoisting refere-se à oportunidade de **declarar funções, variáveis ou classes após serem usadas, para que você possa abusar de cenários onde um XSS está usando variáveis ou funções não declaradas.**\
-**Verifique a página a seguir para mais informações:**
+Javascript Hoisting refere-se à oportunidade de **declarar funções, variáveis ou classes depois de serem usadas, permitindo que você abuse cenários em que um XSS esteja usando variáveis ou funções não declaradas.**\
+**Check the following page for more info:**
{{#ref}}
@@ -95,15 +96,15 @@ js-hoisting.md
### Javascript Function
-Várias páginas da web têm endpoints que **aceitam como parâmetro o nome da função a ser executada**. Um exemplo comum de se ver na prática é algo como: `?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`.
-Uma boa maneira de descobrir se algo fornecido diretamente pelo usuário está tentando ser executado é **modificando o valor do parâmetro** (por exemplo, para 'Vulnerable') e procurando no console por erros como:
+Uma boa maneira de descobrir se algo fornecido diretamente pelo usuário está sendo executado é **modificar o valor do parâmetro** (por exemplo para 'Vulnerable') e procurar no console por erros como:
.png>)
-Caso seja vulnerável, você poderá **disparar um alerta** apenas enviando o valor: **`?callback=alert(1)`**. No entanto, é muito comum que esses endpoints **validem o conteúdo** para permitir apenas letras, números, pontos e sublinhados (**`[\w\._]`**).
+Caso seja vulnerável, você poderia **disparar um alert** simplesmente enviando o valor: **`?callback=alert(1)`**. No entanto, é muito comum que esses endpoints **validem o conteúdo** para permitir apenas letras, números, pontos e underscores (**`[\w\._]`**).
-No entanto, mesmo com essa limitação, ainda é possível realizar algumas ações. Isso ocorre porque você pode usar esses caracteres válidos para **acessar qualquer elemento no DOM**:
+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>)
@@ -115,11 +116,12 @@ nextElementSibiling
lastElementSibiling
parentElement
```
-Você também pode tentar **disparar funções Javascript** diretamente: `obj.sales.delOrders`.
+Você também pode tentar **acionar funções Javascript** diretamente: `obj.sales.delOrders`.
-No entanto, geralmente os endpoints que executam a função indicada são endpoints sem muito DOM interessante, **outras páginas na mesma origem** terão um **DOM mais interessante** para realizar mais ações.
+No entanto, normalmente os endpoints que executam a função indicada são endpoints sem um DOM muito interessante, **outras páginas na mesma origem** terão um **DOM mais interessante** para realizar mais ações.
+
+Portanto, para **abusar dessa vulnerabilidade em um DOM diferente** a exploração **Same Origin Method Execution (SOME)** foi desenvolvida:
-Portanto, para **abusar dessa vulnerabilidade em um DOM diferente**, a exploração **Same Origin Method Execution (SOME)** foi desenvolvida:
{{#ref}}
some-same-origin-method-execution.md
@@ -127,7 +129,8 @@ some-same-origin-method-execution.md
### DOM
-Há **código JS** que está usando **inseguramente** alguns **dados controlados por um atacante** como `location.href`. Um atacante poderia abusar disso para executar código JS arbitrário.
+Existe **JS code** que está usando de forma **insegura** alguns **dados controlados por um atacante** como `location.href`. Um atacante pode abusar disso para executar código JS arbitrário.
+
{{#ref}}
dom-xss.md
@@ -135,28 +138,30 @@ dom-xss.md
### **Universal XSS**
-Esse tipo de XSS pode ser encontrado **em qualquer lugar**. Eles não dependem apenas da exploração do cliente de uma aplicação web, mas de **qualquer** **contexto**. Esse tipo de **execução arbitrária de JavaScript** pode até ser abusado para obter **RCE**, **ler** **arquivos** **arbitrários** em clientes e servidores, e mais.\
+Esse tipo de XSS pode ser encontrado **em qualquer lugar**. Não dependem apenas da exploração no cliente de uma aplicação web, mas de **qualquer** **contexto**. Esse tipo de **execução arbitrária de JavaScript** pode até ser abusado para obter **RCE**, **ler** **arquivos** **arbitrários** em clientes e servidores, e mais.\
Alguns **exemplos**:
+
{{#ref}}
server-side-xss-dynamic-pdf.md
{{#endref}}
+
{{#ref}}
../../network-services-pentesting/pentesting-web/electron-desktop-apps/
{{#endref}}
-## Bypass de WAF codificando imagem
+## WAF bypass encoding image
.jpg>)
-## Injetando dentro do HTML bruto
+## Injecting inside raw HTML
-Quando sua entrada é refletida **dentro da página HTML** ou você pode escapar e injetar código HTML nesse contexto, a **primeira** coisa que você precisa fazer é verificar se pode abusar de `<` para criar novas tags: Basta tentar **refletir** esse **caractere** e verificar se está sendo **HTML codificado** ou **deletado** ou se está **refletido sem alterações**. **Somente no último caso você poderá explorar esse caso**.\
-Para esses casos, também **tenha em mente** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
+Quando seu input é refletido **dentro da página HTML** ou você pode escapar e injetar código HTML nesse contexto a **primeira** coisa que você precisa fazer é verificar se você pode abusar de `<` para criar novas tags: apenas tente **refletir** esse **char** e verifique se está sendo **HTML encoded** ou **deletado** ou se é **refletido sem alterações**. **Somente no último caso você poderá explorar essa situação**.\
+Para esses casos também **lembre-se** de [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
_**Nota: Um comentário HTML pode ser fechado usando\*\***\***\*`-->`\*\***\***\*ou \*\***`--!>`\*\*_
-Nesse caso e se nenhuma lista negra/branca for usada, você poderia usar payloads como:
+Nesse caso e se não for usado black/whitelisting, você pode usar payloads como:
```html
` ou entre eventos HTML que podem executar código JS ou entre atributos que aceitam o protocolo `javascript:`.
+Nesse caso sua **entrada** será **refletida dentro do código JS** de um arquivo `.js` ou entre `` tags ou entre eventos HTML que podem executar código JS ou entre atributos que aceitam o protocolo `javascript:`.
### Escapando a tag \` você pode facilmente **escapar fechando a tag `` você pode facilmente **escapar fechando a tag `
```
-Note que neste exemplo **não fechamos nem mesmo a aspa simples**. Isso ocorre porque **a análise de HTML é realizada primeiro pelo navegador**, o que envolve identificar elementos da página, incluindo blocos de script. A análise de JavaScript para entender e executar os scripts incorporados é realizada apenas depois.
+Observe que neste exemplo nós **nem sequer fechamos a aspa simples**. Isso acontece porque **a análise HTML é realizada primeiro pelo navegador**, o que envolve identificar elementos da página, incluindo blocos de script. A análise de JavaScript para entender e executar os scripts incorporados só é realizada posteriormente.
### Dentro do código JS
-Se `<>` estão sendo sanitizados, você ainda pode **escapar a string** onde sua entrada está **localizada** e **executar JS arbitrário**. É importante **corrigir a sintaxe do JS**, porque se houver erros, o código JS não será executado:
+Se `<>` estiverem sendo sanitizados, você ainda pode **escapar a string** onde sua entrada está **localizada** e **executar JS arbitrário**. É importante **corrigir a sintaxe JS**, porque se houver erros, o código JS não será executado:
```
'-alert(document.domain)-'
';alert(document.domain)//
\';alert(document.domain)//
```
-### Template literals \`\`
+#### JS-in-JS string break → inject → repair pattern
-Para construir **strings** além de aspas simples e duplas, o JS também aceita **backticks** **` `` `**. Isso é conhecido como template literals, pois permite **expressões JS embutidas** usando a sintaxe `${ ... }`.\
-Portanto, se você descobrir que sua entrada está sendo **refletida** dentro de uma string JS que está usando backticks, você pode abusar da sintaxe `${ ... }` para executar **código JS arbitrário**:
+Quando a entrada do usuário cai dentro de uma string JavaScript entre aspas (e.g., server-side echo into an inline script), você pode terminar a string, injetar código e reparar a sintaxe para manter o parsing válido. Esqueleto genérico:
+```
+" // end original string
+; // safely terminate the statement
+ // attacker-controlled JS
+; a = " // repair and resume expected string/statement
+```
+Exemplo de padrão de URL quando o parâmetro vulnerável é refletido em uma string JS:
+```
+?param=test";;a="
+```
+Isto executa attacker JS sem precisar tocar no contexto HTML (JS-in-JS puro). Combine com blacklist bypasses abaixo quando filtros bloquearem palavras-chave.
-Isso pode ser **abusado** usando:
+### Template literals ``
+
+Para construir **strings** além de aspas simples e duplas, o JS também aceita **backticks** **` `` `**. Isto é conhecido como template literals, pois permitem **embedded JS expressions** usando a sintaxe `${ ... }`.\
+Portanto, se você encontrar que sua entrada está sendo **reflected** dentro de uma string JS que usa backticks, você pode abusar da sintaxe `${ ... }` para executar **arbitrary JS code**:
+
+Isso pode ser **abused** usando:
```javascript
;`${alert(1)}``${`${`${`${alert(1)}`}`}`}`
```
@@ -513,13 +533,28 @@ loop``
This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
-**Quebras de linha em JavaScript (do** [**truque de quebra de linha em JavaScript**](#javascript-new-lines) **)**
+**JavaScript quebras de linha (do** [**JavaScript new line**](#javascript-new-lines) **truque)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10)
@@ -577,7 +612,7 @@ alert("//\u2028alert(1)") //0xe2 0x80 0xa8
String.fromCharCode(8233)
alert("//\u2029alert(1)") //0xe2 0x80 0xa9
```
-**Espaços em branco do JavaScript**
+**Espaços em branco em JavaScript**
```javascript
log=[];
function funct(){}
@@ -680,7 +715,7 @@ try{throw onerror=alert}catch{throw 1}
- [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)
-**Chamada de função arbitrária (alert)**
+**Chamada arbitrária de função (alert)**
```javascript
//Eval like functions
eval('ale'+'rt(1)')
@@ -740,64 +775,64 @@ top['al\x65rt'](1)
top[8680439..toString(30)](1)
```
-## **Vulnerabilidades DOM**
+## **DOM vulnerabilities**
-Há **código JS** que está usando **dados controlados de forma insegura por um atacante** como `location.href`. Um atacante pode abusar disso para executar código JS arbitrário.\
-**Devido à extensão da explicação sobre** [**vulnerabilidades DOM, ela foi movida para esta página**](dom-xss.md)**:**
+Há código **JS** que está usando **dados inseguros controlados por um atacante** como `location.href`. Um atacante pode abusar disso para executar código JS arbitrário.\
+**Devido à extensão da explicação de** [**DOM vulnerabilities it was moved to this page**](dom-xss.md)**:**
{{#ref}}
dom-xss.md
{{#endref}}
-Lá você encontrará uma **explicação detalhada sobre o que são vulnerabilidades DOM, como são provocadas e como explorá-las**.\
-Além disso, não se esqueça que **no final do post mencionado** você pode encontrar uma explicação sobre [**ataques de DOM Clobbering**](dom-xss.md#dom-clobbering).
+Lá você encontrará uma **explicação detalhada do que são as DOM vulnerabilities, como são provocadas e como explorá-las**.\
+Além disso, não se esqueça que **no final do post mencionado** você pode encontrar uma explicação sobre [**DOM Clobbering attacks**](dom-xss.md#dom-clobbering).
-### Atualizando Self-XSS
+### Escalonando Self-XSS
### Cookie XSS
-Se você puder acionar um XSS enviando a carga útil dentro de um cookie, isso geralmente é um self-XSS. No entanto, se você encontrar um **subdomínio vulnerável a XSS**, poderá abusar desse XSS para injetar um cookie em todo o domínio, conseguindo acionar o cookie XSS no domínio principal ou em outros subdomínios (aqueles vulneráveis a cookie XSS). Para isso, você pode usar o ataque de cookie tossing:
+Se você consegue disparar um XSS enviando o payload dentro de um cookie, isso geralmente é um self-XSS. No entanto, se você encontrar um **subdomínio vulnerável a XSS**, você pode abusar desse XSS para injetar um cookie em todo o domínio, conseguindo acionar o cookie XSS no domínio principal ou em outros subdomínios (aqueles vulneráveis a cookie XSS). Para isso você pode usar o cookie tossing attack:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
{{#endref}}
-Você pode encontrar um grande abuso dessa técnica em [**este post do blog**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html).
+You can find a great abuse of this technique in [**this blog post**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html).
### Enviando sua sessão para o admin
Talvez um usuário possa compartilhar seu perfil com o admin e, se o self XSS estiver dentro do perfil do usuário e o admin acessá-lo, ele acionará a vulnerabilidade.
-### Espelhamento de Sessão
+### Session Mirroring
-Se você encontrar algum self XSS e a página da web tiver um **espelhamento de sessão para administradores**, por exemplo, permitindo que os clientes peçam ajuda, para que o admin possa ajudá-lo, ele verá o que você está vendo em sua sessão, mas a partir de sua sessão.
+Se você encontrar algum self XSS e a página web tiver um **session mirroring for administrators**, por exemplo permitindo que clientes peçam ajuda e, para o admin ajudá-lo, ele verá o que você está vendo na sua sessão mas a partir da sessão dele.
-Você poderia fazer o **administrador acionar seu self XSS** e roubar seus cookies/sessão.
+Você poderia fazer com que o **administrador acionasse seu self XSS** e roubar seus cookies/sessão.
-## Outros Bypasses
+## Other Bypasses
-### Unicode Normalizado
+### Normalised Unicode
-Você poderia verificar se os **valores refletidos** estão sendo **normalizados em unicode** no servidor (ou no lado do cliente) e abusar dessa funcionalidade para contornar proteções. [**Encontre um exemplo aqui**](../unicode-injection/index.html#xss-cross-site-scripting).
+Você pode verificar se os **reflected values** estão sendo **unicode normalized** no servidor (ou no client side) e abusar dessa funcionalidade para contornar proteções. [**Find an example here**](../unicode-injection/index.html#xss-cross-site-scripting).
-### Bypass do flag PHP FILTER_VALIDATE_EMAIL
+### PHP FILTER_VALIDATE_EMAIL flag Bypass
```javascript
">