【CTF】【PWN】【UAF】【萌新友好向wp】hitcontraining_uaf

因为本人也是个菜鸡,这道题的反编译又很阴间,所以我花了比较长的时间读反编译代码,也是一步一步理解的整个过程,感觉有一些收获,所以就想写一个比较详细的wp,个人觉得是我看到的最详细的wp了。
请♂享♂用♂我♂吧
在这里插入图片描述
这是add函数,add一次会malloc两个chunk。
同时要注意,这里的notelist是一个二维数组。notelist[i]表示的其实是notelist[i][0](八个字节).后面还有一个notelist[i][1]。
我们看
notelist[i],他被赋值为print_note_content这个地址的函数。
notelist[i][1]才是真正存放chunk的content的地方。
为什么要把notelist[i]赋值为print_note_content这个地址的函数呢?
下面这个函数是print_note函数
在这里插入图片描述
可以发现,这个函数把
notelist[v2]作为函数调用,后面的notelist[v2]则是这个函数的参数。这个函数就是
在这里插入图片描述
打印一个chunk的content。
下面就是delete_note的代码
在这里插入图片描述
可以看到,释放一个note需要两个free,一个free掉notelist[i][0]一个free掉notelist[i][1]。但是这里free之后没有对指针进行置NULL操作,所以存在Use After Free漏洞。
前面的逆向分析有点长,但是我觉得是有必要的。

接下来开始漏洞的分析。
我们之前已经说过了,一个note分为两个字段,notelist[i][0]和notelist[i][1].我们把他们命名为put段和content段。
如果我们把一个note的put段变成magic函数
在这里插入图片描述
那么我们在调用菜单里的print_note函数的时候,是不是相当于调用了system(’/bin/sh’)呢?当时是的。但是因为我们只能对content部分进行操作,无法对put部分进行操作,所以我们要想办法,操作put段

接下来是漏洞利用过程:
申请note0(大小为0x40):包括put0和con

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值