largebin attack和house of storm如何结合形成一种高级攻击手段?

摘要:各版本glibc的保护手段(从2.23开始只关注重要变化) 这里先简单说一下各个glibc版本的变化,如果没说到的各位师傅可以补充 首先是2.24开了虚表保护,house of orange需要变化才能利用了 然后是2.26有tcache机
各版本glibc的保护手段(从2.23开始只关注重要变化) 这里先简单说一下各个glibc版本的变化,如果没说到的各位师傅可以补充 首先是2.24开了虚表保护,house of orange需要变化才能利用了 然后是2.26有tcache机制 2.27把abort函数中的fflush函数删了,完整的house of orange就此落幕 2.28在tcache里加了key字段防止tcache double free 2.29在unsortedbin里加了检测,unsortedbin落幕 2.30在largebin里加了检测,largebin attack只能写一个地址了 2.32加了safe linking机制,修改fd和bk指针需要有堆地址了 2.35则把hook函数移除了,之后堆的主要攻击就转向IO方向了。 Largebin attack 2.31前的攻击 顾名思义就是利用largebin来进行攻击,这里我贴一下源码(2.31之前),以下注释来自浅析Large_bins_attack在高低版本的利用 while((unsigned long)size < fwd->size){ fwd = fwd->fd_nextsize; assert ((fwd->size & NON_MAIN_ARENA) == 0); } //这里检测的是从unsorted_bins里提取出的堆块是否小于large_bins里最近被释放的堆块的大小,如果小于,就将fwd向前移,也就是与比它更小的堆块对比 if ((unsigned long) size == (unsigned long) fwd->size) /* Always insert in the second position. */ fwd = fwd->fd;//相等的话,就往后排列 else { victim->fd_nextsize = fwd; //这里,victim是从unsorted_bin提取出来的堆块,fwd是最近被释放进large_bin的堆块,分别对应我们的p3,p2 victim->bk_nextsize = fwd->bk_nextsize; //在此前,p2->bk_nextsize已经被我们设置为了stack_var2-0x20的地址,所以p3的bk_nextsize指向它 fwd->bk_nextsize = victim; //p2->bk_nextsize指向p3 victim->bk_nextsize->fd_nextsize = victim; //p3->bk_nextsize = stack_var2 - 0x20,也就是说我们已经伪造了一个堆块,(stack_var2-0x20)->fd_nexitsize就是stack_var2的地址,将该地址赋值p3的头指针 } bck = fwd->bk; //p2的bk我们设置成了stack_var1-0x10,所以bck成了我们stack_var1-0x10这个虚假的chunk 这个主要是什么意思呢,就是当unsortedbin的堆块要进入largebin中时,先检测其大小,我们利用的话一般要让进入largebin的堆块大于原有largebin中的堆块,这样就可以进下面这个else分支。
阅读全文