记录一下经验
常规地址溢出打印就不说了。
通过报错回馈找libc
有时候通过泄露的单一地址 如 puts printf 等用工具查或者手动查会查出很多libc版本,一个个试是一种办法,不过有一种方法可以更精确确定libc版本。
就拿我 0ctf_2017_babyheap 为例,
得出多个libc版本,一个个试,下载对应版本,再 one_gadget 一个个试,太麻烦。
其实可以这样:
把正确的覆盖地址故意改错引起异常:
运行就会得到这样的结果:
注意箭头的两libc内的地址,
手动查询:
就可以得到更加具体的libc版本了,当然也可以再加上之后leak的malloc_hook地址,其实是一样的。