hacktricks/binary-exploitation/heap/heap-functions-security-checks.md

92 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 堆函数安全检查
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
## unlink
此函数从双向链表中移除一个块。常见检查确保在取消链接块时保持链接列表结构一致。
* **一致性检查**
* 检查 `P->fd->bk == P``P->bk->fd == P`
* 错误消息:`corrupted double-linked list`
## \_int\_malloc
此函数负责从堆中分配内存。这里的检查确保在分配期间内存不会损坏。
* **Fastbin大小检查**
* 从fastbin中移除块时确保块的大小在fastbin范围内。
* 错误消息:`malloc(): memory corruption (fast)`
* **Smallbin一致性检查**
* 从smallbin中移除块时确保双向链表中的前一个和后一个链接是一致的。
* 错误消息:`malloc(): smallbin double linked list corrupted`
* **Unsorted Bin内存范围检查**
* 确保未排序bin中块的大小在最小和最大限制内。
* 错误消息:`malloc(): memory corruption | malloc(): invalid next size (unsorted)`
* **未排序Bin一致性检查第一种情况**
* 在将剩余块插入未排序bin时检查 `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`
* 错误消息:`malloc(): corrupted unsorted chunks`
* **未排序Bin一致性检查第二种情况**
* 与前一个检查相同,但在拆分快速或小块后插入时触发。
* 错误消息:`malloc(): corrupted unsorted chunks 2`
## \_int\_free
此函数释放先前分配的内存。这里的检查有助于确保适当的内存释放并防止内存损坏。
* **指针边界检查**
* 确保被释放的指针没有环绕内存。
* 错误消息:`free(): invalid pointer`
* **大小检查**
* 确保被释放的块的大小至少为 `MINSIZE``MALLOC_ALIGNMENT` 的倍数。
* 错误消息:`free(): invalid size`
* **Fastbin大小检查**
* 对于fastbin块确保下一个块的大小在最小和最大限制内。
* 错误消息:`free(): invalid next size (fast)`
* **Fastbin双重释放检查**
* 在将块插入fastbin时确保头部的块与要插入的块不同。
* 错误消息:`double free or corruption (fasttop)`
* **Fastbin一致性检查**
* 在插入到fastbin时确保头部块和要插入的块的大小相同。
* 错误消息:`invalid fastbin entry (free)`
* **顶部块一致性检查**
* 对于非fastbin块确保块与顶部块不同。
* 错误消息:`double free or corruption (top)`
* **内存边界检查**
* 确保内存旁边的下一个块在arena的边界内。
* 错误消息:`double free or corruption (out)`
* **Prev\_inuse位检查**
* 确保下一个块中的前一个使用位被标记。
* 错误消息:`double free or corruption (!prev)`
* **正常大小检查**
* 确保下一个块的大小在有效范围内。
* 错误消息:`free(): invalid next size (normal)`
* **未排序Bin一致性检查**
* 在将合并的块插入未排序bin时检查 `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`
* 错误消息:`free(): corrupted unsorted chunks`
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>