mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
164 lines
6.8 KiB
Markdown
164 lines
6.8 KiB
Markdown
# 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}}
|