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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
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
更多信息请查看:
- 快速 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
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。