Glibc-2.23 源码分析——free部分下

阅读量372595

|评论1

|

发布时间 : 2021-09-18 10:30:51

 

前言

终于抽出时间对glibc动态内存管理部分源码进行初略的探究,试着从源码和动调来分析free函数执行过程和一些pwn的攻击技巧,分析的不是很全面,有错误的地方望提出指正,共同进步。ps:欢迎白帽子们关注 涂鸦智能安全响应中心


Mmap 处理

释放mmap空间内存

测试代码

断点于free

__libc_free()中Mmap_free处理代码

之后进入 mummap_chunk() 释放 mmap区域

malloc_consolidate函数

malloc_consolidate()算是一个特殊的free函数,作用是初识化main_arena->bin或者清空main_arena中的fastbins[]
源码文本搜索 malloc_consolidate (av) 一共在glibc-2.23/glibc/malloc/malloc.c >_int_malloc() 中出现了3次

情况1

申请smallbin size的堆块,并且当前bin未初始化

测试代码

关键判断逻辑 bin->bk 是否为0

之后进入 malloc_consolidate(),malloc_init_state()初始化 main_arena的bin

    //执行流程
  if (get_max_fast () != 0) {
    .........
  }
  else {
    malloc_init_state(av);
    check_malloc_state(av);
  }

执行结果

情况2

申请largebin size的堆块,并且main_arena中的fastbin不为空

测试代码

idx=0x40,have_fastchunks校验通过

进入malloc_consolidate()函数后,在fastbin初始化后get_max_fast()=0x80通过校验

clear_fastchunks的作用是将 main_arena 的结构体变量 flag置为1

atomic_exchange_acq()清空 main_arena中的fastbin[size]链表

malloc_consolidate函数之后的代码逻辑

执行效果,之前fastbin[0x20]中的堆块 0x602000被串入unsortedbin

情况3

在有fastbin的前提下,申请的chunk的size大于top_chunk,且申请size的大小属于smallbin

测试代码

调试到malloc_init_state()执行条件判断处,当前满足拥有fastchunks

进入malloc_consolidate()后清空了 fastbin

情况4

_int_free()中出现了1次

分析源码需要满足逻辑 在被释放的chunk的nextchunk是topchunk,且top_chunk size 大于等于 FASTBIN_CONSOLIDATION_THRESHOLD 情况下触发
测试代码

进入_int_free函数之后的关键逻辑 nextchunk = chunk_at_offset(free_chunk, size)是否为topchunk

之后合并free_chunk和topchunk

之后判断当前topchunk_size是否大于FASTBIN_CONSOLIDATION_THRESHOLD且存在fastbin之后执行 malloc_consolidate()
FASTBIN_CONSOLIDATION_THRESHOLD = 0xffff

具体函数内执行情况与情况2相同,遍历fastbin合并放入unsortedbins
执行结果


本文作者:Jambolt@涂鸦智能安全实验室

漏洞悬赏计划:涂鸦智能安全响应中心(https://src.tuya.com) 欢迎白帽子来探索。

招聘内推计划:涵盖安全开发、安全测试、代码审计、安全合规等所有方面的岗位,简历投递sec@tuya.com,请注明来源。

本文由jambolt原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/253049

安全客 - 有思想的安全新媒体

分享到:微信
+14赞
收藏
jambolt
分享到:微信

发表评论

jambolt

一个不太靠谱的前网络攻防研究员

  • 文章
  • 4
  • 粉丝
  • 2

热门推荐

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66