# Heap Functions Security Checks {{#include ../../../banners/hacktricks-training.md}} ## unlink Daha fazla bilgi için kontrol edin: {{#ref}} unlink.md {{#endref}} Yapılan kontrollerin özeti: - Parçanın belirtilen boyutunun, bir sonraki parçadaki `prev_size` ile aynı olup olmadığını kontrol et - Hata mesajı: `corrupted size vs. prev_size` - Ayrıca `P->fd->bk == P` ve `P->bk->fw == P` kontrol et - Hata mesajı: `corrupted double-linked list` - Eğer parça küçük değilse, `P->fd_nextsize->bk_nextsize == P` ve `P->bk_nextsize->fd_nextsize == P` kontrol et - Hata mesajı: `corrupted double-linked list (not small)` ## \_int_malloc Daha fazla bilgi için kontrol edin: {{#ref}} malloc-and-sysmalloc.md {{#endref}} - **Hızlı bin araması sırasında kontroller:** - Eğer parça hizalanmamışsa: - Hata mesajı: `malloc(): unaligned fastbin chunk detected 2` - Eğer ileri parça hizalanmamışsa: - Hata mesajı: `malloc(): unaligned fastbin chunk detected` - Eğer döndürülen parçanın boyutu, hızlı bin içindeki indeksinden dolayı doğru değilse: - Hata mesajı: `malloc(): memory corruption (fast)` - Tcache'i doldurmak için kullanılan herhangi bir parça hizalanmamışsa: - Hata mesajı: `malloc(): unaligned fastbin chunk detected 3` - **Küçük bin araması sırasında kontroller:** - Eğer `victim->bk->fd != victim` ise: - Hata mesajı: `malloc(): smallbin double linked list corrupted` - **Her hızlı bin parçası için yapılan konsolidasyon kontrolleri:** - Eğer parça hizalanmamışsa tetikle: - Hata mesajı: `malloc_consolidate(): unaligned fastbin chunk detected` - Eğer parçanın boyutu, içinde bulunduğu indeks nedeniyle farklıysa: - Hata mesajı: `malloc_consolidate(): invalid chunk size` - Eğer önceki parça kullanılmıyorsa ve önceki parçanın boyutu, `prev_chunk` tarafından belirtilen boyuttan farklıysa: - Hata mesajı: `corrupted size vs. prev_size in fastbins` - **Sıralanmamış bin araması sırasında kontroller:** - Eğer parça boyutu garipse (çok küçük veya çok büyük): - Hata mesajı: `malloc(): invalid size (unsorted)` - Eğer bir sonraki parça boyutu garipse (çok küçük veya çok büyük): - Hata mesajı: `malloc(): invalid next size (unsorted)` - Eğer bir sonraki parçanın belirttiği önceki boyut, parçanın boyutundan farklıysa: - Hata mesajı: `malloc(): mismatching next->prev_size (unsorted)` - Eğer `victim->bck->fd == victim` değilse veya `victim->fd == av (arena)` değilse: - Hata mesajı: `malloc(): unsorted double linked list corrupted` - Her zaman sonuncusunu kontrol ettiğimiz için, fd'si her zaman arena yapısına işaret etmelidir. - Eğer bir sonraki parça, öncekinin kullanıldığını belirtmiyorsa: - Hata mesajı: `malloc(): invalid next->prev_inuse (unsorted)` - Eğer `fwd->bk_nextsize->fd_nextsize != fwd` ise: - Hata mesajı: `malloc(): largebin double linked list corrupted (nextsize)` - Eğer `fwd->bk->fd != fwd` ise: - Hata mesajı: `malloc(): largebin double linked list corrupted (bk)` - **Büyük bin (indeksle) araması sırasında kontroller:** - `bck->fd-> bk != bck`: - Hata mesajı: `malloc(): corrupted unsorted chunks` - **Büyük bin (bir sonraki daha büyük) araması sırasında kontroller:** - `bck->fd-> bk != bck`: - Hata mesajı: `malloc(): corrupted unsorted chunks2` - **Üst parça kullanımı sırasında kontroller:** - `chunksize(av->top) > av->system_mem`: - Hata mesajı: `malloc(): corrupted top size` ## `tcache_get_n` - **`tcache_get_n` içindeki kontroller:** - Eğer parça hizalanmamışsa: - Hata mesajı: `malloc(): unaligned tcache chunk detected` ## `tcache_thread_shutdown` - **`tcache_thread_shutdown` içindeki kontroller:** - Eğer parça hizalanmamışsa: - Hata mesajı: `tcache_thread_shutdown(): unaligned tcache chunk detected` ## `__libc_realloc` - **`__libc_realloc` içindeki kontroller:** - Eğer eski işaretçi hizalanmamışsa veya boyut yanlışsa: - Hata mesajı: `realloc(): invalid pointer` ## `_int_free` Daha fazla bilgi için kontrol edin: {{#ref}} free.md {{#endref}} - **`_int_free` başlangıcındaki kontroller:** - İşaretçi hizalanmış mı: - Hata mesajı: `free(): invalid pointer` - Boyut `MINSIZE`'dan büyük ve boyut da hizalanmışsa: - Hata mesajı: `free(): invalid size` - **`_int_free` tcache içindeki kontroller:** - Eğer `mp_.tcache_count`'dan fazla giriş varsa: - Hata mesajı: `free(): too many chunks detected in tcache` - Eğer giriş hizalanmamışsa: - Hata mesajı: `free(): unaligned chunk detected in tcache 2` - Eğer serbest bırakılan parça zaten serbest bırakılmışsa ve tcache'de parça olarak mevcutsa: - Hata mesajı: `free(): double free detected in tcache 2` - **`_int_free` hızlı bin içindeki kontroller:** - Eğer parçanın boyutu geçersizse (çok büyük veya küçük) tetikle: - Hata mesajı: `free(): invalid next size (fast)` - Eğer eklenen parça zaten hızlı binin üstüydü: - Hata mesajı: `double free or corruption (fasttop)` - Eğer üstteki parçanın boyutu, eklediğimiz parçanın boyutundan farklıysa: - Hata mesajı: `invalid fastbin entry (free)` ## **`_int_free_merge_chunk`** - **`_int_free_merge_chunk` içindeki kontroller:** - Eğer parça üst parça ise: - Hata mesajı: `double free or corruption (top)` - Eğer bir sonraki parça arenanın sınırlarının dışındaysa: - Hata mesajı: `double free or corruption (out)` - Eğer parça kullanılmadı olarak işaretlenmemişse (sonraki parçanın prev_inuse'inde): - Hata mesajı: `double free or corruption (!prev)` - Eğer bir sonraki parçanın boyutu çok küçük veya çok büyükse: - Hata mesajı: `free(): invalid next size (normal)` - Eğer önceki parça kullanılmıyorsa, konsolidasyon yapmaya çalışacaktır. Ancak, `prev_size` önceki parçadaki belirtilen boyuttan farklıysa: - Hata mesajı: `corrupted size vs. prev_size while consolidating` ## **`_int_free_create_chunk`** - **`_int_free_create_chunk` içindeki kontroller:** - Sıralanmamış bine bir parça eklerken, `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)` kontrol et: - Hata mesajı: `free(): corrupted unsorted chunks` ## `do_check_malloc_state` - **`do_check_malloc_state` içindeki kontroller:** - Eğer hizalanmamış hızlı bin parçası varsa: - Hata mesajı: `do_check_malloc_state(): unaligned fastbin chunk detected` ## `malloc_consolidate` - **`malloc_consolidate` içindeki kontroller:** - Eğer hizalanmamış hızlı bin parçası varsa: - Hata mesajı: `malloc_consolidate(): unaligned fastbin chunk detected` - Eğer geçersiz hızlı bin parça boyutu varsa: - Hata mesajı: `malloc_consolidate(): invalid chunk size` ## `_int_realloc` - **`_int_realloc` içindeki kontroller:** - Boyut çok büyük veya çok küçükse: - Hata mesajı: `realloc(): invalid old size` - Bir sonraki parçanın boyutu çok büyük veya çok küçükse: - Hata mesajı: `realloc(): invalid next size` {{#include ../../../banners/hacktricks-training.md}}