c - 学校实验室 Shellcode BufferOverflow 的段错误

标签 c buffer-overflow shellexecute shellcode

我正在按照教授的指示运行 FedoraCore6。我正在尝试简单地运行实验室说明提供的这个 shellcode,但我一直遇到段错误。我们被告知我们可以使用以下命令在关闭堆栈 gaurd 的情况下进行编译 gcc-fno-stack-protector call_shellcode.c 无论哪种方式,我只是使用 gcc -o shell call_callshellcode.c 或使用 -fno-stack-protector 命令编译代码,我在启动代码时遇到段错误,而不是调用 shell ..任何帮助? 因此,我获得了本实验的代码,如下所示:

#include <stdlib.h>
#include <stdio.h>

    const char code[] = 
    "\x31\xc0"
    "\x50"
    "\x68""//sh"
    "\x68""\bin"
    "\x89\xe3"
    "\x50"
    "\x53"
    "\x89\xe1"
    "\x99"
    "\xb0\x0b"
    "\xcd\x80"
    ; 

int main(int argc, char **argv)
{
    char buf[sizeof(code)];
    strcpy(buf, code);
    ((void(*) ( ))buf)();
}

最佳答案

  • 首先,您必须确定您的程序出现 SEGFAULT 的位置。其中一种方法是运行 dmesg|尾部。此输出的最后一行将显示发生 SEGFAULT 时指令指针所在的位置。
  • 另一种方法是编译程序时设置-ggdb 标记。
  • 在您的 shell 上运行 ulimit -c unlimited 以确保在程序出现 SEGFAULT 时生成核心转储。
  • 在不更改代码的情况下运行您的程序,它应该显示Segmentation Fault (core dumped)。在您的本地目录中,您应该会看到一个名为 core 的新文件。
  • 运行 gdb -c core 分析核心转储。
  • 进入 gdb 后,键入 btbacktrace 以查看 SEGFAULT 发生的确切位置。
  • 您还可以使用info registersinfo localsinfo args 等命令来分析您拥有的值。使用 x/x $esp(或任何其他寄存器名称)检查各个寄存器包含的内容。

    祝你好运!

关于c - 学校实验室 Shellcode BufferOverflow 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7786249/

相关文章:

c - 十六进制字符串作为 gdb 中 scanf 的输入

C++ 运行 SHELLEXECUTEINFO 并附加功能名称

c - 缓冲区溢出漏洞实验室

c - 堆溢出攻击

winapi - 从非交互式服务 (win32/.net/powershell) 启动 UAC 提升进程

c++ ShellExecute "open"在已经打开的窗口中

c - 陷入无限循环 (C)

c - 格式化文档的 C 代码

c - 客户端绑定(bind)如何影响 tcp 连接?

c - 如何在 C 中创建动态字符串数组?