关于UAF的原理,wiki介绍的已经很简洁明了,不多赘述

例题:pwnable-hacknote

patchelf --set-interpreter /home/abgl/Desktop/glibc-all-in-one/libs/2.23-0ubuntu11.3_i386/ld-2.23.so --set-rpath /home/abgl/Desktop/glibc-all-in-one/libs/2.23-0ubuntu11.3_i386 ./hacknote

四个选项,增删打印退出

main,感觉有点乱,最底下才是add

可以申请0-4一共5个0x8的note,每次申请完note后可以申请一个自定义大小的chunk

后面这个函数实际上就是一个puts()

a1就是&ptr+i,&ptr+i+4就是我们申请的chunk的user data的地址(malloc的返回地址是 userdata的起始地址) 也就是每一次add实际申请的内存是这样的

chunk_content也就是chunk的user data

可以看到,虽然只申请了一次,但是有两个chunk,也就是note0和chunk0,并且可以看到note0的后四位指向了chunk0_addr+0x8也就是chunk0 user data的部分