how2heap学习小结
本文是自己的一点心得,没有特别地总结整理。 编译找了半天编译的方法,结果突然发现文件夹里有个Makefile,一键make就全编译了,我觉得我就是个憨憨。 first_fitchar* a = malloc(512); 经过对齐后 chunk size 为 0x210 free(a); 后块a被放到 unsorted_bins 中 执行 c = malloc(500); (500+8)经过16字节对齐后 chunk size 为 0x200 ,此时small bins是空的,就从unsorted bins中找,找到了大小为0x210的块a。而0x210 的块切割后剩下的块大小为0x10,小于MINSIZE(0x20),所以不切直接分配。 然后自己测试了一下 c = malloc(512-0x20+8)..
Read more巅峰极客 ichunqiu wp
记录一下巅峰极客的两道pwn,比赛只出了第一道,第二道PWN是赛后复现的,感觉很值得一学,对理解IOFILE很有帮助。 Pwn题目分析保护全开,乍看add、delete、show、change全有 然而仔细一看这个change往块里读的是stream的内容 而stream是fopen("/dev/urandom", "r");得到的fd delete存在UAF add要求块数量<=0xF,大小>0x7F,块的地址必须在[heapbase,heapbase+0x600] show,没什么特别的 利用 泄露libc和heap base 构造overlap改top的size,利用house_of_force在堆基地址分配块,改stream的内容 改st..
Read moreRoarCTF wp
realloc_magic一共三个功能 realloc。realloc 0可以达到free+清零的效果。 free。存在UAF,可以realloc已经free的内存。 backdoor。功能是清零,只能用一次。 overlap tcache 的方法是free块8次,就可以把这一块放到unsorted bin里,把块分为A|B,A和B得不一样大,realloc(A.size)得到A,realloc(0)把A放到tcache里,realloc(B.size)得到B,realloc(0)把B放到tcache里,realloc(A+B的size)改B的size和fd,realloc(B.size),realloc(0),再realloc(B.size)就可以得到fd所在的内存。 通过以上overlap的方法改..
Read moreheap overlap方法小结
本文不考虑和top合并, 并且大小非fastbin。实际做题的时候得要考虑top。 free时overlappoison_null_byteP(P是size被null的块)|Q 需要构造的点: 1. chunksize(P) == prev_size (next_chunk(P)) //因为offbyone后的size一定<=原始size,所以prev_size (next_chunk(P)) 可以自己伪造 2.free(P)后分割P为块A和B A|B,此时Q的pre_inuse也为0了 3.free A,free Q,A和Q会 consolidate, B就被overlap了 注意 free 的时候 - 检查前一个chunk空闲吗(检查本块的prev_inuse) - 检查后一个是不是top chu..
Read more