ToB企服应用市场:ToB评测及商务社交产业平台

标题: 通过挟制线程arena实现任意地址分配 n1ctf2018_null [打印本页]

作者: 涛声依旧在    时间: 2024-5-19 03:53
标题: 通过挟制线程arena实现任意地址分配 n1ctf2018_null
通过挟制线程arena,当堆开了一个线程之后,如果没有做好保护随之的危险也悄然而至 ❗

BUU上的n1ctf2018_null很好的说明了这个题目
题目链接:BUUCTF在线评测 (buuoj.cn)
看一下保护:

除了pie保护剩下的保护全开了,64位ida载入看一下

上来是一个输入密码,密码是i'm ready for challenge ,随后登录乐成,创建了一个新的线程

我们进去看看

是一个死循环,可以瞥见对输入的chunk大小以及数目都是非常大的,而且程序还有一个溢出我们看一下sub_400bca

那么可以瞥见当我们输入的内容比size小的时间,我们可以二次输入这次最大可以输入size的大小,缘故起因是a2没有进行更新,那么这里有溢出点

我们再看一下它下面的函数

如果我们能修改此处的地址为system,而参数是/bin/sh那么我们就可以得到shell

如果我们溢出的字节富足大可以覆盖线程arena,那么我们可将fake_chunk链接到fastbin,进而分配我们想要的地址,但是arena是先mmap出来的,heap是过后才分配出来,所以我们覆盖不了线程arena,但是如果,我们把这块内存耗完会发生什么,那么系统会重新分配mmap一段内存,但是由于它后面是libc的地址,所以它会往前面找一块地址,那么我们输入的内容就可能在线程arena的前面,我们先申请这么大看看
 

看一下vmmap

我们看一下此处内容,从链表特征上来看,这是一个线程arena结构,它位于地址较低的地方

看看我们输入的内容的位置

计算一下
 

那么我们加刚刚申请的这个是262个,我们再申请262个看看


我们输入的数据在它前面,那么可以瞥见我们再利用二次输入数据是可以覆盖线程arena的


现在计算偏移进行覆盖

填充0x50个垃圾数据覆盖到线程arena,这里注意这里有个大小我们不要随意去改变,可以适当改最前面的一个字节,不然会出现一系列的题目
后面我们在把我们的fake_chunk接上去


那么此时我们再次申请chunk就会申请到假chunk
选择0x60201d的缘故起因是这里可以伪造假chunk的size位

然后我们把0x602038的地方改成system的plt地址

然后申请0x60大小的chunk就可以申请到fake_chunk


程序会把rbp-8处的位置给rdi,而且这个位置就是我们申请chunk输入的数据,随后call rax(0x602038)进而得到shell,记得补齐到0x60哦✅

wp:


 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4