新进程的堆栈准备 - bash / system()调用差异

时间:2013-11-07 21:56:55

标签: stack system-calls buffer-overflow

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

1 个答案:

答案 0 :(得分:1)

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