Affinché si verifichi un overflow dell'heap e che venga eseguito un codice arbitrario, la funzione free()
esegue il passaggio:
hdr->next->next->prev = hdr->next->prev
Capisco che l'indirizzo di hdr->next->next->prev
sia calcolato come hdr->next->next + 4
. Abbastanza chiaro.
Ora, questo valore verrà sovrascritto dall'indirizzo hdr- > next- > prev che è controllato dall'hacker e che contiene il codice della shell probabilmente nell'heap stesso (supponendo che sia eseguibile)
L'indirizzo di destinazione, ad esempio, il valore in hdr->next->next
in un overflow di heap vaniglia dovrebbe essere l'indirizzo nello stack che memorizza l'indirizzo di ritorno dopo che free()
ha completato il suo lavoro.
Q1. In che modo un utente malintenzionato determina l'indirizzo Esatto del puntatore di ritorno di free()
nello stack?
Q2. L'intero motivo per cui ciò si verifica è perché il puntatore aggiunge 4 al valore hdr->next->next
per scrivere il puntatore prev
. È stato risolto o è ancora uno dei motivi per gli overflow di heap correnti. (Il motivo per cui sto chiedendo questo è, sono a conoscenza di altri exploit di heap come double free e così via, voglio solo assicurarmi che la ragione primitiva sia stata corretta)