Heap Functions Security Checks
Last updated
Last updated
Dowiedz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Dowiedz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aby uzyskać więcej informacji, sprawdź:
unlinkTo podsumowanie przeprowadzonych kontroli:
Sprawdź, czy wskazany rozmiar fragmentu jest taki sam jak prev_size
wskazany w następnym fragmencie
Komunikat błędu: corrupted size vs. prev_size
Sprawdź również, czy P->fd->bk == P
i P->bk->fw == P
Komunikat błędu: corrupted double-linked list
Jeśli fragment nie jest mały, sprawdź, czy P->fd_nextsize->bk_nextsize == P
i P->bk_nextsize->fd_nextsize == P
Komunikat błędu: corrupted double-linked list (not small)
Aby uzyskać więcej informacji, sprawdź:
malloc & sysmallocKontrole podczas wyszukiwania w fast bin:
Jeśli fragment jest źle wyrównany:
Komunikat błędu: malloc(): unaligned fastbin chunk detected 2
Jeśli następny fragment jest źle wyrównany:
Komunikat błędu: malloc(): unaligned fastbin chunk detected
Jeśli zwrócony fragment ma niepoprawny rozmiar z powodu jego indeksu w fast bin:
Komunikat błędu: malloc(): memory corruption (fast)
Jeśli którykolwiek fragment użyty do wypełnienia tcache jest źle wyrównany:
Komunikat błędu: malloc(): unaligned fastbin chunk detected 3
Kontrole podczas wyszukiwania w small bin:
Jeśli victim->bk->fd != victim
:
Komunikat błędu: malloc(): smallbin double linked list corrupted
Kontrole podczas konsolidacji przeprowadzane dla każdego fragmentu fast bin:
Jeśli fragment jest źle wyrównany, wywołaj:
Komunikat błędu: malloc_consolidate(): unaligned fastbin chunk detected
Jeśli fragment ma inny rozmiar niż powinien z powodu indeksu, w którym się znajduje:
Komunikat błędu: malloc_consolidate(): invalid chunk size
Jeśli poprzedni fragment nie jest używany, a poprzedni fragment ma inny rozmiar niż wskazany przez prev_chunk:
Komunikat błędu: corrupted size vs. prev_size in fastbins
Kontrole podczas wyszukiwania w unsorted bin:
Jeśli rozmiar fragmentu jest dziwny (za mały lub za duży):
Komunikat błędu: malloc(): invalid size (unsorted)
Jeśli rozmiar następnego fragmentu jest dziwny (za mały lub za duży):
Komunikat błędu: malloc(): invalid next size (unsorted)
Jeśli rozmiar poprzedni wskazany przez następny fragment różni się od rozmiaru fragmentu:
Komunikat błędu: malloc(): mismatching next->prev_size (unsorted)
Jeśli nie victim->bck->fd == victim
lub nie victim->fd == av (arena)
:
Komunikat błędu: malloc(): unsorted double linked list corrupted
Ponieważ zawsze sprawdzamy ostatni, jego fd powinien zawsze wskazywać na strukturę areny.
Jeśli następny fragment nie wskazuje, że poprzedni jest używany:
Komunikat błędu: malloc(): invalid next->prev_inuse (unsorted)
Jeśli fwd->bk_nextsize->fd_nextsize != fwd
:
Komunikat błędu: malloc(): largebin double linked list corrupted (nextsize)
Jeśli fwd->bk->fd != fwd
:
Komunikat błędu: malloc(): largebin double linked list corrupted (bk)
Kontrole podczas wyszukiwania w large bin (według indeksu):
bck->fd-> bk != bck
:
Komunikat błędu: malloc(): corrupted unsorted chunks
Kontrole podczas wyszukiwania w large bin (następny większy):
bck->fd-> bk != bck
:
Komunikat błędu: malloc(): corrupted unsorted chunks2
Kontrole podczas użycia Top chunk:
chunksize(av->top) > av->system_mem
:
Komunikat błędu: malloc(): corrupted top size
tcache_get_n
Kontrole w tcache_get_n
:
Jeśli fragment jest źle wyrównany:
Komunikat błędu: malloc(): unaligned tcache chunk detected
tcache_thread_shutdown
Kontrole w tcache_thread_shutdown
:
Jeśli fragment jest źle wyrównany:
Komunikat błędu: tcache_thread_shutdown(): unaligned tcache chunk detected
__libc_realloc
Kontrole w __libc_realloc
:
Jeśli stary wskaźnik jest źle wyrównany lub rozmiar był niepoprawny:
Komunikat błędu: realloc(): invalid pointer
_int_free
Aby uzyskać więcej informacji, sprawdź:
freeKontrole na początku _int_free
:
Wskaźnik jest wyrównany:
Komunikat błędu: free(): invalid pointer
Rozmiar większy niż MINSIZE
i również wyrównany:
Komunikat błędu: free(): invalid size
Kontrole w _int_free
tcache:
Jeśli jest więcej wpisów niż mp_.tcache_count
:
Komunikat błędu: free(): too many chunks detected in tcache
Jeśli wpis nie jest wyrównany:
Komunikat błędu: free(): unaligned chunk detected in tcache 2
Jeśli zwolniony fragment był już zwolniony i jest obecny jako fragment w tcache:
Komunikat błędu: free(): double free detected in tcache 2
Kontrole w _int_free
fast bin:
Jeśli rozmiar fragmentu jest nieprawidłowy (za duży lub za mały), wywołaj:
Komunikat błędu: free(): invalid next size (fast)
Jeśli dodany fragment był już na szczycie fast bin:
Komunikat błędu: double free or corruption (fasttop)
Jeśli rozmiar fragmentu na szczycie ma inny rozmiar niż dodawany fragment:
Komunikat błędu: invalid fastbin entry (free)
_int_free_merge_chunk
Sprawdzenia w _int_free_merge_chunk
:
Jeśli kawałek jest kawałkiem górnym:
Komunikat błędu: double free or corruption (top)
Jeśli następny kawałek znajduje się poza granicami areny:
Komunikat błędu: double free or corruption (out)
Jeśli kawałek nie jest oznaczony jako używany (w prev_inuse z następnego kawałka):
Komunikat błędu: double free or corruption (!prev)
Jeśli następny kawałek ma zbyt mały lub zbyt duży rozmiar:
Komunikat błędu: free(): invalid next size (normal)
Jeśli poprzedni kawałek nie jest używany, zostanie podjęta próba konsolidacji. Jednak jeśli prev_size
różni się od rozmiaru wskazanego w poprzednim kawałku:
Komunikat błędu: corrupted size vs. prev_size while consolidating
_int_free_create_chunk
Sprawdzenia w _int_free_create_chunk
:
Dodając kawałek do nieuporządkowanego kubełka, sprawdź, czy unsorted_chunks(av)->fd->bk == unsorted_chunks(av)
:
Komunikat błędu: free(): corrupted unsorted chunks
do_check_malloc_state
Sprawdzenia w do_check_malloc_state
:
Jeśli kawałek fast bin jest źle wyrównany:
Komunikat błędu: do_check_malloc_state(): unaligned fastbin chunk detected
malloc_consolidate
Sprawdzenia w malloc_consolidate
:
Jeśli kawałek fast bin jest źle wyrównany:
Komunikat błędu: malloc_consolidate(): unaligned fastbin chunk detected
Jeśli nieprawidłowy rozmiar kawałka fast bin:
Komunikat błędu: malloc_consolidate(): invalid chunk size
_int_realloc
Sprawdzenia w _int_realloc
:
Rozmiar jest zbyt duży lub zbyt mały:
Komunikat błędu: realloc(): invalid old size
Rozmiar następnego kawałka jest zbyt duży lub zbyt mały:
Komunikat błędu: realloc(): invalid next size