Fast Bin Attack
Last updated
Last updated
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Per ulteriori informazioni su cosa sia un fast bin, controlla questa pagina:
Poiché il fast bin è una lista collegata singolarmente, ci sono molte meno protezioni rispetto ad altri bin e 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 da 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, questo consente di generare chunk di fast bin di dimensioni maggiori, potenzialmente permettendo di eseguire attacchi fast bin in scenari in cui non era possibile in precedenza. Questa situazione è utile nel contesto dell'attacco a grande bin e dell'attacco a bin non ordinati
È possibile allocare chunk, liberarli, leggere i loro contenuti e riempirli (con una vulnerabilità di overflow).
Consolidare chunk per infoleak: La tecnica consiste fondamentalmente nell'abusare dell'overflow per creare un prev_size
falso in modo che un chunk precedente venga inserito all'interno di uno più grande, quindi quando si allocca il più grande contenente un altro chunk, è possibile stampare i suoi dati e rivelare un indirizzo a libc (main_arena+88
).
Sovrascrivere malloc hook: Per questo, e abusando della situazione di sovrapposizione precedente, è stato possibile avere 2 chunk che puntavano alla stessa memoria. Pertanto, liberandoli entrambi (liberando un altro chunk nel mezzo per evitare protezioni) è stato possibile avere lo stesso chunk nel fast bin 2 volte. Poi, è stato possibile allocarlo di nuovo, sovrascrivere l'indirizzo del chunk successivo per puntare a un po' prima di __malloc_hook
(quindi punta a un intero che malloc pensa sia una dimensione libera - un altro bypass), allocarlo di nuovo e poi allocare un altro chunk che riceverà un indirizzo per malloc hooks.
Infine, un one gadget è stato scritto lì.
C'è un overflow dell'heap e uso dopo la liberazione e doppia liberazione perché quando un chunk viene liberato è possibile riutilizzare e ri-liberare i puntatori.
Libc info leak: 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 di fast bin e nell'ultimo sovrascrivere l'indirizzo per puntare a un po' prima di questo array di puntatori. Poi, allocare un paio di chunk della stessa dimensione e otterremo prima quello legittimo e poi quello falso contenente l'array di puntatori. Possiamo ora sovrascrivere questi puntatori di allocazione per far sì che l'indirizzo GOT di free
punti a system
e poi 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 nel bin non ordinato e ottenere un infoleak di libc e poi eseguire un attacco fast bin per sovrascrivere malloc hook con un indirizzo di one gadget.
Dopo un infoleak abusando del bin non ordinato con un UAF per rivelare un indirizzo libc e un indirizzo PIE, l'exploit di questo CTF ha utilizzato un attacco fast bin per allocare un chunk in un luogo in cui si trovavano i puntatori ai chunk controllati, quindi è stato possibile sovrascrivere determinati puntatori per scrivere un one gadget nel GOT.
Puoi trovare un attacco Fast Bin abusato attraverso un attacco a bin non ordinati:
Nota che è comune, prima di eseguire attacchi fast bin, abusare delle free-lists per rivelare indirizzi libc/heap (quando necessario).
Possiamo solo allocare chunk di dimensioni superiori a 0x100
.
Sovrascrivere global_max_fast
utilizzando un attacco a bin non ordinati (funziona 1/16 volte 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 una primitiva di lettura/scrittura arbitraria, che consente di modificare il GOT e impostare alcune funzioni per puntare a system
.
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)