Fast Bin Attack
Last updated
Last updated
Impara e pratica l'Hacking su AWS: HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'Hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)
Per ulteriori informazioni su cosa sia un fast bin, controlla questa pagina:
Bins & Memory AllocationsPoiché il fast bin è una lista concatenata singolarmente, ci sono molte meno protezioni rispetto ad altri bin e semplicemente modificare un indirizzo in un chunk fast bin liberato è sufficiente per poter allocare successivamente un chunk in qualsiasi indirizzo di memoria.
In sintesi:
Puoi trovare un esempio completo in un codice molto ben spiegato su https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html:
Se è possibile sovrascrivere il valore della variabile globale global_max_fast
con un numero grande, ciò consente di generare chunk fast bin di dimensioni maggiori, permettendo potenzialmente di eseguire attacchi fast bin in scenari in cui in precedenza non era possibile. Questa situazione è utile nel contesto dell'attacco large bin e dell'attacco unsorted bin.
È possibile allocare chunk, liberarli, leggerne i contenuti e riempirli (con una vulnerabilità di overflow).
Consolidare chunk per infoleak: La tecnica consiste nell'abusare dell'overflow per creare un falso prev_size
in modo che un chunk precedente venga inserito in uno più grande, quindi quando si alloca il chunk più grande contenente un altro chunk, è possibile stamparne i dati e ottenere un leak di un indirizzo a libc (main_arena+88
).
Sovrascrivere l'hook di malloc: Per fare ciò, e abusando della situazione di sovrapposizione precedente, è stato possibile avere 2 chunk che puntavano alla stessa memoria. Di conseguenza, liberandoli entrambi (liberando un altro chunk nel mezzo per evitare protezioni) è stato possibile avere lo stesso chunk nel fast bin 2 volte. Quindi, è stato possibile allocarlo di nuovo, sovrascrivere l'indirizzo al chunk successivo in modo che puntasse un po' prima di __malloc_hook
(in modo che puntasse a un intero che malloc pensa sia una dimensione libera - un altro bypass), allocarlo di nuovo e quindi allocare un altro chunk che riceverà un indirizzo agli hook di malloc.
Infine è stato scritto un one gadget lì dentro.
C'è un overflow di heap e un uso dopo la liberazione e una doppia liberazione perché quando un chunk viene liberato è possibile riutilizzare e riliberare i puntatori
Leak di info su Libc: Basta liberare alcuni chunk e otterranno un puntatore a una parte della posizione dell'arena principale. Poiché è possibile riutilizzare i puntatori liberati, basta leggere questo indirizzo.
Attacco fast bin: Tutti i puntatori alle allocazioni sono memorizzati all'interno di un array, quindi possiamo liberare un paio di chunk fast bin e nell'ultimo sovrascrivere l'indirizzo per puntare un po' prima di questo array di puntatori. Quindi, allocare un paio di chunk con la stessa dimensione e otterremo prima quello legittimo e poi quello falso contenente l'array di puntatori. Ora possiamo sovrascrivere questi puntatori di allocazione per fare in modo che l'indirizzo GOT di free
punti a system
e quindi scrivere "/bin/sh"
nel chunk 1 per poi chiamare free(chunk1)
che invece eseguirà system("/bin/sh")
.
Un altro esempio di abuso di un overflow di un byte per consolidare chunk nell'unsorted bin e ottenere un infoleak di libc e quindi eseguire un attacco fast bin per sovrascrivere l'hook di malloc con un indirizzo one gadget
Dopo un infoleak abusando dell'unsorted bin con un UAF per leakare un indirizzo libc e un indirizzo PIE, lo sfruttamento di questo CTF ha utilizzato un attacco fast bin per allocare un chunk in un punto in cui erano situati i puntatori ai chunk controllati, quindi è stato possibile sovrascrivere certi puntatori per scrivere un one gadget nella GOT
È possibile trovare un attacco Fast Bin abusato attraverso un attacco unsorted bin:
Nota che è comune prima di eseguire attacchi fast bin abusare delle liste di liberazione per leakare indirizzi libc/heap (quando necessario).
Possiamo allocare solo chunk di dimensione maggiore di 0x100
.
Sovrascrivere global_max_fast
utilizzando un attacco Unsorted Bin (funziona 1 volta su 16 a causa di ASLR, perché dobbiamo modificare 12 bit, ma dobbiamo modificare 16 bit).
Attacco Fast Bin per modificare un array globale di chunk. Questo fornisce un primitivo di lettura/scrittura arbitrario, che consente di modificare la GOT e impostare alcune funzioni per puntare a system
.
Impara e pratica l'Hacking su AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'Hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)