vortex11

Posted by rk700 on September 9, 2014

这道题是在strawdog提示下做出来的。他也说其实可以不用去读phk代码,我连链接的文章都没看完……

还是一步步来,打印变量的地址,发现第一次malloc(0x10)和malloc(0x800)之间相距0x1000+48。这0x1000用来放两个0x800,然后那48bytes应该就是一些信息了。

打印那部分内存,并对应到struct pginfo,void *page的地址正好是这个块的地址。如果我们想要让最后的malloc(0x10)返回地址A,那么就把page设为A-48。此外,由于是strcpy,所以我把next指针设为0xffffffff;对于字符串结尾的null,我选择字符0x10作为结束,因为shift正好是0。

没有用return而是exit,所以我们覆盖got。objdump -R vortex11得到exit的地址是0x0804c01c,即要把page设为0x0804bfdc

$ /vortex/vortex11 `perl -e 'print "A"x2048 . "\xff\xff\xff\xff" . "\xdc\xbf\x04\x08" . "\x10"'` `perl -e 'print "\xf0\xd8\xff\xff"'`