House of Force

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

Objetivo

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

Requisitos

  • Um estouro que permita sobrescrever o tamanho do cabeçalho do chunk superior (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 chunk superior com -1 (talvez com um estouro). 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 chunk superior e o espaço-alvo para alocar. Isso ocorre porque um malloc com esse tamanho será realizado para mover o chunk superior 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

Last updated