personal skills

  • 注意二级指针,*的作用是解引用,把它想成访问地址又形象又好理解
  • 学会画图很重要
  • 注意malloc的大小和实际开辟的chunk的大小
  • 传给free的指针应当是指向mem的指针
  • tcache中next指针指向的是mem;fastbin的fd指针指向的是chunk header
  • 一个指针值为多少它就指向哪里
  • 各种bin,tcache都是有一个结构体指针数组,充当着链表头
  • 区分&p,p,*p
  • 注意add,edit,show,delete函数的判断条件,这很重要,特别是delete有时候没有任何判断
  • 基本上要打hook的情况下,最后都是要通过tcache构造:chunk->hook,再申请两次向hook里面写入东西
  • 要有防止与top chunk合并的意识,每次多分配一个chunk防止与top chunk合并
  • 当a是指针变量时,a->b等价为(&a).b
  • 从 tcache bin 中申请堆块出来需要保证 counts > 0,一般情况下打hook时tcache结构都是1->0变成1->hook,counts>0是满足的,当特殊情况是需要留意counts > 0
  • 注意到底有没有uaf可以利用,下面这个看似置0了,但是注意是栈上的置0,不影响bss段中的notes
  • 注意fastbin是0x20-0x80,留意打tcache时chunk大小是fastbin
  • 一般没有uaf的时候,就必须有off-by-one,不然就无法泄露,除非partial overwrite申请出stdout
  • largebin attack最好用之前申请过的,反正总有奇奇怪怪的问题
  • 学会伪造fake chunk泄露libcbase这个技巧,想一想free的一些检查,很容易就得到了libcbase
  • 当没有edit的时候一定会打chunk overlapping,只有得到一个大的overlapping chunk之后,将其free后再add就可以实现等同于edit的功能,这是一种很常见的技巧