hacktricks/pentesting-web/xss-cross-site-scripting/some-same-origin-method-execution.md

70 lines
5.5 KiB
Markdown
Raw Normal View History

# SOME - Execução de Método de Mesma Origem
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-06-23 12:12:25 +00:00
<details>
<summary>Support HackTricks</summary>
2022-06-23 12:12:25 +00:00
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe 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.
2022-06-23 12:12:25 +00:00
</details>
{% endhint %}
2022-06-23 12:12:25 +00:00
## Execução de Método de Mesma Origem
2022-06-23 12:12:25 +00:00
Haverá ocasiões em que você pode executar algum javascript limitado em uma página. Por exemplo, no caso em que você pode [**controlar um valor de callback que será executado**](./#javascript-function).
2022-06-23 12:12:25 +00:00
Nesses casos, uma das melhores coisas que você pode fazer é **acessar o DOM para chamar qualquer** ação sensível que você encontrar lá (como clicar em um botão). No entanto, geralmente você encontrará essa vulnerabilidade em **pequenos endpoints sem nada interessante no DOM**.
2022-06-23 12:12:25 +00:00
Nesses cenários, esse ataque será muito útil, porque seu objetivo é ser capaz de **abusar da execução limitada de JS dentro de um DOM de uma página diferente do mesmo domínio** com ações muito mais interessantes.
2022-06-23 12:12:25 +00:00
2023-06-06 18:56:34 +00:00
Basicamente, o fluxo do ataque é o seguinte:
2022-06-23 12:12:25 +00:00
* Encontre um **callback que você pode abusar** (potencialmente limitado a \[\w\\.\_]).
* Se não estiver limitado e você puder executar qualquer JS, você poderia apenas abusar disso como um XSS regular.
* Faça a **vítima abrir uma página** controlada pelo **atacante**.
* A **página se abrirá** em uma **nova janela** (a nova janela terá o objeto **`opener`** referenciando a inicial).
* A **página inicial** carregará a **página** onde o **DOM interessante** está localizado.
* A **segunda página** carregará a **página vulnerável abusando do callback** e usando o objeto **`opener`** para **acessar e executar alguma ação na página inicial** (que agora contém o DOM interessante).
2022-06-23 12:12:25 +00:00
{% hint style="danger" %}
Observe que mesmo se a página inicial acessar uma nova URL após ter criado a segunda página, o **objeto `opener` da segunda página ainda é uma referência válida para a primeira página no novo DOM**.
2022-06-23 12:52:13 +00:00
Além disso, para que a segunda página possa usar o objeto opener, **ambas as páginas devem estar na mesma origem**. Esta é a razão pela qual, para abusar dessa vulnerabilidade, você precisa encontrar algum tipo de **XSS na mesma origem**.
2022-06-23 12:12:25 +00:00
{% endhint %}
2023-06-06 18:56:34 +00:00
### Exploração
2022-06-23 12:12:25 +00:00
* Você pode usar esta forma para **gerar um PoC** para explorar esse tipo de vulnerabilidade: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator)
* Para encontrar um caminho DOM para um elemento HTML com um clique, você pode usar esta extensão de navegador: [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool)
2022-06-23 12:12:25 +00:00
2023-06-06 18:56:34 +00:00
### Exemplo
2022-06-23 12:12:25 +00:00
2023-06-06 18:56:34 +00:00
* Você pode encontrar um exemplo vulnerável em [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)
* Observe que neste exemplo o servidor está **gerando código javascript** e **adicionando** ao HTML com base no **conteúdo do parâmetro de callback:** `<script>opener.{callbacl_content}</script>`. É por isso que neste exemplo você não precisa indicar o uso de `opener` explicitamente.
* Confira também este writeup de CTF: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
2022-06-23 12:12:25 +00:00
2023-06-06 18:56:34 +00:00
## Referências
2022-06-23 12:12:25 +00:00
* [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/)
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe 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>
{% endhint %}