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

6.8 KiB

Casa da Força

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Informações Básicas

Código

  • Esta técnica foi corrigida (aqui) e produz este erro: malloc(): corrupted top size
  • Você pode testar o código daqui se quiser.

Objetivo

  • O objetivo deste ataque é ser capaz de alocar um chunk em um endereço específico.

Requisitos

  • Um overflow que permita sobrescrever o tamanho do cabeçalho do top chunk (por exemplo, -1).
  • Ser capaz de controlar o tamanho da alocação do heap

Ataque

Se um atacante deseja alocar um chunk no endereço P para sobrescrever um valor aqui. Ele começa sobrescrevendo o tamanho do top chunk com -1 (talvez com um overflow). Isso garante que o malloc não usará mmap para nenhuma alocação, pois o Top chunk sempre terá espaço suficiente.

Em seguida, calcule a distância entre o endereço do top chunk e o espaço-alvo para alocar. Isso ocorre porque um malloc com esse tamanho será realizado para mover o top chunk para essa posição. É assim que a diferença/tamanho pode ser facilmente calculada:

// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/

Portanto, alocar um tamanho de target - old_top - 4*sizeof(long) (os 4 longs são devido aos metadados do chunk superior e do novo chunk quando alocado) moverá o chunk superior para o endereço que queremos sobrescrever.
Em seguida, faça outro malloc para obter um chunk no endereço alvo.

Referências e Outros Exemplos