zoukankan      html  css  js  c++  java
  • Linux下堆漏洞的利用机制

    1.保护机制

    if (__builtin_expect (FD->bk != P || BK->fd != P, 0))                     
          malloc_printerr (check_action, "corrupted double-linked list", P);

    这个就是所谓的堆指针的check。

    FD其实就是p->fd

    BK其实就是p->bk

    就是说:p->fd->bk=p

        p->bk->fd=p

    就是做这么一个验证。

    这个验证找一个指向堆的指针就可以绕过,但是要知道指针变量的地址,否则就是白扯。

    为了触发unlink,需要伪造一个(2个)新块才行。其实就是

    伪造的空块|伪造的使用中的块

    释放使用中的伪造块就会造成伪造的空块调用unlink,因为这个触发了空块合并机制。

    怎么指定的前块为空呢?

    1.当前的prve_size有值,就是不为零

    2.第三个flag为0,表示前块为空

  • 相关阅读:
    第4章 排序
    第5章 算术与代数
    第6章 组合数学
    第7章 数论
    第8章 回溯法
    第9章 图遍历
    第11章 动态规划
    第10章 图算法
    第12章 网格
    第13章 几何
  • 原文地址:https://www.cnblogs.com/Ox9A82/p/5496669.html
Copyright © 2011-2022 走看看