Translated ['src/binary-exploitation/rop-return-oriented-programing/srop

This commit is contained in:
Translator 2025-08-19 21:11:29 +00:00
parent 9abacff6a7
commit 1bef06651e
2 changed files with 14 additions and 14 deletions

View File

@ -2,7 +2,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## Exemplo de Pwntools
## Exemplo Pwntools
Este exemplo cria o binário vulnerável e o explora. O binário **lê na pilha** e então chama **`sigreturn`**:
```python
@ -205,7 +205,7 @@ frame.x2 = 7 # PROT_READ|PROT_WRITE|PROT_EXEC
frame.sp = 0x400000 + 0x100 # new pivot
frame.pc = svc_call # will re-enter kernel
```
Após enviar o frame, você pode enviar um segundo estágio contendo shell-code bruto em `0x400000+0x100`. Porque **AArch64** usa endereçamento *PC-relative*, isso é frequentemente mais conveniente do que construir grandes cadeias ROP.
Após enviar o frame, você pode enviar um segundo estágio contendo código shell bruto em `0x400000+0x100`. Como **AArch64** usa endereçamento *PC-relative*, isso é frequentemente mais conveniente do que construir grandes cadeias ROP.
## Validação do Kernel, PAC e Shadow-Stacks
@ -223,7 +223,7 @@ Shadow-Call-Stacks introduzidos no ARMv8.9 (e já habilitados no ChromeOS 1.27+)
## Referências
* [Documentação de manipulação de sinal arm64 do Linux](https://docs.kernel.org/arch/arm64/signal.html)
* [Documentação de manipulação de sinal do Linux arm64](https://docs.kernel.org/arch/arm64/signal.html)
* [LWN "AArch64 branch protection comes to GCC and glibc" (2023)](https://lwn.net/Articles/915041/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
Existem 3 maneiras de indicar o conteúdo de uma página em um iframe:
- Via `src` indicando uma URL (a URL pode ser de origem cruzada ou mesma origem)
- Via `src` indicando uma URL (a URL pode ser de origem cruzada ou da mesma origem)
- Via `src` indicando o conteúdo usando o protocolo `data:`
- Via `srcdoc` indicando o conteúdo
@ -81,7 +81,7 @@ No entanto, **apenas os scripts `if1` e `if2` serão executados, mas apenas `if1
![](<../../images/image (372).png>)
Portanto, é possível **contornar um CSP se você puder fazer upload de um arquivo JS para o servidor e carregá-lo via iframe, mesmo com `script-src 'none'`**. Isso pode **potencialmente ser feito abusando de um endpoint JSONP de mesmo site**.
Portanto, é possível **contornar um CSP se você puder fazer upload de um arquivo JS para o servidor e carregá-lo via iframe, mesmo com `script-src 'none'`**. Isso pode **potencialmente ser feito também abusando de um endpoint JSONP de mesmo site**.
Você pode testar isso com o seguinte cenário onde um cookie é roubado mesmo com `script-src 'none'`. Basta executar o aplicativo e acessá-lo com seu navegador:
```python
@ -107,7 +107,7 @@ app.run()
A comunidade de pesquisa continua a descobrir maneiras criativas de abusar de iframes para derrotar políticas restritivas. Abaixo você pode encontrar as técnicas mais notáveis publicadas nos últimos anos:
* **Exfiltração de dados via dangling-markup / named-iframe (PortSwigger 2023)** Quando uma aplicação reflete HTML, mas um CSP forte bloqueia a execução de scripts, você ainda pode vazar tokens sensíveis injetando um atributo `<iframe name>` *dangling*. Uma vez que a marcação parcial é analisada, o script do atacante rodando em uma origem separada navega o frame para `about:blank` e lê `window.name`, que agora contém tudo até o próximo caractere de citação (por exemplo, um token CSRF). Como nenhum JavaScript é executado no contexto da vítima, o ataque geralmente evita `script-src 'none'`. Um PoC mínimo é:
* **Exfiltração de dados via dangling-markup / named-iframe (PortSwigger 2023)** Quando uma aplicação reflete HTML, mas um CSP forte bloqueia a execução de scripts, você ainda pode vazar tokens sensíveis injetando um atributo `<iframe name>` *dangling*. Uma vez que a marcação parcial é analisada, o script do atacante em uma origem separada navega o frame para `about:blank` e lê `window.name`, que agora contém tudo até o próximo caractere de citação (por exemplo, um token CSRF). Como nenhum JavaScript é executado no contexto da vítima, o ataque geralmente evita `script-src 'none'`. Um PoC mínimo é:
```html
<!-- Ponto de injeção logo antes de um <script> sensível -->
@ -130,12 +130,12 @@ s.nonce = n;
top.document.body.appendChild(s);
```
* **Sequestro de form-action (PortSwigger 2024)** Uma página que omite a diretiva `form-action` pode ter seu formulário de login *re-direcionado* a partir de um iframe injetado ou HTML inline, de modo que gerenciadores de senhas preencham automaticamente e enviem credenciais para um domínio externo, mesmo quando `script-src 'none'` está presente. Sempre complemente `default-src` com `form-action`!
* **Sequestro de form-action (PortSwigger 2024)** Uma página que omite a diretiva `form-action` pode ter seu formulário de login *re-direcionado* de um iframe injetado ou HTML inline, de modo que gerenciadores de senhas preencham automaticamente e enviem credenciais para um domínio externo, mesmo quando `script-src 'none'` está presente. Sempre complemente `default-src` com `form-action`!
**Notas defensivas (checklist rápido)**
**Notas defensivas (checklist rápida)**
1. Sempre envie *todas* as diretivas CSP que controlam contextos secundários (`form-action`, `frame-src`, `child-src`, `object-src`, etc.).
2. Não confie que nonces sejam secretos—use `strict-dynamic` **e** elimine pontos de injeção.
2. Não confie que os nonces sejam secretos—use `strict-dynamic` **e** elimine pontos de injeção.
3. Quando você precisar incorporar documentos não confiáveis, use `sandbox="allow-scripts allow-same-origin"` **com muito cuidado** (ou sem `allow-same-origin` se você só precisar de isolamento de execução de script).
4. Considere uma implantação de defesa em profundidade COOP+COEP; o novo atributo `<iframe credentialless>` (§ abaixo) permite que você faça isso sem quebrar incorporações de terceiros.
@ -175,12 +175,12 @@ O valor do atributo pode ser deixado vazio (`sandbox=""`) para aplicar todas as
```
### Iframes sem credenciais
Como explicado em [este artigo](https://blog.slonser.info/posts/make-self-xss-great-again/), a flag `credentialless` em um iframe é usada para carregar uma página dentro de um iframe sem enviar credenciais na requisição, mantendo a mesma política de origem (SOP) da página carregada no iframe.
Como explicado em [este artigo](https://blog.slonser.info/posts/make-self-xss-great-again/), a flag `credentialless` em um iframe é usada para carregar uma página dentro de um iframe sem enviar credenciais na solicitação, mantendo a mesma política de origem (SOP) da página carregada no iframe.
Desde **o Chrome 110 (fevereiro de 2023), o recurso está habilitado por padrão** e a especificação está sendo padronizada entre os navegadores sob o nome *iframe anônimo*. O MDN descreve como: “um mecanismo para carregar iframes de terceiros em uma nova partição de armazenamento efêmera, de modo que nenhum cookie, localStorage ou IndexedDB seja compartilhado com a origem real”. Consequências para atacantes e defensores:
Desde **o Chrome 110 (fevereiro de 2023), o recurso está habilitado por padrão** e a especificação está sendo padronizada entre os navegadores sob o nome *iframe anônimo*. O MDN o descreve como: “um mecanismo para carregar iframes de terceiros em uma nova partição de armazenamento efêmera, de modo que nenhum cookie, localStorage ou IndexedDB seja compartilhado com a origem real”. Consequências para atacantes e defensores:
* Scripts em diferentes iframes sem credenciais **ainda compartilham a mesma origem de nível superior** e podem interagir livremente via DOM, tornando viáveis ataques de self-XSS em múltiplos iframes (veja PoC abaixo).
* Como a rede está **sem credenciais**, qualquer requisição dentro do iframe efetivamente se comporta como uma sessão não autenticada endpoints protegidos por CSRF geralmente falham, mas páginas públicas que podem vazar via DOM ainda estão em escopo.
* Como a rede é **sem credenciais**, qualquer solicitação dentro do iframe efetivamente se comporta como uma sessão não autenticada endpoints protegidos por CSRF geralmente falham, mas páginas públicas que podem vazar via DOM ainda estão em escopo.
* Pop-ups gerados a partir de um iframe sem credenciais recebem um `rel="noopener"` implícito, quebrando alguns fluxos de OAuth.
```javascript
// PoC: two same-origin credentialless iframes stealing cookies set by a third
@ -189,7 +189,7 @@ alert(window.top[2].document.cookie); // read -> foo=bar
```
- Exemplo de exploração: Self-XSS + CSRF
Neste ataque, o atacante prepara uma página maliciosa com 2 iframes:
Neste ataque, o atacante prepara uma página web maliciosa com 2 iframes:
- Um iframe que carrega a página da vítima com a flag `credentialless` com um CSRF que aciona um XSS (Imagine um Self-XSS no nome de usuário do usuário):
```html
@ -209,7 +209,7 @@ document.forms[0].submit();
- Outro iframe que na verdade tem o usuário logado (sem a flag `credentialless`).
Então, a partir do XSS, é possível acessar o outro iframe, pois eles têm o mesmo SOP e roubar o cookie, por exemplo, executando:
Então, a partir do XSS é possível acessar o outro iframe, pois eles têm o mesmo SOP e roubar o cookie, por exemplo, executando:
```javascript
alert(window.top[1].document.cookie);
```