Pwnable.tw secret_of_my_heart

Off-by-Null
利用方式:
Poison null byte + House of spirit

不知道是否自己的解法过于复杂了

首先,逆向分析题目,题目共有add,delete,show三种操作,并且还有一个input=4869的隐含操作

打印mmap的地址,但是打印后程序就exit掉了,所以不一定好用,我的解法中也并没有用到
每一个note的结构0x48,如下:

其中secret根据malloc(size)分配,所以的note结构都储存在mmap的地址中,而该mmaped地址是随机化的

在delte note的时候,做的非常干净,memset掉了namefree掉了secret并将pointer置空

漏洞出现在add中,一个比较隐蔽的位置:

在写入secret时,后在输入的最后加入一个”\x00″,而该”\x00″会造成1 byte溢出,也是就我们常说的off-by-null。

利用off-by-null溢出覆盖下一个chunk的size位,能够进行shrink-freed0-chunk,从而在heap空间构造overlapping
具体的利用方式可见posion null byte:posion null byte
构造overlapping后的heap空间如下,我们可见topchunk的地址位于0x55db945e6030,而我们还有一个分配在0x55db945e60d0处的heap可以利用,这样就造成了overlapping

在heap空间中没有fcuntion pointer等,从而overlap的效果不太好
但是利用overlapping,可以打印freed chunk,即构造两个note指向同一个地址,free掉其中一个,使用另一个打印,即可泄露unsortedbin(av),从而计算得到libc地址。

由于程序保护全开,与Pwnable.tw secret garden的思路类似,我们使用fastbin attack 修改__malloc_hook==>one_gadget

  1. 使用house-of-spirir首先构造fake chunk,从而能够free掉一个0x60大小的chunk到FastbinY
  2. 利用overlapping修改这个freed chunk 的*fd=&__malloc_hook-0x23
  3. 再次申请0x60大小的fastbin,从而造成fastbin attack
  4. 申请到__malloc_hook附近的chunk,将one_gadget写入_malloc_hook
  5. Trigger malloc 同样因为one_gadgets不奏效,利用malloc_printerr成功触发malloc,这一点与secret garden类似

发表评论