* Trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? ou gostaria de 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****🐦**[**@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).
**Apenas** certos elementos podem usar o atributo **name** para sobrescrever variáveis globais, eles são: `embed`, `form`, `iframe`, `image`, `img` e `object`.
Curiosamente, quando você usa um **elemento de formulário** para **sobrescrever** uma variável, você obterá o valor de **`toString`** do próprio elemento: `[object HTMLFormElement]` mas com **âncora** o **`toString`** será o **`href`** da âncora. Portanto, se você sobrescrever usando a tag **`a`**, você pode **controlar** o **valor** quando ele é **tratado como uma string**:
Se um filtro está **iterando** pelas **propriedades** de um nó usando algo como `document.getElementByID('x').attributes`, você poderia **sobrescrever** o atributo **`.attributes`** e **quebrar o filtro**. Outras propriedades do DOM como **`tagName`**, **`nodeName`** ou **`parentNode`** e mais também são **sobrescritíveis**.
Manipular o HTML na página permite substituir `someObject` por um nó DOM, potencialmente introduzindo vulnerabilidades de segurança. Por exemplo, você pode substituir `someObject` por um elemento de âncora apontando para um script malicioso:
**Truque**: **`DOMPurify`** permite que você use o protocolo **`cid:`**, que **não codifica em URL as aspas duplas**. Isso significa que você pode **injetar uma aspa dupla codificada que será decodificada em tempo de execução**. Portanto, injetar algo como **`<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:"onerror=alert(1)//">`** fará com que o `"` codificado em HTML seja **decodificado em tempo de execução** e **escapará** do valor do atributo para **criar** o evento **`onerror`**.
Outra técnica usa um elemento **`form`**. Certas bibliotecas do lado do cliente inspecionam os atributos de um elemento de formulário recém-criado para limpá-los. No entanto, ao adicionar um `input` com `id=attributes` dentro do formulário, você efetivamente sobrescreve a propriedade de atributos, impedindo o sanitizador de acessar os atributos reais.
> A interface [Document](https://html.spec.whatwg.org/multipage/dom.html#document) [suporta propriedades nomeadas](https://webidl.spec.whatwg.org/#dfn-support-named-properties). Os [nomes de propriedades suportados](https://webidl.spec.whatwg.org/#dfn-supported-property-names) de um objeto [Document](https://html.spec.whatwg.org/multipage/dom.html#document) document em qualquer momento consistem no seguinte, em [ordem de árvore](https://dom.spec.whatwg.org/#concept-tree-order) de acordo com o elemento que os contribuiu, ignorando duplicatas posteriores, e com valores dos atributos [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) vindo antes dos valores dos atributos name quando o mesmo elemento contribui com ambos:
> \- O valor do atributo de conteúdo name para todos os elementos [expostos](https://html.spec.whatwg.org/multipage/dom.html#exposed) [embed](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-embed-element), [form](https://html.spec.whatwg.org/multipage/forms.html#the-form-element), [iframe](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element), [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element) e elementos [expostos](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) que têm um atributo de conteúdo name não vazio e estão [em uma árvore de documentos](https://dom.spec.whatwg.org/#in-a-document-tree) com o documento como seu [root](https://dom.spec.whatwg.org/#concept-tree-root);\
> \- O valor do atributo de conteúdo [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) para todos os elementos [expostos](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) que têm um atributo de conteúdo [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) não vazio e estão [em uma árvore de documentos](https://dom.spec.whatwg.org/#in-a-document-tree) com o documento como seu [root](https://dom.spec.whatwg.org/#concept-tree-root);\
> \- O valor do atributo de conteúdo [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) para todos os elementos [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element) que têm tanto um atributo de conteúdo [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) não vazio quanto um atributo de conteúdo name não vazio, e estão [em uma árvore de documentos](https://dom.spec.whatwg.org/#in-a-document-tree) com o documento como seu [root](https://dom.spec.whatwg.org/#concept-tree-root).
Usando essa técnica, você pode sobrescrever valores comumente usados como `document.cookie`, `document.body`, `document.children` e até métodos na interface Document como `document.querySelector`.
Os resultados das chamadas para **`document.getElementById()`** e **`document.querySelector()`** podem ser alterados injetando uma tag `<html>` ou `<body>` com um atributo id idêntico. Veja como pode ser feito:
Além disso, ao empregar estilos para ocultar essas tags HTML/body injetadas, a interferência de outros textos no `innerText` pode ser evitada, aumentando assim a eficácia do ataque:
É possível adicionar **novas entradas dentro de um formulário** apenas especificando o atributo `form` dentro de algumas tags. Você pode usar isso para **adicionar novos valores dentro de um formulário** e até mesmo adicionar um novo **botão** para **enviá-lo** (clickjacking ou abusando de algum código JS `.click()`):
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique 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).