Heap Functions Security Checks

Reading time: 7 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

更多信息请查看:

unlink

这是执行检查的摘要:

  • 检查块的指示大小是否与下一个块中指示的 prev_size 相同
  • 错误信息:corrupted size vs. prev_size
  • 还要检查 P->fd->bk == PP->bk->fw == P
  • 错误信息:corrupted double-linked list
  • 如果块不小,检查 P->fd_nextsize->bk_nextsize == PP->bk_nextsize->fd_nextsize == P
  • 错误信息:corrupted double-linked list (not small)

_int_malloc

更多信息请查看:

malloc & sysmalloc

  • 快速 bin 搜索期间的检查:
  • 如果块未对齐:
  • 错误信息:malloc(): unaligned fastbin chunk detected 2
  • 如果前向块未对齐:
  • 错误信息:malloc(): unaligned fastbin chunk detected
  • 如果返回的块的大小因其在快速 bin 中的索引而不正确:
  • 错误信息:malloc(): memory corruption (fast)
  • 如果用于填充 tcache 的任何块未对齐:
  • 错误信息:malloc(): unaligned fastbin chunk detected 3
  • 小 bin 搜索期间的检查:
  • 如果 victim->bk->fd != victim
  • 错误信息:malloc(): smallbin double linked list corrupted
  • 合并期间的检查 针对每个快速 bin 块:
  • 如果块未对齐触发:
  • 错误信息:malloc_consolidate(): unaligned fastbin chunk detected
  • 如果块的大小与其所在索引应有的大小不同:
  • 错误信息:malloc_consolidate(): invalid chunk size
  • 如果前一个块未使用且前一个块的大小与 prev_chunk 指示的大小不同:
  • 错误信息:corrupted size vs. prev_size in fastbins
  • 无序 bin 搜索期间的检查
  • 如果块大小异常(太小或太大):
  • 错误信息: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 应始终指向 arena 结构。
  • 如果下一个块未指示前一个块正在使用:
  • 错误信息: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)
  • 按索引搜索大 bin 的检查:
  • bck->fd-> bk != bck
  • 错误信息:malloc(): corrupted unsorted chunks
  • 按下一个更大搜索大 bin 的检查:
  • bck->fd-> bk != bck
  • 错误信息:malloc(): corrupted unsorted chunks2
  • 顶块使用期间的检查:
  • 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 快速 bin 中的检查:
  • 如果块的大小无效(太大或太小)触发:
  • 错误信息:free(): invalid next size (fast)
  • 如果添加的块已经是快速 bin 的顶部:
  • 错误信息:double free or corruption (fasttop)
  • 如果顶部块的大小与我们添加的块的大小不同:
  • 错误信息:invalid fastbin entry (free)

_int_free_merge_chunk

  • _int_free_merge_chunk 中的检查:
  • 如果块是顶部块:
  • 错误信息:double free or corruption (top)
  • 如果下一个块超出 arena 的边界:
  • 错误信息: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 中的检查:
  • 将块添加到无序 bin,检查 unsorted_chunks(av)->fd->bk == unsorted_chunks(av)
  • 错误信息:free(): corrupted unsorted chunks

do_check_malloc_state

  • do_check_malloc_state 中的检查:
  • 如果未对齐的快速 bin 块:
  • 错误信息:do_check_malloc_state(): unaligned fastbin chunk detected

malloc_consolidate

  • malloc_consolidate 中的检查:
  • 如果未对齐的快速 bin 块:
  • 错误信息:malloc_consolidate(): unaligned fastbin chunk detected
  • 如果快速 bin 块大小不正确:
  • 错误信息:malloc_consolidate(): invalid chunk size

_int_realloc

  • _int_realloc 中的检查:
  • 大小太大或太小:
  • 错误信息:realloc(): invalid old size
  • 下一个块的大小太大或太小:
  • 错误信息:realloc(): invalid next size

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks