* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você 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** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
> Uma fonte é uma propriedade JavaScript que aceita dados potencialmente controlados pelo atacante. Um exemplo de fonte é a propriedade `location.search` porque ela lê a entrada da string de consulta, que é relativamente simples para um atacante controlar. Em última análise, qualquer propriedade que possa ser controlada pelo atacante é uma fonte potencial. Isso inclui o URL de referência (exposto pela string `document.referrer`), os cookies do usuário (expostos pela string `document.cookie`) e mensagens da web.
> Um dreno é uma função JavaScript ou objeto DOM potencialmente perigoso que pode causar efeitos indesejáveis se dados controlados pelo atacante forem passados para ele. Por exemplo, a função `eval()` é um dreno porque processa o argumento que lhe é passado como JavaScript. Um exemplo de dreno HTML é `document.body.innerHTML` porque potencialmente permite que um atacante injete HTML malicioso e execute JavaScript arbitrário.
Fundamentalmente, as vulnerabilidades baseadas em DOM surgem quando um site **passa dados de uma fonte para um dreno**, que então manipula os dados de maneira insegura no contexto da sessão do cliente.
**Você pode encontrar uma lista mais atualizada de fontes e drenos em** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki)
| [**Redirecionamento Aberto**](dom-xss.md#open-redirect) | [**Injeção de Javascript**](dom-xss.md#javascript-injection) | [**Manipulação de Dados DOM**](dom-xss.md#dom-data-manipulation) | **jQuery** |
| `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**Injeção de JSON do lado do cliente**](dom-xss.md#client-side-sql-injection) |
| [**Injeção de SQL do lado do cliente**](dom-xss.md#client-side-sql-injection) | [**Manipulação de Mensagem Web**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` |
O **sink `innerHTML`** não aceita elementos `script` em nenhum navegador moderno, nem os eventos `svg onload` serão disparados. Isso significa que você precisará usar elementos alternativos como `img` ou `iframe`.
Esse tipo de XSS é provavelmente o **mais difícil de encontrar**, pois você precisa olhar dentro do código JS, ver se ele está **usando** algum objeto cujo **valor você controla**, e nesse caso, ver se há **alguma maneira de abusar** dele para executar JS arbitrário.
As vulnerabilidades de redirecionamento aberto baseadas em DOM surgem quando um script grava dados controlados pelo atacante em um sink que pode acionar navegação entre domínios.
Lembre-se de que **se você puder iniciar a URL** para onde a vítima será **redirecionada**, você poderá executar **código arbitrário** como: **`javascript:alert(1)`**
As vulnerabilidades de manipulação de cookies baseadas em DOM ocorrem quando um script escreve **dados controláveis pelo atacante no valor de um cookie**.\
Isso pode ser abusado para fazer com que a página se comporte de maneira inesperada (se o cookie for usado na web) ou para realizar um ataque de [fixação de sessão](../hacking-with-cookies/#session-fixation) (se o cookie for usado para rastrear a sessão do usuário).
De: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation)
As vulnerabilidades de manipulação de document-domain surgem quando um script usa dados controlados pelo atacante para definir a propriedade **`document.domain`**.
A propriedade `document.domain` é usada pelos navegadores em sua **aplicação** da **política de mesma origem**. Se **duas páginas** de **origens diferentes** definirem explicitamente o **mesmo valor de `document.domain`**, então essas duas páginas podem **interagir de maneiras não restritas**.\
Os navegadores **geralmente impõem algumas restrições** aos valores que podem ser atribuídos a `document.domain` e podem impedir o uso de valores completamente diferentes da origem real da página. **Mas isso nem sempre ocorre** e geralmente **permitem o uso de domínios filho** ou **pai**.
As vulnerabilidades de manipulação de link baseadas em DOM surgem quando um script escreve **dados controláveis pelo atacante em um destino de navegação** dentro da página atual, como um link clicável ou a URL de envio de um formulário.
De: [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation)
As vulnerabilidades de manipulação de requisição Ajax surgem quando um script escreve **dados controláveis pelo atacante em uma requisição Ajax** que é emitida usando um objeto `XmlHttpRequest`.
De: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation)
As vulnerabilidades de manipulação de caminho de arquivo local surgem quando um script passa dados controláveis pelo atacante para uma API de manipulação de arquivo como parâmetro `filename`. Um atacante pode usar essa vulnerabilidade para construir uma URL que, se visitada por outro usuário, fará com que o **navegador do usuário abra/escreva um arquivo local arbitrário**.
De: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection)
As vulnerabilidades de injeção de SQL do lado do cliente surgem quando um script incorpora dados controláveis pelo atacante em uma consulta de SQL do lado do cliente de maneira insegura.
De: [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation)
As vulnerabilidades de manipulação de armazenamento HTML5 surgem quando um script **armazena dados controlados pelo atacante no armazenamento HTML5** do navegador da web (seja `localStorage` ou `sessionStorage`).\
Este **comportamento não constitui, em si, uma vulnerabilidade de segurança**. No entanto, se a aplicação posteriormente **ler dados de volta do armazenamento e processá-los de maneira insegura**, um atacante pode ser capaz de alavancar o mecanismo de armazenamento para entregar outros ataques baseados em DOM, como cross-site scripting e injeção de JavaScript.
De: [https://portswigger.net/web-security/dom-based/client-side-xpath-injection](https://portswigger.net/web-security/dom-based/client-side-xpath-injection)
De: [https://portswigger.net/web-security/dom-based/client-side-json-injection](https://portswigger.net/web-security/dom-based/client-side-json-injection)
As vulnerabilidades de injeção de JSON baseadas em DOM ocorrem quando um script incorpora **dados controláveis pelo atacante em uma string que é analisada como uma estrutura de dados JSON e, em seguida, processada pela aplicação**.
As vulnerabilidades de mensagens da web surgem quando um script envia dados controláveis pelo atacante como uma mensagem da web para outro documento dentro do navegador.\
**Exemplo** de manipulação vulnerável de mensagens da web em [https://portswigger.net/web-security/dom-based/controlling-the-web-message-source](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source)
O método `postMessage()` para enviar mensagens da web pode levar a vulnerabilidades se o ouvinte de eventos para receber mensagens manipula os dados recebidos de forma insegura.
As vulnerabilidades de manipulação de dados do DOM surgem quando um script escreve dados controláveis pelo atacante em um campo dentro do DOM que é usado na interface do usuário visível ou na lógica do lado do cliente. Um atacante pode ser capaz de usar essa vulnerabilidade para construir uma URL que, se visitada por outro usuário, modificará a aparência ou o comportamento da interface do usuário do lado do cliente.
As vulnerabilidades de negação de serviço baseadas em DOM ocorrem quando um script passa **dados controláveis pelo atacante de maneira insegura para uma API problemática da plataforma**, como uma API cuja invocação pode fazer com que o computador do usuário consuma **quantidades excessivas de CPU ou espaço em disco**. Isso pode resultar em efeitos colaterais se o navegador restringir a funcionalidade do site, por exemplo, rejeitando tentativas de armazenar dados em `localStorage` ou matando scripts ocupados.
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você 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 do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).