0

我有一个解释堆栈缓冲区溢出的应用程序。我想引发 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() 调用的情况下,有没有办法获得相同的效果(缓冲区溢出)?

4

1 回答 1

1

存在堆栈损坏。函数 system() 退出,错误代码可能为 139。您的应用程序没有注意到这一点,因为它是不同的进程。

于 2014-02-06T10:17:32.330 回答