在高版本glibc中,由于在Tcache, fastbin等位置引入了较严格的安全检查,很多低版本glibc中可以使用的攻击手法都难以利用。Large bin attack可以将任意位置覆盖一个可控堆地址,成为了有力的攻击手段。在取消各种hook的高版本glibc下,使用large bin attack进行fsop等攻击也成为了经典的攻击手段。
分析
当free掉一个chunk的时候,如果范围不在Tcache范围内,或Tcache已满且不在fastbin范围内,并且不与top chunk相邻,chunk会进入unsorted bin
/* Place the chunk in unsorted chunk list. Chunks are not placed into regular bins until after they have been given one chance to be used in malloc. */
/* maintain large bins in sorted order */ if (fwd != bck) { /* Or with inuse bit to speed comparisons */ size |= PREV_INUSE; /* if smaller than smallest, bypass loop below */ assert (chunk_main_arena (bck->bk)); if ((unsignedlong) (size) < (unsignedlong) chunksize_nomask (bck->bk)) { fwd = bck; bck = bck->bk;