pwn工具箱之unsorted bin attack

unsorted bin attack

基本信息

利用类型:堆利用
堆利用类型:针对unsorted bin的利用,也就是需要用normal chunk或者large chunk释放得到的
利用思想:unsorted bin是一个双链表,在分配时会将unsorted bin中的chunk从unsorted bin中移除,是一个链表的unlink操作。如果能够控制unsorted bin chunk的bk,可以向任意位置写入一个指针,但是指针位置处内容可能可以控制,指针本身不可以控制。

利用难点

  1. 自由度比较小,分配的指针处内容也不一定就可以控制,所以条件比较苛刻
  2. 需要能够创建两个unsorted bin而且不合并
  3. 需要能够更改unsorted bin的bk指针

详细信息

当使用unsorted bin进行分配的时候,有这么一句话:

          /* remove from unsorted list */
          unsorted_chunks (av)->bk = bck;
          bck->fd = unsorted_chunks (av);

这一句话本意是将unsorted chunk从unsorted bin的链表中unlink下来,但是如果我们可以控制bk,就可以使得bck位置可控。而bck->fd是从相对位移去找的,换句话说,只要我们将bck修改为想要修改的位置-2*指针大小就可以使得bck->fd为我们要修改的位置,进而修改任意位置。

不过因为bck->fd = unsorted_chunks(av)这句话,而unsorted_chunks (av)并不能控制为任意内容,所以相对自由度还是比较小的,只能使得任意位置修改为一个指针。

利用建议

  1. libc版本2.25之前(<= 2.24) 可以通过修改_IO_list_all来劫持ip。在堆分配出错的时候libc会flush所有的IO,而flush操作会用到_IO_list_all,如果修改_IO_list_all,会导致分配错误,因为_IO_list_all位置的并不是有效的堆块,然后触发flush操作,通过构造flush操作的特殊输入可以控制ip,调用system。具体方法见HITCON 2016的house of orange。TCTF 2017 final的world of fastbin也是可以用这种方法。放一个(传送门)[http://blog.csdn.net/qq_29343201/article/details/73161510]
  2. 也可以通过这种方法更改libc中的max_fast,从而使得任意分配都使用fastbin来实现,为其他漏洞提供方案。
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读