Skip to content

house of storm

复制本地路径 | 在线编辑

很有趣的攻击,结合了 unsorted bin attack 和 large bin attack 的一个手段。由于 unsorted bin attack 只能在 2.29 以下版本使用,所以这个攻击也是只能在 2.29 以下使用。

unsortebin attack 和 largebin attack 回顾

先回顾两种基础攻击方式,这里就直接说结论,具体细节看其他文章。

  1. unsorted bin attack:

    • 可以向任意 target 写入某个 libc 地址(即unsorted_chunks(av));
    • unsorted_chunks(av)->bk 同时也被赋值为了 target - 0x10
  2. large bin attack:

    • 可以向任意 target 写入某个 libc 地址(是 largebin 中的某个索引地址)

只要知道这两种攻击的效果,下面的 house of storm 就不难了。

算法原理

准备 unsorted 和 largebin

如下所示,没啥好说的。一开始 free 之后两个块都在 unsorted 中,然后申请一个块使得另一个放入到了 largebin 中,最后再释放掉这个块,会放入 unsorted 中。

unsorted_bin=malloc(0x418);
malloc(0X18);
large_bin=malloc(0x408);
malloc(0x18);

free(large_bin);
free(unsorted_bin);
unsorted_bin=malloc(0x418);
free(unsorted_bin);

unsorted bin 攻击

下面就是一个最正常的 unsorted bin 攻击:

unsorted_bin[0]=0;
// 即 unsorted_bin->bk = target_addr
unsorted_bin[1]=(unsigned long)target_addr;

//则 target_addr->fd = unsorted_chunks(av),不过似乎没有发挥使用
//重点是:unsorted_chunks(av)->bk = target_addr

假设这个块脱链之后(后面会让他脱链),会修改了 unsorted_chunks(av) 中的 bk,此时系统会认为 malloc 中的 unsorted 链表里面还有一个块,即 target_addr

large bin 攻击

但这个时候直接 malloc 还不行,因为只有 malloc 对应大小的块,系统才会返回给我们。所以这里用最正常的 large bin attack 修改 size

large_bin[0]=0;
large_bin[1]=(unsigned long)target_addr+8;
large_bin[2]=0;
large_bin[3]=(unsigned long)target_addr-0x18-5;

// 此时 (target_addr-0x18-5)->fd_nextsize = victim(a heap_addr)
// 即 target_addr + 3 = victim

假设某个块放入到 largebin 中时,会把 target_addr + 3 修改成 victim 这个 libc 地址,为啥要 +3,可以看下面的图,相当于偏移写:

上面的是小端写,仔细体会。很有趣,最终相当于是利用了 libc 地址中的高位字节,修改了 size 是 0x56。

控制 target

所以如果我们申请一个 0x50 大小的块,而上面两种攻击成功做好了铺垫,让系统认为此时 unsorted 链表正好有一个对应的块,所以就会返回给我们,此时控制了 target_addr

这里我们只需要一条语句 malloc(0x48) 就行了,执行前系统是 unsorted bin 和 large bin 各有一块,并且里面块的内容已经修改完毕了,就等着触发了。执行 malloc 之后:

  1. 首先会遍历 unsorted bin,所以触发了 unsorted_bin 的脱链,所以触发了 unsorted bin 攻击
  2. 脱链之后 unsorted_bin 会放入到 large bin 中,所以触发了 large bin 的插入,所以触发了 large bin 攻击
  3. 两种攻击都完毕后,系统会认为 unsorted 链表还有一个块,地址是 target,大小是 0x50,而我们又恰好要这个大小的块,所以返回。

参考

  1. https://www.cnblogs.com/tolele/p/16728502.html :以上内容都是参考本篇文章

Comments