House of Einherjar

Apoie o HackTricks

Informações Básicas

Código

Objetivo

  • O objetivo é alocar memória em quase qualquer endereço específico.

Requisitos

  • Criar um chunk falso quando queremos alocar um chunk:

  • Definir ponteiros para apontar para si mesmo para contornar verificações de integridade

  • Estouro de um byte com um byte nulo de um chunk para o próximo para modificar a flag PREV_INUSE.

  • Indicar no prev_size do chunk abusado por off-by-null a diferença entre ele mesmo e o chunk falso.

  • O tamanho do chunk falso também deve ter sido definido com o mesmo tamanho para contornar verificações de integridade.

  • Para construir esses chunks, você precisará de um vazamento de heap.

Ataque

  • Um chunk falso é criado dentro de um chunk controlado pelo atacante apontando com fd e bk para o chunk original para contornar proteções.

  • 2 outros chunks (B e C) são alocados.

  • Abusando do off-by-one no B, o bit prev in use é limpo e os dados prev_size são sobrescritos com a diferença entre o local onde o chunk C é alocado e o chunk falso A gerado anteriormente.

  • Este prev_size e o tamanho no chunk falso A devem ser iguais para contornar verificações.

  • Em seguida, o tcache é preenchido.

  • Em seguida, C é liberado para que se consolide com o chunk falso A.

  • Em seguida, um novo chunk D é criado que começará no chunk falso A e cobrirá o chunk B.

  • A casa de Einherjar termina aqui.

  • Isso pode ser continuado com um ataque de fast bin ou envenenamento de Tcache:

  • Libere B para adicioná-lo ao fast bin / Tcache

  • O fd de B é sobrescrito fazendo-o apontar para o endereço alvo abusando do chunk D (pois ele contém B dentro)

  • Em seguida, são feitos 2 mallocs e o segundo vai alocar o endereço alvo

Referências e outros exemplos

Apoie o HackTricks

Last updated