Heap Functions Security Checks
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)
unlink
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 fragmencieKomunikat błędu:
corrupted size vs. prev_size
Sprawdź również, czy
P->fd->bk == P
iP->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
iP->bk_nextsize->fd_nextsize == P
Komunikat błędu:
corrupted double-linked list (not small)
_int_malloc
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 nievictim->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
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
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
__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
_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
_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
_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
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
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
_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
Last updated