因为2021 强网杯出了一道musl pwn,然后找到了这个题目,一起学习学习。

运行程序的话首先要装musl的驱动

没有开pie。
刚开始先申请空间。


空间是可读可写的。
assign

最多申请16个chunk,我们有一次溢出的机会。
destory

都清干净了。
transform

就改一下里面的内容。
examine

就是输出,但是只能有一次机会。
程序读完我们来看看musl libc的内容。
musl libc 是一个专门为嵌入式系统开发的轻量级 libc 库,以简单、轻量和高效率为特色。有不少 Linux 发行版将其设为默认的 libc 库,用来代替体积臃肿的 glibc 。
题目作者对题目的分析以及对musl libc与glibc异同的分析
题目作者已经将题目分析的很清楚了,我们再稍微做一些赘述。
首先利用的是musl静态堆内存管理来泄露libc地址。因为静态堆利用的是libc跟程序的空闲段,所以我们只要知道了某个chunk的地址,就可以得到libc或者程序基地址。
因为我们注意到的就是unlink是没有检查的,当然在musl中叫unbin。利用唯一能够用的一次堆溢出,我们要做一个unbin。
利用unbin来获得任意地址写。
有了libc,有了任意写,因为没有malloc_hook,只能FSOP,又注意它的IO_FILE不大一样,没有vtable指针,所以在利用的时候也要多注意。
exp
#!/usr/bin/env python2
from pwn import *
p = process("./carbon")
def alloc(sz, ctx='n', ans='N'):
p.sendlineafter(">", '1')
p.sendlineafter("What is your prefer size? >", str(sz))
p.sendlineafter("Are you a believer? >", ans)
p.sendafter("Say hello to your new sleeve >", ctx)
def free(idx):
p.sendlinea

本文介绍了一个名为muslpwn的挑战题,详细解析了如何利用musl libc堆管理漏洞进行攻击。通过伪造chunk并操纵关键内存区域,如stdin、binmap和brk,实现了任意地址写入,最终获取shell。文章深入探讨了musl libc与glibc的不同之处,并提供了一份完整的Python exploit代码。
最低0.47元/天 解锁文章
2141

被折叠的 条评论
为什么被折叠?



