Fastbins attack : Alloc_to_stack

Fastbins attack : Alloc_to_stack

这个利用技巧与前面的house of spirit 和 double free很类似。都是利用fastbins 中单链表成员只用 fd 指针这个特点来将伪造的fake_chunk 挂进 fastbins中再申请出来进行利用

回到我们的主题啊,alloc_to_stack,顾名思义,这个技巧就是修改fd 指针将伪造的fake_chunk分配到栈段上面去。

演示:

#所用例子为wiki上的例子#

typedef struct _chunk
{
    long long pre_size;
    long long size;
    long long fd;
    long long bk;
} CHUNK,*PCHUNK;

int main(void)
{
    CHUNK stack_chunk;

    void *chunk1;
    void *chunk_a;

    stack_chunk.size=0x21;
    chunk1=malloc(0x10);

    free(chunk1);

    *(long long *)chunk1=&stack_chunk;
    malloc(0x10);
    chunk_a=malloc(0x10);
    return 0;
}

讲一下这个程序的流程:

首先模仿正常chunk定义了一个chunk结构体,并定义了一个结构体变量 PCHUNK。进入主函数,首先定义了一个结构体变量stack_chunk,然后定义了两个指针,为stack_chunk分配了一个0x10大小的堆块,之后将其释放。之后将stack_chunk 所在位置的指针赋给chunk1 ,之后申请0x10大小的堆块,并将堆块指针分配给 chunk_。

使用gcc -g test.c -o test 这个命令编译生成一个可执行文件,并用gdb调试一下:

首先将断点下在第19 行,将程序运行到这里,看一下我们申请分配的的堆块中的内容:
在这里插入图片描述

就是一个正常的chunk。然后我们将断点下在21行,也就是释放完堆块后的一步,这个时候我们看一下bin 中的情况:
在这里插入图片描述

可以看见这个堆块去往了fastbins 。之后我们顺着程序的流程继续往下,可以发现我们这个程序是存在漏洞的:在释放掉第一个malloc分配的堆块后并没有将指向这个堆块的指针置空,这里就出现了一个 use after free 的漏洞(也就是我们可以利用没有被置空的chunk1 指针对这个地址上的堆块进行修改)

在程序中的:

    *(long long *)chunk1=&stack_chunk;

这一句就是对这个chunk中fd指针进行修改,将它改为先前定义的那个stack_chunk 所指向的堆块地址。

由于 fd指针被修改和fastbins 的机制,这个本来不属于程序本身分配的一段内存就被挂进了fastbins,这样我们就能将这个在栈上伪造的堆块挂进fastbins ,并且由于它的位置是被修改的堆块的fd 指针,所以在下一次同大小的分配中,我们就可以再次启用它了。

步进程序看一下这个操作:
在这里插入图片描述

可以看见一个栈地址被挂进了fastbins ,而且还被peda给检测出来了😂

再往后步进去看一下对这个我们分配之后对这个stack_chunk 的再次启用:
在这里插入图片描述

可以看见这个栈段现在已经作为一个chunk 并且能被我们所控制了

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值