Heap Functions Security Checks
Вивчайте та практикуйте хакінг AWS: Навчання AWS Red Team Expert (ARTE) від HackTricks
Вивчайте та практикуйте хакінг GCP:
Навчання GCP Red Team Expert (GRTE) від HackTricks
unlink
Для отримання додаткової інформації перегляньте:
unlinkОсь підсумок виконаних перевірок:
Перевірте, чи вказаний розмір фрагмента співпадає з
prev_size
, вказаним у наступному фрагментіПовідомлення про помилку:
corrupted size vs. prev_size
Також перевірте, що
P->fd->bk == P
таP->bk->fw == P
Повідомлення про помилку:
corrupted double-linked list
Якщо фрагмент не є малим, перевірте, що
P->fd_nextsize->bk_nextsize == P
таP->bk_nextsize->fd_nextsize == P
Повідомлення про помилку:
corrupted double-linked list (not small)
_int_malloc
Для отримання додаткової інформації перегляньте:
malloc & sysmallocПеревірки під час пошуку швидкого біна:
Якщо фрагмент не вирівняний:
Повідомлення про помилку:
malloc(): unaligned fastbin chunk detected 2
Якщо наступний фрагмент не вирівняний:
Повідомлення про помилку:
malloc(): unaligned fastbin chunk detected
Якщо повернутий фрагмент має неправильний розмір через його індекс у швидкому біні:
Повідомлення про помилку:
malloc(): memory corruption (fast)
Якщо будь-який фрагмент, використаний для заповнення tcache, не вирівняний:
Повідомлення про помилку:
malloc(): unaligned fastbin chunk detected 3
Перевірки під час пошуку малого біна:
Якщо
victim->bk->fd != victim
:Повідомлення про помилку:
malloc(): smallbin double linked list corrupted
Перевірки під час консолідації виконуються для кожного швидкого біну:
Якщо фрагмент не вирівняний, викличте:
Повідомлення про помилку:
malloc_consolidate(): unaligned fastbin chunk detected
Якщо розмір фрагмента відрізняється від того, який він повинен мати через індекс:
Повідомлення про помилку:
malloc_consolidate(): invalid chunk size
Якщо попередній фрагмент не використовується, а попередній фрагмент має розмір, відмінний від вказаного prev_chunk:
Повідомлення про помилку:
corrupted size vs. prev_size in fastbins
Перевірки під час пошуку несортованого біна:
Якщо розмір фрагмента дивний (занадто малий або занадто великий):
Повідомлення про помилку:
malloc(): invalid size (unsorted)
Якщо розмір наступного фрагмента дивний (занадто малий або занадто великий):
Повідомлення про помилку:
malloc(): invalid next size (unsorted)
Якщо попередній розмір, вказаний наступним фрагментом, відрізняється від розміру фрагмента:
Повідомлення про помилку:
malloc(): mismatching next->prev_size (unsorted)
Якщо не
victim->bck->fd == victim
або неvictim->fd == av (arena)
:Повідомлення про помилку:
malloc(): unsorted double linked list corrupted
Оскільки ми завжди перевіряємо останній, його fd повинен завжди вказувати на структуру арени.
Якщо наступний фрагмент не вказує, що попередній використовується:
Повідомлення про помилку:
malloc(): invalid next->prev_inuse (unsorted)
Якщо
fwd->bk_nextsize->fd_nextsize != fwd
:Повідомлення про помилку:
malloc(): largebin double linked list corrupted (nextsize)
Якщо
fwd->bk->fd != fwd
:Повідомлення про помилку:
malloc(): largebin double linked list corrupted (bk)
Перевірки під час пошуку великого біна (за індексом):
bck->fd-> bk != bck
:Повідомлення про помилку:
malloc(): corrupted unsorted chunks
Перевірки під час пошуку великого біна (наступний більший):
bck->fd-> bk != bck
:Повідомлення про помилку:
malloc(): corrupted unsorted chunks2
Перевірки під час використання верхнього фрагмента:
chunksize(av->top) > av->system_mem
:Повідомлення про помилку:
malloc(): corrupted top size
tcache_get_n
tcache_get_n
Перевірки в
tcache_get_n
:Якщо фрагмент не вирівняний:
Повідомлення про помилку:
malloc(): unaligned tcache chunk detected
tcache_thread_shutdown
tcache_thread_shutdown
Перевірки в
tcache_thread_shutdown
:Якщо фрагмент не вирівняний:
Повідомлення про помилку:
tcache_thread_shutdown(): unaligned tcache chunk detected
__libc_realloc
__libc_realloc
Перевірки в
__libc_realloc
:Якщо старий вказівник не вирівняний або розмір був неправильним:
Повідомлення про помилку:
realloc(): invalid pointer
_int_free
_int_free
Для отримання додаткової інформації перегляньте:
freeПеревірки на початку
_int_free
:Вказівник вирівняний:
Повідомлення про помилку:
free(): invalid pointer
Розмір більше, ніж
MINSIZE
, і розмір також вирівняний:Повідомлення про помилку:
free(): invalid size
Перевірки в
_int_free
tcache:Якщо записів більше, ніж
mp_.tcache_count
:Повідомлення про помилку:
free(): too many chunks detected in tcache
Якщо запис не вирівняний:
Повідомлення про помилку:
free(): unaligned chunk detected in tcache 2
Якщо вивільнений фрагмент вже був вивільнений і присутній як фрагмент у tcache:
Повідомлення про помилку:
free(): double free detected in tcache 2
Перевірки в
_int_free
fast bin:Якщо розмір фрагмента недійсний (занадто великий або малий), викличте:
Повідомлення про помилку:
free(): invalid next size (fast)
Якщо доданий фрагмент вже був на вершині швидкого біна:
Повідомлення про помилку:
double free or corruption (fasttop)
Якщо розмір фрагмента на вершині відрізняється від розміру фрагмента, який ми додаємо:
Повідомлення про помилку:
invalid fastbin entry (free)
_int_free_merge_chunk
_int_free_merge_chunk
Перевірки в
_int_free_merge_chunk
:Якщо блок - верхній блок:
Повідомлення про помилку:
подвійне вивільнення або пошкодження (верхній блок)
Якщо наступний блок знаходиться за межами арени:
Повідомлення про помилку:
подвійне вивільнення або пошкодження (зовні)
Якщо блок не позначений як використаний (в prev_inuse наступного блоку):
Повідомлення про помилку:
подвійне вивільнення або пошкодження (!prev)
Якщо наступний блок має занадто маленький або занадто великий розмір:
Повідомлення про помилку:
free(): недійсний наступний розмір (звичайний)
Якщо попередній блок не використовується, спробує сконсолідувати. Але, якщо
prev_size
відрізняється від розміру, вказаного в попередньому блоку:Повідомлення про помилку:
пошкоджений розмір проти prev_size під час консолідації
_int_free_create_chunk
_int_free_create_chunk
Перевірки в
_int_free_create_chunk
:Додавання блоку в неупорядкований бін, перевірте, чи
unsorted_chunks(av)->fd->bk == unsorted_chunks(av)
:Повідомлення про помилку:
free(): пошкоджені неупорядковані блоки
do_check_malloc_state
do_check_malloc_state
Перевірки в
do_check_malloc_state
:Якщо невірно вирівняний швидкий бін-блок:
Повідомлення про помилку:
do_check_malloc_state(): виявлено невирівняний швидкий бін-блок
malloc_consolidate
malloc_consolidate
Перевірки в
malloc_consolidate
:Якщо невірно вирівняний швидкий бін-блок:
Повідомлення про помилку:
malloc_consolidate(): виявлено невирівняний швидкий бін-блок
Якщо невірний розмір швидкого бін-блоку:
Повідомлення про помилку:
malloc_consolidate(): недійсний розмір блоку
_int_realloc
_int_realloc
Перевірки в
_int_realloc
:Розмір занадто великий або занадто малий:
Повідомлення про помилку:
realloc(): недійсний старий розмір
Розмір наступного блоку занадто великий або занадто малий:
Повідомлення про помилку:
realloc(): недійсний наступний розмір
Last updated