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