前提介绍

  • off-by系列不单单只有off-by-oneoff-by-null还有Off-by-TwoOff-by-ManyOff-by-HalfOff-by-Block,但是off-by-oneoff-by-null是最为常见的
  • 这里的off-by-one等并不是只用于打堆,其他方面的pwn也可以利用该漏洞,但是打堆时这类漏洞会可以花式利用。可以进行堆布局(堆风水)和进行堆叠。例如,off-by-one,指非预期溢出1个字节,这样就可以修改堆块的标志位和Size的大小。再如off-by-null,非预期的溢出\x00也可以修改堆块的标志位(常用于堆叠)。这种都被称之为堆布局(堆风水)

img

堆叠

  • 堆叠(overlap)一般只的就是将两个内存大小比较小的堆块,合并成一个大的堆块。将ptmalloc这一管理机制进行漏洞的理由,对堆进行一定的布局。堆叠有两种叠法,一种是向前合并,另一种是向后合并。
    • 向前合并的逻辑比较多,可以比较好的利用。直接修改下一个堆块的prev_size即可。
    • 而后向合并的逻辑,并不是很好利用,也没有模版化的利用,一般要用perfect fit来绕过。