【问题标题】:Got segfault with a program to test shellcode测试 shellcode 的程序出现段错误
【发布时间】:2020-03-23 02:57:52
【问题描述】:

我发现这个 C 代码示例可以运行 shellcode,但它对我来说是分段错误。虽然它不会在我朋友的机器上导致分段错误,所以我想知道这是否是版本问题。 char 是否导致分段错误?

#include<stdio.h>
#include<string.h>

unsigned char code[] = \
"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";

main()
{

  printf("Shellcode Length:  %d\n", strlen(code));

    int (*ret)() = (int(*)())code;

    ret();

}

【问题讨论】:

    标签: c segmentation-fault


    【解决方案1】:

    为了让您的 shellcode 正常工作,您必须使用 -z execstack 标志编译您的程序。这将禁用默认启用的NX protection,并防止保存数据的页面被标记为可执行。如果您不禁用 NX,则程序将出现段错误,因为将放置您的 shellcode 字符串的内存页面将无法执行,并且在尝试执行其内容时进程将被终止。

    我还在你的 shellcode 中看到了一个int 0x80,所以我认为这应该是一个 x86 32 位 shellcode。除此之外,您在main() 前面缺少int,但我想这是一个复制粘贴错误。

    编译你的程序:

    gcc -m32 -z execstack prog.c
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      相关资源
      最近更新 更多