堆!

实际上我开始学堆已经一个月了,但是网上实在找不到我能看懂的描述。导致现在还没入门。。。。
也是最近找到了一个不错的视频,跟着手把手敲一遍。
调试调试,记录一下笔记。

1-堆漏洞和栈溢出的不同

堆溢出不像栈溢出可以劫持程序流,直接控制程序流程。也不像格式化字符串一样狙击式攻击。他主要通过利用漏洞获取一个可以任意写的 chunk ,通过该 chunk 进行内存关键地址(GOT表,HOOK)的改写,进而达到一定目的。

1.1-堆溢出

⭐️堆溢出和栈溢出一样,重点在于溢出,重点在于溢出!!!
⭐️通过堆溢出,你可以修改下一个 chunk 的关键信息如 chunk 头中的信息,如果下一个 chunk 是 free 状态你甚至可以修改他的 bk 和 fd 字段进行攻击。

1.2-DOUBLE FREE

一个 chunk 被 free 后并没有把指针置 NULL,导致可以再次 free,这样会导致有两个指针指向同一个 chunk,如果有这样的事情,可能会泄露出地址内存,或者修改 BK 和 FD 指针。

此漏洞可以导致你拥有可以在任意可读写地址进行读写的能力!!!

2-利用方式

2.1-GOT表改写

常见方式:
Free 改为 System

1
2
C
puts("/bin/sh") == system("/bin/sh")

2.2-HOOK修改

常见的利用方式有:
⭐️malloc_hook
⭐️free_hook
⭐️realloc_hook

hook机制

malloc_hook 为例:

当你调用 malloc 时,首先检查 malloc_hook 里面是否有函数地址,就执行函数。如果没有函数地址,malloc_hook 继续往下走。
2021-11-10_210108

realloc_hook

用来调节栈环境,以便于利用 malloc_hook 或者 free_hook 修改为 onegadget

Unsorted bin 可以看做是 small bins 和 large bins 的 cache,只有一个 Unsorted bin ,以双向链表管理空闲 chunk,空闲 chunk 不排序,所有的 chunk 在回收时都要先放到 Unsorted bin 中,分配时,如果在 Unsorted bin 中没有合适的 chunk ,就会把 Unsorted bin 中所有 chunk 分别加入到所属的 bin 中,然后再在 bin 中分配合适的 chunk。Bins 数组中的元素 bin[1] 用于存储 Unsorted bin 的 chunk 链表头。

今天先到这里,回去继续写吧。

3 轻小说《男酮群的日常》

第一章 🍖炫重生futa

🍖炫穿着她新买的小裙子蹦蹦跳跳的上学去了。
忽然然她停了下来,貌似是想起了什么事情,
然后手伸向裤裆,调整了一下蛋道。
继续蹦蹦跳跳的去上学。