我有一个解释堆栈缓冲区溢出的应用程序。我想引发 Return-to-libc 攻击。
缓冲区溢出基于:
int main(int argc, char **argv)
{
[...]
char buff[16];
strcpy(buff,argv[1]);
[...]
}
当我直接从 shell 调用这个应用程序时,我得到了预期的错误 - 堆栈已损坏:
[syssec@syssecvm bufov1]$ ./vulnapp hhgfhdsgfsagfzutuewzrqwgfshgafsd
Segmentation fault
但是,当我尝试在其他应用程序(executor.c)中准备参数并通过 system() 调用调用 vulnapp 时,什么也没有发生。vulnapp 接受任何长度的参数:
./executor
You executed:./vulnapp 01234567890123450123BBBB�%�/bin/ged�������/
[syssec@syssecvm bufov1]$
在这种情况下没有堆栈损坏。
为什么会这样?
在 system() 调用的情况下,有没有办法获得相同的效果(缓冲区溢出)?