Fast Bin Attack
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Para mais informações sobre o que é um fast bin, confira esta página:
Como o fast bin é uma lista encadeada simples, há muito menos proteções do que em outros bins e apenas modificar um endereço em um chunk de fast bin liberado é suficiente para poder alocar depois um chunk em qualquer endereço de memória.
Como resumo:
Você pode encontrar um exemplo completo em um código muito bem explicado em https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html:
Se for possível sobrescrever o valor da variável global global_max_fast
com um número grande, isso permite gerar chunks de fast bin de tamanhos maiores, potencialmente permitindo realizar ataques de fast bin em cenários onde não era possível anteriormente. Essa situação é útil no contexto do ataque de large bin e ataque de unsorted bin
É possível alocar chunks, liberá-los, ler seu conteúdo e preenchê-los (com uma vulnerabilidade de overflow).
Consolidar chunk para infoleak: A técnica é basicamente abusar do overflow para criar um prev_size
falso, de modo que um chunk anterior seja colocado dentro de um maior, assim, ao alocar o maior contendo outro chunk, é possível imprimir seus dados e vazar um endereço para libc (main_arena+88
).
Sobrescrever malloc hook: Para isso, e abusando da situação de sobreposição anterior, foi possível ter 2 chunks que apontavam para a mesma memória. Portanto, liberando ambos (liberando outro chunk no meio para evitar proteções) foi possível ter o mesmo chunk no fast bin 2 vezes. Então, foi possível alocá-lo novamente, sobrescrever o endereço do próximo chunk para apontar um pouco antes de __malloc_hook
(para que aponte para um inteiro que malloc pensa ser um tamanho livre - outro bypass), alocá-lo novamente e então alocar outro chunk que receberá um endereço para malloc hooks.
Finalmente, um one gadget foi escrito lá.
Há um overflow de heap e uso após liberação e double free porque, quando um chunk é liberado, é possível reutilizar e re-liberar os ponteiros.
Libc info leak: Basta liberar alguns chunks e eles obterão um ponteiro para uma parte da localização da main arena. Como você pode reutilizar ponteiros liberados, basta ler este endereço.
Ataque de fast bin: Todos os ponteiros para as alocações são armazenados dentro de um array, então podemos liberar alguns chunks de fast bin e, no último, sobrescrever o endereço para apontar um pouco antes deste array de ponteiros. Então, alocamos alguns chunks com o mesmo tamanho e obteremos primeiro o legítimo e depois o falso contendo o array de ponteiros. Agora podemos sobrescrever esses ponteiros de alocação para fazer o endereço GOT de free
apontar para system
e então escrever "/bin/sh"
no chunk 1 para então chamar free(chunk1)
, que em vez disso executará system("/bin/sh")
.
Outro exemplo de abusar de um overflow de um byte para consolidar chunks no unsorted bin e obter um infoleak de libc e então realizar um ataque de fast bin para sobrescrever malloc hook com um endereço de one gadget.
Após um infoleak abusando do unsorted bin com um UAF para vazar um endereço de libc e um endereço de PIE, o exploit deste CTF usou um ataque de fast bin para alocar um chunk em um lugar onde os ponteiros para chunks controlados estavam localizados, então foi possível sobrescrever certos ponteiros para escrever um one gadget no GOT.
Você pode encontrar um ataque de Fast Bin abusado através de um ataque de unsorted bin:
Note que é comum antes de realizar ataques de fast bin abusar das free-lists para vazar endereços de libc/heap (quando necessário).
Podemos apenas alocar chunks de tamanho maior que 0x100
.
Sobrescrever global_max_fast
usando um ataque de Unsorted Bin (funciona 1/16 vezes devido ao ASLR, porque precisamos modificar 12 bits, mas devemos modificar 16 bits).
Ataque de Fast Bin para modificar um array global de chunks. Isso fornece uma primitiva de leitura/escrita arbitrária, que permite modificar o GOT e definir algumas funções para apontar para system
.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)