House of Einherjar
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)
Informazioni di Base
Codice
Controlla l'esempio da https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
Oppure quello da https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (potresti dover riempire la tcache)
Obiettivo
L'obiettivo è allocare memoria in quasi ogni indirizzo specifico.
Requisiti
Creare un chunk falso quando vogliamo allocare un chunk:
Impostare i puntatori per puntare a se stessi per aggirare i controlli di integrità
Overflow di un byte con un byte nullo da un chunk al successivo per modificare il flag
PREV_INUSE
.Indicare nel
prev_size
del chunk abusato off-by-null la differenza tra se stesso e il chunk falsoAnche la dimensione del chunk falso deve essere impostata alla stessa dimensione per aggirare i controlli di integrità
Per costruire questi chunk, avrai bisogno di una fuga di memoria dell'heap.
Attacco
Viene creato un chunk falso all'interno di un chunk controllato dall'attaccante puntando con
fd
ebk
al chunk originale per aggirare le protezioniVengono allocati altri 2 chunk (
B
eC
)Sfruttando l'off-by-one nel chunk
B
, il bitprev in use
viene pulito e i datiprev_size
vengono sovrascritti con la differenza tra il luogo in cui è allocato il chunkC
e il chunk falsoA
generato primaQuesto
prev_size
e la dimensione nel chunk falsoA
devono essere uguali per aggirare i controlli.Quindi, la tcache viene riempita
Poi,
C
viene liberato in modo che si consolidi con il chunk falsoA
Poi, viene creato un nuovo chunk
D
che inizierà nel chunk falsoA
e coprirà il chunkB
La casa di Einherjar finisce qui
Questo può essere continuato con un attacco al fast bin o con l'avvelenamento della Tcache:
Liberare
B
per aggiungerlo al fast bin / TcacheIl
fd
diB
viene sovrascritto facendolo puntare all'indirizzo di destinazione sfruttando il chunkD
(poiché contieneB
all'interno)Poi, vengono fatti 2 malloc e il secondo sarà l'allocazione dell'indirizzo di destinazione
Riferimenti e altri esempi
Dopo aver liberato i puntatori, non vengono annullati, quindi è ancora possibile accedere ai loro dati. Pertanto, un chunk viene posizionato nel bin non ordinato e vengono rivelati i puntatori che contiene (fuga di libc) e quindi viene posizionato un nuovo heap nel bin non ordinato e viene rivelato un indirizzo di heap dal puntatore che ottiene.
Bug di overflow di byte nullo in
strtok
.Usa House of Einherjar per ottenere una situazione di sovrapposizione di chunk e finisci con l'avvelenamento della Tcache per ottenere un primitivo di scrittura arbitraria.
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)
Last updated