pwn:堆方面的领悟

1.presize的复用

        在64位的情况下,若malloc类似于0x18,0x28的区域,多出的0x8为下一个chunk的presize区域,在进行堆溢出的时候,要注意这一点,测算好溢出的字节。

2.fastbin的回收机制

        fastbin大小为0x20-0x80(包括size和presize区域),当free的时候类似于0x28,0x38会被当作0x20,0x30回收,因为多出的0x8是下一个chunk的presize区域。

        更进一步来说,size区域0x7f也会被当作0x70回收,这有利于UFA漏洞的利用,在想要写入数据地址附近寻找到写有类似于0x7f数据的区域当作size域即可。

        由于内存页存在的原因,开启PIE,堆起始地址依然以000结尾,所以每个chunk的起始地址都是以000结尾。

3.小端序写入

        例如size域为8个字节,内容是0x20,实际是0x0000000000000020,由于是小端序存储,所以接近低地址的数据为'\x20',高地址数据均为'\x00',这就可以利用off-by-one漏洞,任意更改这个chunk的大小(注意此时被更改size域的上一个chunk大小必须为0x28,0x38的形式,多出0x8来覆盖presize区域,否则无法直接更改size)。

4.核心思想

        对于几天堆的学习,核心应该是改变堆指针,堆指针应该是在BSS区域或紧邻堆的分配区,具体要看add函数,可以通过unlink或堆溢出改变堆指针指向的地址,常见的是malloc_hook区或free_got区域。或者将堆分配在自己想要写入的区域,例如stack或malloc_hook,这一般使用UFA。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值