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
在 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
快速 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
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)