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 下新安全机制及漏洞利用

2020安恒4月赛 PWN WRITEUP

今天有取证比赛…安恒的就只能本地打一下了。

PWN1-echo server

[*] '/home/Railgun/Desktop/test'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

有的师傅没发现pwn1是个压缩包,记得解压。

Continue reading 2020安恒4月赛 PWN WRITEUP

浅析PWN中Tcache机制利用

Tcache OverView

Tcache makes heap exploitation easy again

Tcache机制是libc.2.26之后引入的一种机制引入了两个新的结构体。

tcache_entry 和 tcache_perthread_struct

typedef struct tcache_entry
{
  struct tcache_entry *next;
} tcache_entry;


typedef struct tcache_perthread_struct
{
  char counts[TCACHE_MAX_BINS];
  tcache_entry *entries[TCACHE_MAX_BINS];
} tcache_perthread_struct;


static __thread tcache_perthread_struct *tcache = NULL;
Continue reading 浅析PWN中Tcache机制利用