unsortedbin attack的一些记录

写于2021.4.26 0:17
仅对自己的学习做一波总结和程序调试

首先编写一个程序
#include<stdio.h>
#include<malloc.h>
#include<unistd.h>
#include<string.h>
int main()
{
int size = 0x100;
char p = malloc(size);
printf("%p\n",p);
free(p);
(long
)(p+8) = 0x601100;
char *r= malloc(size);
printf("%p\n",r);
return 0;
}
我们一步步进行gdb跟进。come on
首先进行malloc一个0x100大小的heap空间
在这里插入图片描述上边的这个是我们malloc的,下方的是top chunk。(这里有个小细节,大家可以看到我malloc之后,打印p的地址为0x602010,而不是0x602000,因为p指向的是fd指针。)

n进行单步执行。
在这里插入图片描述会发现多出来了一个heap,那个是printf的缓冲区(没啥影响)

然后已经free掉的chunk的fd和bk都指向0x7ffff7dd1b78 <main_arena+88>(这个地址是unsorted bin的fd指针的地址,这说明仅有一个chunk时,其fd和bk都指向那个确定地址)在这里插入图片描述

下面一步的代码是将p+8这个位置赋值,赋得值是我们将要找到的目标地址
在这里插入图片描述

然后进行的是malloc,malloc对这个链进行的操作是解链操作(partial unlink)解链的第一步是跟随0x602000的bk找到(下一个chunk)即target,然后将main_arena的fd写入target的fd中。
第二步是跟着0x602000的bk找到下一个chunk,将0x602000的bk值传递给main_arena的bk,则main_arena的bk为target的地址了在这里插入图片描述
此时target的fd指针被写入了main_arena+0x58地址。
通过上边的操作,我们向0x601100写入了数据,就可以找到0x7f了,将0x7f作为malloc回去的size段即可进行fastbin attack

这里不会截稿

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值