前言
打保护全开的堆题时碰到的问题, 大佬wp直接给exp, 但是奈何萌新很多细节不懂啊
现在记录一下寻找main_arena相对libc偏移的方法(又水一篇博客)
在0CTF 2017 babyheap这题中, 利用 fast chunk 和 small chunk 堆叠技术将main_arena的实际地址泄露出来, 另外通过这个相对偏移, 计算libc的加载基址, 完成libc泄露
过程
对照看下mallo.c的源码
方法一
逆向分析libc.so文件
拖进IDA
函数框搜索malloc_trim
这里用libc-2.23.so版本的libc文件演示, 相对偏移就是0x3C4B20
方法二
gdb反汇编, 根据源码分析汇编指令可以得到相对偏移
[rsp + 0x14]
是局部变量result
[rsp + 0x8]
是局部变量ar_ptr
, 所赋值就是&main_arena
总结
上来直接打高难度堆题, 到处碰壁, 很多问题只能一点点解决, 不过收获还是不小
很多exp把找地址这种《简 单 操 作》省略了, 纯萌新看得迷雾重重, 还是各种搜索和实践才找到解答, 以此记录一下, 另外malloc.c源码需要找个时间研读一遍, 顺便写个源码阅读笔记好了(flag就此立下)