mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-20 18:14:15 +00:00
4 KiB
4 KiB
Casa de Einherjar
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Verifique os PLANOS DE ASSINATURA!
- Obtenha o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
Código
- Verifique 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 queremos alocar um chunk:
- Definir ponteiros para apontar para si mesmo para contornar verificações de integridade
- Off by one de um chunk para outro para modificar o prev in use
- Indicar no
prev_size
do chunk abusado off-by-one 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
ebk
para o chunk original para contornar proteções - 2 outros chunks (
B
eC
) são alocados - Abusando do off by one no
B
, o bitprev in use
é limpo e os dadosprev_size
são sobrescritos com a diferença entre o local onde o chunkC
é alocado e o chunk falsoA
gerado anteriormente - Este
prev_size
e o tamanho no chunk falsoA
devem ser iguais para contornar verificações. - Em seguida, o tcache é preenchido
- Em seguida,
C
é liberado para que ele se consolide com o chunk falsoA
- Em seguida, um novo chunk
D
é criado que começará no chunk falsoA
e cobrirá o chunkB
- A casa de Einherjar termina aqui
- Isso pode ser continuado com um ataque de fast bin:
- Libere
B
para adicioná-lo ao fast bin - O
fd
deB
é sobrescrito fazendo com que ele aponte para o endereço alvo abusando do chunkD
(pois ele contémB
dentro) - Em seguida, são feitos 2 mallocs e o segundo vai alocar o endereço alvo
Referências e outros exemplos
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Depois de liberar ponteiros, eles não são anulados, então ainda é possível acessar seus dados. Portanto, um chunk é colocado no unsorted bin e vazados os ponteiros que ele contém (vazamento de libc) e então um novo heap é colocado no unsorted bin e vazado um endereço de heap do ponteiro que ele recebe.