Heap Functions Security Checks
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
有关更多信息,请查看:
这是执行的检查摘要:
检查指定块的大小是否与下一个块中指定的 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)
有关更多信息,请查看:
快速 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
有关更多信息,请查看:
_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