House of Roman
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)
Questa è stata una tecnica molto interessante che ha permesso l'esecuzione di codice remoto senza perdite tramite fake fastbins, l'attacco unsorted_bin e sovrascritture relative. Tuttavia è stata corretta.
Puoi trovare un esempio in https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c
Esecuzione di codice remoto sfruttando puntatori relativi
Modifica dei puntatori fastbin e unsorted bin
Devono essere forzati 12 bit di casualità (0,02% di probabilità) per funzionare
Creare diversi chunk:
fastbin_victim
(0x60, offset 0): Chunk UAF successivamente da modificare per far puntare il puntatore dell'heap al valore di LibC.
chunk2
(0x80, offset 0x70): Per un buon allineamento
main_arena_use
(0x80, offset 0x100)
relative_offset_heap
(0x60, offset 0x190): offset relativo sul chunk 'main_arena_use'
Poi free(main_arena_use)
che metterà questo chunk nella lista non ordinata e otterrà un puntatore a main_arena + 0x68
sia nei puntatori fd
che bk
.
Ora viene allocato un nuovo chunk fake_libc_chunk(0x60)
perché conterrà i puntatori a main_arena + 0x68
nei puntatori fd
e bk
.
Poi vengono liberati relative_offset_heap
e fastbin_victim
.
fastbin_victim
ha un fd
che punta a relative_offset_heap
relative_offset_heap
è un offset di distanza da fake_libc_chunk
, che contiene un puntatore a main_arena + 0x68
Cambiando l'ultimo byte di fastbin_victim.fd
è possibile far sì che fastbin_victim punti
a main_arena + 0x68
Per le azioni precedenti, l'attaccante deve essere in grado di modificare il puntatore fd di fastbin_victim
.
Quindi, main_arena + 0x68
non è così interessante, quindi modifichiamolo in modo che il puntatore punti a __malloc_hook
.
Nota che __memalign_hook
di solito inizia con 0x7f
e zeri prima di esso, quindi è possibile falsificarlo come un valore nel fast bin 0x70
. Poiché gli ultimi 4 bit dell'indirizzo sono casuali ci sono 2^4=16
possibilità affinché il valore finisca puntando dove siamo interessati. Quindi qui viene eseguito un attacco BF in modo che il chunk finisca come: 0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)
.
(Per ulteriori informazioni sugli altri byte, controlla la spiegazione nell'esempio how2heap). Se il BF non funziona, il programma crasha (quindi riprova finché non funziona).
Quindi, vengono eseguiti 2 malloc per rimuovere i 2 chunk iniziali del fast bin e viene allocato un terzo per ottenere un chunk nel __malloc_hook:
Per ulteriori informazioni puoi controllare:
Unsorted Bin AttackMa fondamentalmente consente di scrivere main_arena + 0x68
in qualsiasi posizione specificata in chunk->bk
. E per l'attacco scegliamo __malloc_hook
. Quindi, dopo averlo sovrascritto, utilizzeremo una sovrascrittura relativa per puntare a un one_gadget
.
Per questo iniziamo ottenendo un chunk e mettendolo nell'unsorted bin:
Usa un UAF in questo chunk per puntare unsorted_bin_ptr->bk
all'indirizzo di __malloc_hook
(abbiamo già forzato questo in precedenza).
Nota che questo attacco corrompe il bin non ordinato (quindi anche small e large). Quindi possiamo utilizzare solo allocazioni dal fast bin ora (un programma più complesso potrebbe fare altre allocazioni e bloccarsi), e per attivare questo dobbiamo allocare la stessa dimensione o il programma si bloccherà.
Quindi, per attivare la scrittura di main_arena + 0x68
in __malloc_hook
eseguiamo dopo aver impostato __malloc_hook
in unsorted_bin_ptr->bk
dobbiamo semplicemente fare: malloc(0x80)
Nel primo passo abbiamo finito per controllare un chunk contenente __malloc_hook
(nella variabile malloc_hook_chunk
) e nel secondo passo siamo riusciti a scrivere main_arena + 0x68
qui.
Ora, sfruttiamo una sovrascrittura parziale in malloc_hook_chunk
per utilizzare l'indirizzo libc che abbiamo scritto lì (main_arena + 0x68
) per puntare a un indirizzo one_gadget
.
Qui è necessario forzare 12 bit di casualità (ulteriori informazioni nell'how2heap esempio).
Infine, una volta sovrascritto l'indirizzo corretto, chiama malloc
e attiva il one_gadget
.
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)