Glibc 2.29 下新安全机制及漏洞利用

在Glibc2.29中增加了几个新的安全机制,我呢就参考了其他一些师傅的文章学习了一番,并作如下记录

我只是重新走一遍师傅们的路,叙述如有错误还请斧正

unlink(null-by-one)

###GLIBC 2.23###
/* consolidate backward */
if (!prev_inuse(p)) {
    prevsize = p->prev_size;
    size += prevsize;
    p = chunk_at_offset(p, -((long) prevsize));
    unlink(av, p, bck, fwd);
}


###GLIBC2.29###
/* consolidate backward */
if (!prev_inuse(p)) {
    prevsize = prev_size (p);
    size += prevsize;
    p = chunk_at_offset(p, -((long) prevsize));
    if (__glibc_unlikely (chunksize(p) != prevsize))
        malloc_printerr ("corrupted size vs. prev_size while consolidating");
    unlink_chunk (av, p);
}

如上所示代码,在backward consolidate的时候检查了size!=prev_size。

Continue reading Glibc 2.29 下新安全机制及漏洞利用