hitcontrainingUAF之我见

0x00前言

这个题目做了好几天,因为自己对这个堆利用还不是很明白,就磨了几天,终于在昨天稍微对于这个有了进一步的了解,WP其他各大师傅已经写过了,我主要是写一下我不理解的地方:为什么第三次申请的时候就可以把内容写进去。

0x10 分析步骤

0x11 申请一次

申请一次

这是申请一次后的记录,申请的大小是16,0x08405fb是对应的print_content函数地址,然后接着的四个字节是我们输入内容的地址,就在(1,3)处,延续的是16字节。

这就是说,程序会先申请8个字节,前四个是函数,后四个是我们输入内容的地址。

0x20 申请两次

申请两次

申请两次和申请一次的分析基本一致。

0x30 释放两次

再申请一次

我们可以发现,释放完之后,会在fastbin里形成链,然后我们就想,能否将之前作为前八个字节的内容的地址作为我们可以输入内容的content地址?

0x 40 再申请一次

我们只需要申请的比之前的小,就比如我们申请的是12个字节,那么它就会把这个0x10所在的fastbin里的内容都给分配出来。

我们申请这一次的时候,它会把第二次申请的第一个八字节作为这一次的八字节,并把第一次申请的0x16大小的块分配给它,我们这一次就可以把content的前四个字节输入成magic的地址,然后print的时候相当于是进行了执行这个magic函数

然后就可以getshell了。

话说为什么这样就可以了呢?

这是由于,我们在最后print的是编号为0的堆块,它虽然已经被free掉了,但是没有置为null,那么我们再调用它的时候,就会调用magic函数,可以将再申请一次的图片和申请一次的图片进行对比,可以发现,此时的0x80485fb已经变成了0x8048945(magic地址),而这一段地址在print的时候就会被以为是原来的print_note_content函数,从而执行了magic。

这才是UAF的意义所在......

0x20 payload

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值