c - 为什么我的缓冲区溢出尝试会出现段错误?

标签 c linux security exploit

我想知道为什么缓冲区溢出漏洞在特定情况下不起作用。到目前为止,我正在处理的溢出可以重定向返回地址,当我专注于一 block 内存时,比如 <_fini>程序将退出,而不执行该函数之后的任何其他操作。奇怪的是,当我尝试将内存重定向到环境变量时。由于某种原因,由于段错误,这不起作用。有人知道这是为什么吗?

这是代码

#include <stdio.h>

void func(char *buff){  
    char buffer[5];
    strcpy(buffer, buff);
    printf("%s\n", buffer);
}

int main(int argc, char *argv[]){
    func(argv[1]);
    printf("I'm done!\n");
    return 0;
}

最佳答案

我使用环境变量写了一篇关于缓冲区溢出的小文章,这可能对您有帮助:http://pinkmist.dyndns.org:8080/2012/04/24/basic-stack-overflow/ 。有很多因素可能会导致您的问题。我想问一下,您是否尝试过在没有环境变量的情况下编写缓冲区溢出?我发现使用环境变量使事情变得更加容易,但这可能是一个很好的学习练习,可以真正帮助您理解为什么这些东西起作用。我上面提到的另外一些需要考虑的事情是:ASLR 和 GCC 上的堆栈粉碎保护。这些事情中的任何一个都会让你的一天变得沮丧。确保您已禁用 ASLR 和堆栈粉碎保护(在任何现代发行版中均默认启用)。

关于c - 为什么我的缓冲区溢出尝试会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9919766/

相关文章:

c - do ... while 循环在 main 中不起作用

c - 使用 EOF 结束循环(不输入)

c - 如何测量对 10 个数字进行冒泡排序所花费的时间

linux - 使用 LInux 的 Bash 命令

security - 除了访问控制列表 (ACL) 之外,还有什么 "better"吗?

windows - 在Web应用程序和 native 应用程序之间组织安全通道

c - 未定义对已定义函数的引用

linux - 对 debugfs 文件执行写函数

在 Linux 中使用命令行编译 F# 程序

authentication - 远程 Web 应用程序在我当前的 Web 应用程序中对用户进行身份验证的最佳方式?