Heap Functions Security Checks
Reading time: 5 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
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(): 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
- Перевірки під час використання Top chunk:
chunksize(av->top) > av->system_mem
:- Повідомлення про помилку:
malloc(): corrupted top size
tcache_get_n
- Перевірки в
tcache_get_n
: - Якщо частина неправильно вирівняна:
- Повідомлення про помилку:
malloc(): unaligned tcache chunk detected
tcache_thread_shutdown
- Перевірки в
tcache_thread_shutdown
: - Якщо частина неправильно вирівняна:
- Повідомлення про помилку:
tcache_thread_shutdown(): unaligned tcache chunk detected
__libc_realloc
- Перевірки в
__libc_realloc
: - Якщо старий вказівник неправильно вирівняний або розмір був неправильним:
- Повідомлення про помилку:
realloc(): invalid pointer
_int_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
швидкому біні: - Якщо розмір частини недійсний (занадто великий або малий), викликайте:
- Повідомлення про помилку:
free(): invalid next size (fast)
- Якщо додана частина вже була верхньою частиною швидкого біна:
- Повідомлення про помилку:
double free or corruption (fasttop)
- Якщо розмір частини на верху має інший розмір, ніж частина, яку ми додаємо:
- Повідомлення про помилку:
invalid fastbin entry (free)
_int_free_merge_chunk
- Перевірки в
_int_free_merge_chunk
: - Якщо частина є верхньою частиною:
- Повідомлення про помилку:
double free or corruption (top)
- Якщо наступна частина знаходиться за межами кордонів арени:
- Повідомлення про помилку:
double free or corruption (out)
- Якщо частина не позначена як використана (в prev_inuse наступної частини):
- Повідомлення про помилку:
double free or corruption (!prev)
- Якщо наступна частина має занадто малий або занадто великий розмір:
- Повідомлення про помилку:
free(): invalid next size (normal)
- Якщо попередня частина не використовується, вона спробує консолідувати. Але, якщо
prev_size
відрізняється від розміру, вказаного в попередній частині: - Повідомлення про помилку:
corrupted size vs. prev_size while consolidating
_int_free_create_chunk
- Перевірки в
_int_free_create_chunk
: - Додаючи частину в неупорядкований бін, перевірте, чи
unsorted_chunks(av)->fd->bk == unsorted_chunks(av)
: - Повідомлення про помилку:
free(): corrupted unsorted chunks
do_check_malloc_state
- Перевірки в
do_check_malloc_state
: - Якщо неправильно вирівняна частина швидкого біна:
- Повідомлення про помилку:
do_check_malloc_state(): unaligned fastbin chunk detected
malloc_consolidate
- Перевірки в
malloc_consolidate
: - Якщо неправильно вирівняна частина швидкого біна:
- Повідомлення про помилку:
malloc_consolidate(): unaligned fastbin chunk detected
- Якщо неправильний розмір частини швидкого біна:
- Повідомлення про помилку:
malloc_consolidate(): invalid chunk size
_int_realloc
- Перевірки в
_int_realloc
: - Розмір занадто великий або занадто малий:
- Повідомлення про помилку:
realloc(): invalid old size
- Розмір наступної частини занадто великий або занадто малий:
- Повідомлення про помилку:
realloc(): invalid next size
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.