Heap Functions Security Checks
Last updated
Last updated
Impara e pratica l'hacking di AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'hacking di GCP: HackTricks Training GCP Red Team Expert (GRTE)
Per ulteriori informazioni controlla:
unlinkQuesto è un riassunto dei controlli eseguiti:
Controlla se la dimensione indicata del chunk è la stessa di prev_size
indicata nel chunk successivo
Messaggio di errore: dimensione danneggiata rispetto a prev_size
Controlla anche che P->fd->bk == P
e P->bk->fw == P
Messaggio di errore: lista doppiamente collegata danneggiata
Se il chunk non è piccolo, controlla che P->fd_nextsize->bk_nextsize == P
e P->bk_nextsize->fd_nextsize == P
Messaggio di errore: lista doppiamente collegata danneggiata (non piccola)
Per ulteriori informazioni controlla:
malloc & sysmallocControlli durante la ricerca del fast bin:
Se il chunk è non allineato:
Messaggio di errore: malloc(): rilevato chunk fastbin non allineato 2
Se il chunk successivo è non allineato:
Messaggio di errore: malloc(): rilevato chunk fastbin non allineato
Se il chunk restituito ha una dimensione non corretta a causa del suo indice nel fast bin:
Messaggio di errore: malloc(): corruzione della memoria (veloce)
Se un qualsiasi chunk utilizzato per riempire il tcache è non allineato:
Messaggio di errore: malloc(): rilevato chunk fastbin non allineato 3
Controlli durante la ricerca del small bin:
Se victim->bk->fd != victim
:
Messaggio di errore: malloc(): lista doppiamente collegata smallbin danneggiata
Controlli durante la consolidazione eseguiti per ogni chunk del fast bin:
Se il chunk è non allineato attiva:
Messaggio di errore: malloc_consolidate(): rilevato chunk fastbin non allineato
Se il chunk ha una dimensione diversa da quella che dovrebbe a causa dell'indice in cui si trova:
Messaggio di errore: malloc_consolidate(): dimensione del chunk non valida
Se il chunk precedente non è in uso e il chunk precedente ha una dimensione diversa da quella indicata da prev_chunk:
Messaggio di errore: dimensione danneggiata rispetto a prev_size in fastbins
Controlli durante la ricerca del unsorted bin:
Se la dimensione del chunk è strana (troppo piccola o troppo grande):
Messaggio di errore: malloc(): dimensione non valida (non ordinata)
Se la dimensione del chunk successivo è strana (troppo piccola o troppo grande):
Messaggio di errore: malloc(): dimensione successiva non valida (non ordinata)
Se la dimensione precedente indicata dal chunk successivo differisce dalla dimensione del chunk:
Messaggio di errore: malloc(): dimensione next->prev non corrispondente (non ordinata)
Se non victim->bck->fd == victim
o non victim->fd == av (arena)
:
Messaggio di errore: malloc(): lista doppiamente collegata non ordinata danneggiata
Poiché stiamo sempre controllando l'ultimo, il suo fd dovrebbe puntare sempre alla struttura arena.
Se il chunk successivo non indica che il precedente è in uso:
Messaggio di errore: malloc(): next->prev_inuse non valido (non ordinato)
Se fwd->bk_nextsize->fd_nextsize != fwd
:
Messaggio di errore: malloc(): lista doppiamente collegata largebin danneggiata (nextsize)
Se fwd->bk->fd != fwd
:
Messaggio di errore: malloc(): lista doppiamente collegata largebin danneggiata (bk)
Controlli durante la ricerca del large bin (per indice):
bck->fd-> bk != bck
:
Messaggio di errore: malloc(): chunk non ordinati corrotti
Controlli durante la ricerca del large bin (successivo più grande):
bck->fd-> bk != bck
:
Messaggio di errore: malloc(): chunk non ordinati corrotti2
Controlli durante l'uso del Top chunk:
chunksize(av->top) > av->system_mem
:
Messaggio di errore: malloc(): dimensione top corrotta
tcache_get_n
Controlli in tcache_get_n
:
Se il chunk è non allineato:
Messaggio di errore: malloc(): rilevato chunk tcache non allineato
tcache_thread_shutdown
Controlli in tcache_thread_shutdown
:
Se il chunk è non allineato:
Messaggio di errore: tcache_thread_shutdown(): rilevato chunk tcache non allineato
__libc_realloc
Controlli in __libc_realloc
:
Se il vecchio puntatore è non allineato o la dimensione era incorretta:
Messaggio di errore: realloc(): puntatore non valido
_int_free
Per ulteriori informazioni controlla:
freeControlli all'inizio di _int_free
:
Il puntatore è allineato:
Messaggio di errore: free(): puntatore non valido
Dimensione maggiore di MINSIZE
e dimensione anche allineata:
Messaggio di errore: free(): dimensione non valida
Controlli in _int_free
tcache:
Se ci sono più voci di mp_.tcache_count
:
Messaggio di errore: free(): troppi chunk rilevati nel tcache
Se l'entry non è allineata:
Messaggio di errore: free(): rilevato chunk non allineato nel tcache 2
Se il chunk liberato era già stato liberato e è presente come chunk nel tcache:
Messaggio di errore: free(): doppia liberazione rilevata nel tcache 2
Controlli in _int_free
fast bin:
Se la dimensione del chunk è non valida (troppo grande o piccola) attiva:
Messaggio di errore: free(): dimensione successiva non valida (veloce)
Se il chunk aggiunto era già in cima al fast bin:
Messaggio di errore: doppia liberazione o corruzione (fasttop)
Se la dimensione del chunk in cima ha una dimensione diversa dal chunk che stiamo aggiungendo:
Messaggio di errore: voce fastbin non valida (libera)
_int_free_merge_chunk
Controlli in _int_free_merge_chunk
:
Se il chunk è il chunk superiore:
Messaggio di errore: double free or corruption (top)
Se il chunk successivo è al di fuori dei limiti dell'arena:
Messaggio di errore: double free or corruption (out)
Se il chunk non è contrassegnato come in uso (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 la 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 bin non ordinato, 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 chunk del bin veloce non è allineato correttamente:
Messaggio di errore: do_check_malloc_state(): unaligned fastbin chunk detected
malloc_consolidate
Controlli in malloc_consolidate
:
Se il chunk del bin veloce non è allineato correttamente:
Messaggio di errore: malloc_consolidate(): unaligned fastbin chunk detected
Se la dimensione del chunk del bin veloce non è corretta:
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