House of Einherjar
Reading time: 4 minutes
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
 - Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
 
Informações Básicas
Código
- Confira o exemplo em https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
 - Ou o de https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (você pode precisar preencher o tcache)
 
Objetivo
- O objetivo é alocar memória em quase qualquer endereço específico.
 
Requisitos
- Criar um chunk falso quando quisermos alocar um chunk:
 - Definir ponteiros para apontar para si mesmos para contornar verificações de sanidade
 - Overflow de um byte com um byte nulo de um chunk para o próximo para modificar a flag 
PREV_INUSE. - Indicar no 
prev_sizedo chunk abusado off-by-null a diferença entre ele e o chunk falso - O tamanho do chunk falso também deve ter sido definido com o mesmo tamanho para contornar verificações de sanidade
 - Para construir esses chunks, você precisará de um leak de heap.
 
Ataque
- Um chunk falso 
Aé criado dentro de um chunk controlado pelo atacante apontando comfdebkpara o chunk original para contornar proteções - 2 outros chunks (
BeC) são alocados - Abusando do off by one no 
B, o bitprev in useé limpo e os dados deprev_sizesão sobrescritos com a diferença entre o lugar onde o chunkCé alocado e o chunk falsoAgerado anteriormente - Este 
prev_sizee o tamanho no chunk falsoAdevem ser os mesmos para contornar as verificações. - Então, o tcache é preenchido
 - Em seguida, 
Cé liberado para que se consolide com o chunk falsoA - Então, um novo chunk 
Dé criado que começará no chunk falsoAe cobrindo o chunkB - A casa de Einherjar termina aqui
 - Isso pode ser continuado com um ataque de fast bin ou envenenamento de Tcache:
 - Liberar 
Bpara adicioná-lo ao fast bin / Tcache - O 
fddeBé sobrescrito fazendo-o apontar para o endereço alvo abusando do chunkD(já que contémBdentro) - Em seguida, 2 mallocs são feitos e o segundo irá alocar o endereço alvo
 
Referências e outros exemplos
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
 - CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
 - Após liberar ponteiros, eles não são anulados, então ainda é possível acessar seus dados. Portanto, um chunk é colocado no bin não ordenado e os ponteiros que contém são vazados (libc leak) e então um novo heap é colocado no bin não ordenado e um endereço de heap é vazado a partir do ponteiro que obtém.
 - baby-talk. DiceCTF 2024
 - Bug de overflow de byte nulo em 
strtok. - Use a Casa de Einherjar para obter uma situação de chunks sobrepostos e terminar com envenenamento de Tcache para obter um primitivo de escrita arbitrária.
 
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
 - Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
 
HackTricks