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

Для отримання додаткової інформації перегляньте:

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
  • Перевірки під час використання 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

Для отримання додаткової інформації перегляньте:

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