Controlli di Sicurezza delle Funzioni Heap
Reading time: 6 minutes
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.
unlink
Per ulteriori informazioni controlla:
Questo è un riepilogo dei controlli effettuati:
- Controlla se la dimensione indicata del chunk è la stessa del
prev_size
indicato nel chunk successivo - Messaggio di errore:
corrupted size vs. prev_size
- Controlla anche che
P->fd->bk == P
eP->bk->fw == P
- Messaggio di errore:
corrupted double-linked list
- Se il chunk non è piccolo, controlla che
P->fd_nextsize->bk_nextsize == P
eP->bk_nextsize->fd_nextsize == P
- Messaggio di errore:
corrupted double-linked list (not small)
_int_malloc
Per ulteriori informazioni controlla:
- Controlli durante la ricerca nel fast bin:
- Se il chunk è disallineato:
- Messaggio di errore:
malloc(): unaligned fastbin chunk detected 2
- Se il chunk successivo è disallineato:
- Messaggio di errore:
malloc(): unaligned fastbin chunk detected
- Se il chunk restituito ha una dimensione che non è corretta a causa del suo indice nel fast bin:
- Messaggio di errore:
malloc(): memory corruption (fast)
- Se qualsiasi chunk utilizzato per riempire il tcache è disallineato:
- Messaggio di errore:
malloc(): unaligned fastbin chunk detected 3
- Controlli durante la ricerca nel small bin:
- Se
victim->bk->fd != victim
: - Messaggio di errore:
malloc(): smallbin double linked list corrupted
- Controlli durante la consolidazione effettuati per ogni chunk del fast bin:
- Se il chunk è disallineato attiva:
- Messaggio di errore:
malloc_consolidate(): unaligned fastbin chunk detected
- Se il chunk ha una dimensione diversa da quella che dovrebbe avere a causa dell'indice in cui si trova:
- Messaggio di errore:
malloc_consolidate(): invalid chunk size
- Se il chunk precedente non è in uso e il chunk precedente ha una dimensione diversa da quella indicata da prev_chunk:
- Messaggio di errore:
corrupted size vs. prev_size in fastbins
- Controlli durante la ricerca nel unsorted bin:
- Se la dimensione del chunk è strana (troppo piccola o troppo grande):
- Messaggio di errore:
malloc(): invalid size (unsorted)
- Se la dimensione del chunk successivo è strana (troppo piccola o troppo grande):
- Messaggio di errore:
malloc(): invalid next size (unsorted)
- Se la dimensione precedente indicata dal chunk successivo differisce dalla dimensione del chunk:
- Messaggio di errore:
malloc(): mismatching next->prev_size (unsorted)
- Se non
victim->bck->fd == victim
o nonvictim->fd == av (arena)
: - Messaggio di errore:
malloc(): unsorted double linked list corrupted
- Poiché stiamo sempre controllando l'ultimo, il suo fd dovrebbe sempre puntare alla struttura arena.
- Se il chunk successivo non indica che il precedente è in uso:
- Messaggio di errore:
malloc(): invalid next->prev_inuse (unsorted)
- Se
fwd->bk_nextsize->fd_nextsize != fwd
: - Messaggio di errore:
malloc(): largebin double linked list corrupted (nextsize)
- Se
fwd->bk->fd != fwd
: - Messaggio di errore:
malloc(): largebin double linked list corrupted (bk)
- Controlli durante la ricerca nel large bin (per indice):
bck->fd-> bk != bck
:- Messaggio di errore:
malloc(): corrupted unsorted chunks
- Controlli durante la ricerca nel large bin (prossimo più grande):
bck->fd-> bk != bck
:- Messaggio di errore:
malloc(): corrupted unsorted chunks2
- Controlli durante l'uso del Top chunk:
chunksize(av->top) > av->system_mem
:- Messaggio di errore:
malloc(): corrupted top size
tcache_get_n
- Controlli in
tcache_get_n
: - Se il chunk è disallineato:
- Messaggio di errore:
malloc(): unaligned tcache chunk detected
tcache_thread_shutdown
- Controlli in
tcache_thread_shutdown
: - Se il chunk è disallineato:
- Messaggio di errore:
tcache_thread_shutdown(): unaligned tcache chunk detected
__libc_realloc
- Controlli in
__libc_realloc
: - Se il puntatore vecchio è disallineato o la dimensione era errata:
- Messaggio di errore:
realloc(): invalid pointer
_int_free
Per ulteriori informazioni controlla:
- Controlli all'inizio di
_int_free
: - Il puntatore è allineato:
- Messaggio di errore:
free(): invalid pointer
- Dimensione maggiore di
MINSIZE
e dimensione anche allineata: - Messaggio di errore:
free(): invalid size
- Controlli in
_int_free
tcache: - Se ci sono più voci di
mp_.tcache_count
: - Messaggio di errore:
free(): too many chunks detected in tcache
- Se l'entry non è allineata:
- Messaggio di errore:
free(): unaligned chunk detected in tcache 2
- Se il chunk liberato era già stato liberato ed è presente come chunk nel tcache:
- Messaggio di errore:
free(): double free detected in tcache 2
- Controlli in
_int_free
fast bin: - Se la dimensione del chunk è non valida (troppo grande o piccola) attiva:
- Messaggio di errore:
free(): invalid next size (fast)
- Se il chunk aggiunto era già il top del fast bin:
- Messaggio di errore:
double free or corruption (fasttop)
- Se la dimensione del chunk in cima ha una dimensione diversa da quella del chunk che stiamo aggiungendo:
- Messaggio di errore:
invalid fastbin entry (free)
_int_free_merge_chunk
- Controlli in
_int_free_merge_chunk
: - Se il chunk è il top chunk:
- Messaggio di errore:
double free or corruption (top)
- Se il chunk successivo è al di fuori dei confini dell'arena:
- Messaggio di errore:
double free or corruption (out)
- Se il chunk non è contrassegnato come utilizzato (nel prev_inuse del chunk successivo):
- Messaggio di errore:
double free or corruption (!prev)
- Se il chunk successivo ha una dimensione troppo piccola o troppo grande:
- Messaggio di errore:
free(): invalid next size (normal)
- Se il chunk precedente non è in uso, cercherà di consolidare. Ma, se il
prev_size
differisce dalla dimensione indicata nel chunk precedente: - Messaggio di errore:
corrupted size vs. prev_size while consolidating
_int_free_create_chunk
- Controlli in
_int_free_create_chunk
: - Aggiungendo un chunk nel unsorted bin, controlla se
unsorted_chunks(av)->fd->bk == unsorted_chunks(av)
: - Messaggio di errore:
free(): corrupted unsorted chunks
do_check_malloc_state
- Controlli in
do_check_malloc_state
: - Se il fast bin chunk è disallineato:
- Messaggio di errore:
do_check_malloc_state(): unaligned fastbin chunk detected
malloc_consolidate
- Controlli in
malloc_consolidate
: - Se il fast bin chunk è disallineato:
- Messaggio di errore:
malloc_consolidate(): unaligned fastbin chunk detected
- Se la dimensione del fast bin chunk è errata:
- Messaggio di errore:
malloc_consolidate(): invalid chunk size
_int_realloc
- Controlli in
_int_realloc
: - La dimensione è troppo grande o troppo piccola:
- Messaggio di errore:
realloc(): invalid old size
- La dimensione del chunk successivo è troppo grande o troppo piccola:
- Messaggio di errore:
realloc(): invalid next size
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.