熙,
我正在使用gdb来利用我的程序
int main(int argc, char *argv[]) {
if(argc < 2) {
printf("You have vergotten to fill in a value\n");
exit(0);
}
char buffer[10];
strcpy(buffer, argv[1]);
printf("the value you supplie is ");
printf(buffer);
printf("\n");
return 0;
}
在他输入的vindeo教程中,在gdb“运行AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA”中输入
应该成为:
program received signal SIGSEGV, sementation fault.
0x41414141 in ?? ()
但我得到了SIGABRT
*** stack smashing detected ***: /root/Desktop/out terminated
======= Backtrace: =========
/lib/libc.so.6(__fortify_fail+0x37)[0x7ffff7b59217]
/lib/libc.so.6(__fortify_fail+0x0)[0x7ffff7b591e0]
/root/Desktop/out[0x400759]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7ffff7a78c4d]
/root/Desktop/out[0x400609]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:01 148883 /root/Desktop /out
00600000-00601000 r--p 00000000 08:01 148883 /root/Desktop /out
00601000-00602000 rw-p 00001000 08:01 148883 /root/D
等。然后是SIGABRT
我得到SIGABRT而不是SIGSEGV的原因是什么?
答案 0 :(得分:6)
您的编译器实现了stack smashing protection。运行时会告诉你它。尝试将缓冲区放在函数之外 - 最有可能出现分段错误。
顺便说一句,在root
下使用漏洞攻击并不是最好的主意。