【CTF】【PWN】胎教向babyfengshui_33c3_2016题解

这篇博客分析了一个程序中的内存管理机制,特别是涉及chunk分配和释放。作者通过创建和删除chunk,利用unsortedbin特性触发特定的内存布局,以绕过检查并可能执行任意代码。关键操作包括填充特定chunk以影响ptr数组,以及通过编辑功能修改内存区域。博客还提供了利用此漏洞的Python代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跳过checksec,我们直接分析程序。
在这里插入图片描述
我这里把这些函数命名为add,delete,display,edit。
先看add。
在这里插入图片描述
就是创建两个chunk,一个的地址存放在s里,一个的地址存放在v2里。
然后把s存在v2指向的地址里,用一个名为ptr的数组存放v2。

在这里插入图片描述
在这里插入图片描述
可以看出来,我们创建了两个chunk。按顺序命名为chunk1和chunk2.我们把这两个chunk看作是一个user的两部分。显然,chunk1存放了user的内容,chunk2存放了user的内容的地址和user的名字。
在这里插入图片描述
其中name的位置在存放内容后面4个字节。
在这里插入图片描述
然后是ptr这个数组,存放了我们创建的user的内容的地址。

在这里插入图片描述
并且每创建一个user,xxxx会加1,可以看作是一个计数器。

然后是edit。
在这里插入图片描述

在这里插入图片描述
然后通过上述函数在ptr[xxxx]这里输入text,长度为length+1。
然后是delete函数:
在这里插入图片描述
display函数可以供我们泄露got表
在这里插入图片描述

重点!
在这里插入图片描述
上述代码如何理解呢?
其实这是一个安全机制,下面根据一张图来解释一下。
在这里插入图片描述
我们首先申请了两个chunk,一个的地址存在v2(我们把他命名为content),一个的地址存在s(我们把它命名为control)。
在这里插入图片描述
然后v2这个地方的前4个字节用来存放s的地址,如上面我作的图,ptr‘指向了s。
在这里插入图片描述
然后4个字节之后的用来存放content。
在这里插入图片描述
update函数的参数实际上是heap的次序,在执行之后数量加1,但是进入update的参数是减了一的,所以相当于没有变化。
在这里插入图片描述
这里的v3指的是text的长度。 (_DWORD *)ptr[xxxx]指向的是control的首部,也就是ptr’,那么 *(_DWORD *)ptr[xxxx]就是ptr‘指向的内容,也就是content。
(char *)ptr[xxxx]-4指向的就是control的首部的地址。
那么这里的意思就是,如果content的长度加上你的text的长度超过了control的首部,就会报错,然后退出程序。
在这里插入图片描述
再把图放上来看一看

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值