Kontrole bezpieczeństwa funkcji sterty
Reading time: 5 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
unlink
Aby uzyskać więcej informacji, sprawdź:
{{#ref}} unlink.md {{#endref}}
To jest podsumowanie przeprowadzonych kontroli:
- Sprawdź, czy wskazany rozmiar kawałka jest taki sam jak
prev_size
wskazany w następnym kawałku - Komunikat o błędzie:
corrupted size vs. prev_size
- Sprawdź również, czy
P->fd->bk == P
iP->bk->fw == P
- Komunikat o błędzie:
corrupted double-linked list
- Jeśli kawałek nie jest mały, sprawdź, czy
P->fd_nextsize->bk_nextsize == P
iP->bk_nextsize->fd_nextsize == P
- Komunikat o błędzie:
corrupted double-linked list (not small)
_int_malloc
Aby uzyskać więcej informacji, sprawdź:
{{#ref}} malloc-and-sysmalloc.md {{#endref}}
- Kontrole podczas wyszukiwania szybkiego binu:
- Jeśli kawałek jest źle wyrównany:
- Komunikat o błędzie:
malloc(): unaligned fastbin chunk detected 2
- Jeśli kawałek do przodu jest źle wyrównany:
- Komunikat o błędzie:
malloc(): unaligned fastbin chunk detected
- Jeśli zwrócony kawałek ma rozmiar, który nie jest poprawny z powodu jego indeksu w szybkim binie:
- Komunikat o błędzie:
malloc(): memory corruption (fast)
- Jeśli jakikolwiek kawałek użyty do wypełnienia tcache jest źle wyrównany:
- Komunikat o błędzie:
malloc(): unaligned fastbin chunk detected 3
- Kontrole podczas wyszukiwania małego binu:
- Jeśli
victim->bk->fd != victim
: - Komunikat o błędzie:
malloc(): smallbin double linked list corrupted
- Kontrole podczas konsolidacji przeprowadzane dla każdego kawałka szybkiego binu:
- Jeśli kawałek jest źle wyrównany, wyzwól:
- Komunikat o błędzie:
malloc_consolidate(): unaligned fastbin chunk detected
- Jeśli kawałek ma inny rozmiar niż ten, który powinien mieć z powodu indeksu, w którym się znajduje:
- Komunikat o błędzie:
malloc_consolidate(): invalid chunk size
- Jeśli poprzedni kawałek nie jest używany, a poprzedni kawałek ma rozmiar różny od tego wskazanego przez prev_chunk:
- Komunikat o błędzie:
corrupted size vs. prev_size in fastbins
- Kontrole podczas wyszukiwania nieposortowanego binu:
- Jeśli rozmiar kawałka jest dziwny (za mały lub za duży):
- Komunikat o błędzie:
malloc(): invalid size (unsorted)
- Jeśli rozmiar następnego kawałka jest dziwny (za mały lub za duży):
- Komunikat o błędzie:
malloc(): invalid next size (unsorted)
- Jeśli rozmiar poprzedni wskazany przez następny kawałek różni się od rozmiaru kawałka:
- Komunikat o błędzie:
malloc(): mismatching next->prev_size (unsorted)
- Jeśli nie
victim->bck->fd == victim
lub nievictim->fd == av (arena)
: - Komunikat o błędzie:
malloc(): unsorted double linked list corrupted
- Ponieważ zawsze sprawdzamy ostatni, jego fd powinno zawsze wskazywać na strukturę areny.
- Jeśli następny kawałek nie wskazuje, że poprzedni jest używany:
- Komunikat o błędzie:
malloc(): invalid next->prev_inuse (unsorted)
- Jeśli
fwd->bk_nextsize->fd_nextsize != fwd
: - Komunikat o błędzie:
malloc(): largebin double linked list corrupted (nextsize)
- Jeśli
fwd->bk->fd != fwd
: - Komunikat o błędzie:
malloc(): largebin double linked list corrupted (bk)
- Kontrole podczas wyszukiwania dużego binu (według indeksu):
bck->fd-> bk != bck
:- Komunikat o błędzie:
malloc(): corrupted unsorted chunks
- Kontrole podczas wyszukiwania dużego binu (następny większy):
bck->fd-> bk != bck
:- Komunikat o błędzie:
malloc(): corrupted unsorted chunks2
- Kontrole podczas użycia Top chunk:
chunksize(av->top) > av->system_mem
:- Komunikat o błędzie:
malloc(): corrupted top size
tcache_get_n
- Kontrole w
tcache_get_n
: - Jeśli kawałek jest źle wyrównany:
- Komunikat o błędzie:
malloc(): unaligned tcache chunk detected
tcache_thread_shutdown
- Kontrole w
tcache_thread_shutdown
: - Jeśli kawałek jest źle wyrównany:
- Komunikat o błędzie:
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 o błędzie:
realloc(): invalid pointer
_int_free
Aby uzyskać więcej informacji, sprawdź:
{{#ref}} free.md {{#endref}}
- Kontrole na początku
_int_free
: - Wskaźnik jest wyrównany:
- Komunikat o błędzie:
free(): invalid pointer
- Rozmiar większy niż
MINSIZE
i rozmiar również wyrównany: - Komunikat o błędzie:
free(): invalid size
- Kontrole w
_int_free
tcache: - Jeśli jest więcej wpisów niż
mp_.tcache_count
: - Komunikat o błędzie:
free(): too many chunks detected in tcache
- Jeśli wpis nie jest wyrównany:
- Komunikat o błędzie:
free(): unaligned chunk detected in tcache 2
- Jeśli zwolniony kawałek był już zwolniony i jest obecny jako kawałek w tcache:
- Komunikat o błędzie:
free(): double free detected in tcache 2
- Kontrole w
_int_free
szybkim binie: - Jeśli rozmiar kawałka jest nieprawidłowy (za duży lub za mały), wyzwól:
- Komunikat o błędzie:
free(): invalid next size (fast)
- Jeśli dodany kawałek był już na szczycie szybkiego binu:
- Komunikat o błędzie:
double free or corruption (fasttop)
- Jeśli rozmiar kawałka na szczycie ma inny rozmiar niż kawałek, który dodajemy:
- Komunikat o błędzie:
invalid fastbin entry (free)
_int_free_merge_chunk
- Kontrole w
_int_free_merge_chunk
: - Jeśli kawałek jest kawałkiem szczytowym:
- Komunikat o błędzie:
double free or corruption (top)
- Jeśli następny kawałek jest poza granicami areny:
- Komunikat o błędzie:
double free or corruption (out)
- Jeśli kawałek nie jest oznaczony jako używany (w prev_inuse z następującego kawałka):
- Komunikat o błędzie:
double free or corruption (!prev)
- Jeśli następny kawałek ma zbyt mały lub zbyt duży rozmiar:
- Komunikat o błędzie:
free(): invalid next size (normal)
- Jeśli poprzedni kawałek nie jest używany, spróbuje skonsolidować. Ale jeśli
prev_size
różni się od rozmiaru wskazanego w poprzednim kawałku: - Komunikat o błędzie:
corrupted size vs. prev_size while consolidating
_int_free_create_chunk
- Kontrole w
_int_free_create_chunk
: - Dodając kawałek do nieposortowanego binu, sprawdź, czy
unsorted_chunks(av)->fd->bk == unsorted_chunks(av)
: - Komunikat o błędzie:
free(): corrupted unsorted chunks
do_check_malloc_state
- Kontrole w
do_check_malloc_state
: - Jeśli kawałek szybkiego binu jest źle wyrównany:
- Komunikat o błędzie:
do_check_malloc_state(): unaligned fastbin chunk detected
malloc_consolidate
- Kontrole w
malloc_consolidate
: - Jeśli kawałek szybkiego binu jest źle wyrównany:
- Komunikat o błędzie:
malloc_consolidate(): unaligned fastbin chunk detected
- Jeśli rozmiar kawałka szybkiego binu jest niepoprawny:
- Komunikat o błędzie:
malloc_consolidate(): invalid chunk size
_int_realloc
- Kontrole w
_int_realloc
: - Rozmiar jest za duży lub za mały:
- Komunikat o błędzie:
realloc(): invalid old size
- Rozmiar następnego kawałka jest za duży lub za mały:
- Komunikat o błędzie:
realloc(): invalid next size
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.