我有一个说明堆栈缓冲区溢出的应用程序。我想激发重返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接受任何Lenght的论点:

./executor
You executed:./vulnapp 01234567890123450123BBBB�%�/bin/ged�������/
[syssec@syssecvm bufov1]$ 

在这种情况下,没有堆栈腐败。

为什么这样?

如果system()调用,有什么方法可以获得相同的效果(缓冲区溢出)?

有帮助吗?

解决方案

有堆栈腐败。使用错误代码退出的功能系统()可能139。您的应用程序没有注意到这是不同的过程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top