当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++基础入门教程

通过覆盖__atexit进行缓冲区溢出攻击

      通过覆盖__atexit进行缓冲区溢出攻击
    --静态编译版本的heap溢出

    原作者: Pascal BoUChareine <[email protected]>
    原文: <<__atexit in memory bugs -
    specific proof of concept with statically linked binaries and heap overflows>>

 

    译者注:这片文章可能很早就出来了,我看国内也没有人介绍,干脆就
    翻译出来一块儿共享吧,如有什么错误的地方,欢迎指正。
    mailto:[email protected]

    介绍:
    本文讨论了类似通过覆盖.dtors进行缓冲区溢出攻击的技术。归根结底
    是想方设法改变程序的执行流程,使之最终执行我们想要执行的代码。本文
    假设读者熟悉普通的缓冲区溢出技术。


    鸣谢:
    感谢Andrew R. Reiter看了这片文档,纠正一些错误。


    内容:

    I. atexit()的基本知识
    II. atexit()的执行
    III. EXPloitation的概念
    IV. Eggshell的定位
    V. 一个exploit的例子

 

    I. atexit()基本知识

    先让我们看看手册:

    NAME
    atexit - 注册一个在exit时候被调用的函数

    SYNOPSIS
    #include <stdlib.h>

    int
    atexit(void (*function)(void))

    DESCRIPTION
    atexit()函数注册一个给定的函数,该函数在程序exit时候被调用
    (不管是通过exit(3)或者还是通过从程序的main函数中返回)。
    注册的函数是反序被调用的;没有参数。至少32个函数总是可以被注册
    的,只要有充分的分配的内存,更多的函数也是允许的。

    看看下面程序的基本指令:

    char *glob;

    void test(void)
    {
    printf("%s", glob);
    }

    void main(void)
    {
    atexit(test);
    glob = "Exiting.\n";
    }
    当执行时,应该在标准输出上显示"Exiting" .

 

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接