mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
92 lines
5.1 KiB
Markdown
92 lines
5.1 KiB
Markdown
# 堆函数安全检查
|
||
|
||
<details>
|
||
|
||
<summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE(HackTricks 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>htARTE(HackTricks 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>
|