加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

UAF获取main_arena+88地址泄露libc基址

(2018-11-28 12:27:23)
标签:

main_arena

unsorted_bins

分类: 信息安全

linux中使用free()进行内存释放时,不大于max_fast (默认值为 64B)的 chunk 被释放后,首先会被放到 fast bins中,大于max_fastchunk或者fast bins 中的空闲 chunk 合并后会被放入unsorted bin中。


unsorted bin只有一个bin, 其中保存的块大小不定, 用于收集刚刚被free 或从大的块中分裂剩下的块。unsortbinfdbk指向自身main_arena+88中,该地址的相对偏移值存放在libc.so中,可以通过use after free后打印出main_arena的实际地址,结合偏移值从而得到libc的加载地址。


下面举个例子

http://s9/mw690/001xmED7zy7pxXXtxBCc8&690

此时free(0x6020a0),因为chunk长度够大,将形成一个unsorted bin。此时fdbk都指向main_arena+88

main_arena+88=0x7fab1c9de7b8 àmain_arena=0x7fab1c9de7b8 – 88 =0x7fab1c9de760

 

main_arena的偏移存放在libc中的malloc_trim()函数中:

http://s7/mw690/001xmED7zy7pxXXCjkO36&690


从而计算得到libc基址,libc_base= main_arena-0x3C2760=0x7FAB1C61C000


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有