美文网首页
musl堆利用技巧,你知道多少

musl堆利用技巧,你知道多少

作者: 顶风作案7号 | 来源:发表于2022-02-16 20:55 被阅读0次

前言

最近比赛出的musl题型的越来越多,不得不学习一波musl的堆利用来应对今后的比赛。这里要讲的是musl1.22版本的利用,因为网上可以找到很多审计源码的文章,所以这篇文章是通过一道题目来debug去学习堆的利用技巧,这里用到的是2021第五空间线上赛的notegame题目。

题目分析

1、首先是add函数,使用了calloc,申请的最大size是0x90

image.png

2、接着是delete函数,free之后将指针清空了

image.png

3、然后是edit函数,漏洞就出现在这里,这里存在溢出空字节的漏洞,可以对index清零指向 fake_meta

image.png

4、最后来看这个update函数,这个realloc函数会将原来chunk的内容复制到新的chunk里面,我们可以用这个来进行泄露libc地址

image.png

【一>所有资源获取<一】
1、网络安全学习路线
2、电子书籍(白帽子)
3、安全大厂内部视频
4、100份src文档
5、常见安全面试题
6、ctf大赛经典题目解析
7、全套工具包
8、应急响应笔记

调试分析

musl的chunk跟glibc的区别就是,chunk头的结构存放了比较少的堆块信息,没有像glibc那样存放了一些指针地址信息,所以我们如果要泄露libc地址的话也是要特定的条件,就是要chunk里面保存着另外一个chunk的指针地址或者其他指针地址的信息,而且也再不能直接改指针去达到任意分配的效果,而是要改chunk头仅有的信息去伪造meta进行任意分配。

malloc_context

add(0x20,'a'*0x20)

image.png

1、secret是用来校验meta域的一个key

2、free_meta_head存放着释放掉的meta,是个单链表结构,这里还没有释放,所以为空

3、active是根据size大小分出来的不同的meta

4、usage_by_class是对应meta的数量

meta

add(0x20,'a'*0x20)
add(0x20,'a'*0x20)
add(0x20,'a'*0x20)
add(0x20,'a'*0x20)
free(0)
image.png

1、prev和next分别是上一个和下一个meta页,这里都指向本身,表示只有一个meta页

2、 mem表示group的地址,它是由多个chunk组成

3、avail_mask表示可以分配的chunk情况,0x3f0=0b01111110000,因为我们已经分配了4个堆块,所以这里表示前四个不可分配。

4、freed_mask表示已经释放的chunk情况,因为我们释放掉了第一个chunk,所以这里的0x1表示的是free掉的第一个chunk

5、last_idx表示最后一个chunk的下标,这里是0x9,总数是0xa个

6、freeable表示已经释放的堆块个数

7、sizeclass表示管理的group的大小

8、maplen如果不为零表示mmap分配的内存页数

chunk

add(0x20,'a'*0x20)
add(0x20,'a'*0x20)
add(0x20,'a'*0x20)
add(0x20,'a'*0x20)
free(3)
image.png

1、表示距离group首地址的偏移分别为0x0、0x30、0x60,系统是根据这个偏移来找到对应的meta地址,所以我们如果能改这个偏移比如把chunk1的偏移置零的话,就能在chunk1-0x10的地方伪造一个meta的指针,而这个地方又是我们可以控制的chunk0的data域,于是我们就可以在任意地方伪造一个meta,不过这个地址必须是跟0x1000对齐的。

2、表示当前chunk的下标,当chunk被free之后会变成0xff

3、表示剩下用户空间的大小,chunk头后面的4个字节跟glibc的prev_size那样可以被上一个chunk复用, 所以我们就可知道我们分配的大小跟chunk大小的关系

0x10:0-0xc
0x20:0xd-0x1c
0x30:0x1d-0x2c
0x40:0x2d-0x3c
...

chunk的分配释放

add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
free(0)
add(0x50,'a'*0x50)
image.png

avail_mask = 0x10=0b10000

freed_mask = 0x1 =0b00001

musl的chunk释放了之后并不会马上分配,这里group里面有5个chunk,先是申请了3个chunk,然后free掉第一个,再次申请的时候并不会把第一个chunk分配出来,而是把group的第四个chunk申请出来,然后对应的avail_mask置零

add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
free(0)
free(1)
free(2)
add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
image.png

avail_mask = 0x6 =0b0110

freed_mask = 0x0 =0b0000

耗尽group的chunk的时候,musl会把释放掉的申请出来,并把其他chunk对应的avail_mask置1

meta的释放

add(0x50,'a'*0x50)
free(0)
image.png

当只有一个chunk是被分配出去的,而freed_mask=0,我们把这个chunk给free掉之后,系统会回收整块meta空间

add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
add(0x50,'a'*0x50)
free(0)
free(1)
free(2)
free(3)
free(4)
image.png

总结起来,就是说avail_mask |freed_mask的结果是满状态的时候,就会释放这个meta。

总结

本篇先通过debug的方法来简单阐述musl堆块的结构,后续再讲如何对它进行利用。

相关文章

  • musl堆利用技巧,你知道多少

    前言 最近比赛出的musl题型的越来越多,不得不学习一波musl的堆利用来应对今后的比赛。这里要讲的是musl1....

  • PPT配色技巧你知道多少?

    5.配色 强化主题, 区分差异, 制造意外,丰富页面,表达层级, 如何选择主色? 一份幻灯片中有一个主色,且贯穿始...

  • 隔音门选购技巧,你知道多少

    为了隔绝外界喧嚣的噪音污染,业主们在装修房屋时会采取一些隔音措施。比如窗户、墙体、门等都做隔音处理。爱福窝小编下面...

  • 美妆小技巧,你知道多少?

    1.眼药水的妙处 睫毛膏干了怎么办?滴一滴眼药水或者隐形眼镜护理液进去,睫毛膏就又活啦! 2.口红遮瑕 遮黑眼圈的...

  • 软文营销传播技巧你知道多少?

    在现如今的市场经济环境当中,企业为了生存和发展,都必须面对严酷的竞争环境。在这种情况下,谁能够获得更多宣传话语权,...

  • 经营公众号技巧,你知道多少?

    看到这片推文的时候,请先搜索公众号:情等一下,记得关注哦! 随着今年的公众号改版,个人号开通流量主条件放宽,粉丝从...

  • 费曼先生是你的救星

    文章大纲: 群体:看了很多文章却没记住多少的人们 问题:看了很多书,文章,却没记住多少 解决:利用费曼技巧,真正理...

  • alpine

    介绍: 采用busybox(linux)+musl libc(本地库)+ apk(包管理)的Linux系统,官网:...

  • 浴缸清洁小技巧,你知道多少呢?

    技巧1:往浴缸注入温水至最高喷嘴以上2寸处,或者在使用完之后将水留在浴缸中。在水中加入两勺低泡沫粉状自动碗碟洗洁精...

  • 原画中的上色技巧,你知道多少?

    今天为大家分享的是原画的上色技巧,在学习原画中我们都知道,不管是画场景还在角色等我们把线稿都勾勒出来之后就是上色,...

网友评论

      本文标题:musl堆利用技巧,你知道多少

      本文链接:https://www.haomeiwen.com/subject/krsdlrtx.html