首页 > 解决方案 > 缓冲区溢出如何成为黑客的利用?

问题描述

我看过一个关于“缓冲区溢出利用”的视频视频中的那个人写入的字节数超过了数组可以容纳的字节数,例如:

int foo(const char* cp){
    char sz[10];
    strcpy(sz, cp); // consider cp is a pointer to 20 characters
    return x; // some valid return statement here
}

上面如果foo用 20 个字符的参数调用,那么我确定它是未定义的行为。但为什么他说这可能是一种利用,以及如何?

标签: c++buffer-overflow

解决方案


但为什么他说这可能是一种利用,以及如何?

仅举几个例子:

通过简单地覆盖具有有意义内容的其他内存内容。也许您的缓冲区结构后面有一个 bool 变量,其中包含访问权限标志。覆盖缓冲区可能会设置访问标志,并且代码将提供访问权限,这不是想法。

破坏堆栈也是一件坏事。也许您的 return 语句在错误的地址上运行更关键的是执行缓冲区的某些内容。

每个搜索引擎都可以找到很多这样的事情!

操纵标志访问的简单示例:

struct Check
{
    char small[4];
    bool accessGranted;
};  

int main()
{   
    Check check{ "", false };

    strcpy( check.small, "12345" );

    if ( check.accessGranted )
    {
        std::cout << "Ubs...!" << std::endl;
    }
}

顺便说一句:我发现那篇论文有点过时但很有用:http ://www.cis.syr.edu/~wedu/Teaching/IntrCompSec/LectureNotes_New/Buffer_Overflow.pdf


推荐阅读