Glibc堆利用-Double Free

利用Glibc堆溢出:DoubleFree漏洞获取Shell
本文详细介绍了如何利用Glibc中的DoubleFree漏洞来执行任意地址写,通过操纵内存中的chunk,构造fake_chunk并篡改目标变量,最终触发系统调用获取Shell。文章给出了详细的漏洞分析、利用流程及exploit代码。

Glibc堆利用-Double Free
漏洞成因:使用完一个chunk之后,只是free掉了指针,没有将内容置null
漏洞结果:free一个chunk之后,再次free,其实该chunk还在free list 里面,可以修改某一个在free list里面的chunk,可以修改该chunk的fd和bk指针,欺骗malloc返回一个任意地址的chunk,可以实现任意地址的写功能。

0x01
这里我们采用了师傅的样例程序,先检查该程序:
在这里插入图片描述
看到:保护全开,使用ida进行反编译分析:
发现经典菜单栏:并且实现了以下功能:

  while ( 2 )
  {
   
   
    v10 = 0LL;
    menu();
    scan("%d", &v4);
    switch ( (unsigned int)off_F70 )
    {
   
   
      case 1u:
        if ( cnt >= 7 )
        {
   
   
          puts("You can't capture more people.");
        }
        else
        {
   
   
          v3 = cnt;
          ptr[v3] = malloc(8uLL);
          ++cnt;
          puts("Captured.");
        }
        continue;
      case 2u:
        puts("Index:");
        scan("%d", &v5);
        free(ptr[v5]);
        puts("Eaten.");
        continue;
      case 3u:
        puts("Index:");
        scan("%d", &v5);
        puts("Ingredient:");
        scan("%llu", &v10);
        *(_QWORD *)ptr[v5] = v10;
        puts("Cooked.");
        continue;
      case 4u:
        printf("Your lair is at: %p\n", &lair);
        continue;
      case 5u:                                  // 给target赋值
        puts("Which kingdom?");
        scan("%llu", &v9);
        lair = v9;
        puts("Moved.");
        continue;
      case 6u<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值